{
  "openapi": "3.0.1",
  "info": {
    "title": "Bien'ici Property Search Scraper",
    "description": "[💰 $2.5 / 1K] Extract property listings from bien'ici (bienici.com), a leading French real estate portal. Search by location, price, type, rooms, and surface, or paste search URLs. Get prices, fees, surface, rooms, energy ratings, photos, and agency details for sale and rental listings in France.",
    "version": "1.0",
    "x-build-id": "Fmkod3fEwzFHDh0oU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~bienici-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-bienici-com-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/solidcode~bienici-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-bienici-com-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/solidcode~bienici-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-bienici-com-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Paste one or more bien'ici search result URLs (for example a results page for 'achat' in Paris). The scraper reads the filters straight from each URL. Leave empty to build a search with the filter fields below.",
            "items": {
              "type": "string"
            }
          },
          "transactionType": {
            "title": "Transaction Type",
            "enum": [
              "buy",
              "rent"
            ],
            "type": "string",
            "description": "Search properties for sale or for rent. Only applies when you build a search with the filters below (ignored when Search URLs are provided).",
            "default": "buy"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, district, or postal code to search (for example 'Paris', 'Lyon', or '75011'). Required when building a search without a URL."
          },
          "propertyTypes": {
            "title": "Property Types",
            "uniqueItems": true,
            "type": "array",
            "description": "Limit results to these property types. Leave empty to include all types.",
            "items": {
              "type": "string",
              "enum": [
                "flat",
                "house",
                "loft",
                "townhouse",
                "castle",
                "terrain",
                "parking",
                "building",
                "shop",
                "office",
                "premises"
              ],
              "enumTitles": [
                "Apartment",
                "House",
                "Loft",
                "Townhouse",
                "Castle / Mansion",
                "Land",
                "Parking / Garage",
                "Building",
                "Shop",
                "Office",
                "Commercial premises"
              ]
            },
            "default": []
          },
          "priceMin": {
            "title": "Minimum Price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings at or above this price in euros. For rentals this is the monthly rent. Leave empty for no minimum."
          },
          "priceMax": {
            "title": "Maximum Price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings at or below this price in euros. For rentals this is the monthly rent. Leave empty for no maximum."
          },
          "roomsMin": {
            "title": "Minimum Rooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only include properties with at least this many rooms (pieces). Leave empty for no minimum."
          },
          "bedroomsMin": {
            "title": "Minimum Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only include properties with at least this many bedrooms (chambres). Leave empty for no minimum."
          },
          "surfaceMin": {
            "title": "Minimum Surface Area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include properties with at least this living surface in square meters. Leave empty for no minimum."
          },
          "surfaceMax": {
            "title": "Maximum Surface Area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include properties with at most this living surface in square meters. Leave empty for no maximum."
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "relevance",
              "priceAsc",
              "priceDesc",
              "newest",
              "surfaceDesc"
            ],
            "type": "string",
            "description": "Choose how bien'ici orders the results when building a search.",
            "default": "relevance"
          },
          "includeDetails": {
            "title": "Include Agency Contact Details",
            "type": "boolean",
            "description": "Fetch each listing's agency contact details (agency name, phone, address) plus a few extra specs like elevator and cellar count. This makes one extra request per listing, so runs take longer and cost more. Leave off for faster, cheaper runs that still include price, surface, rooms, energy ratings, location, and photos.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 0,
            "type": "integer",
            "description": "Total number of listings to collect across all searches and URLs. Set to 0 to collect as many as available. Note: bien'ici limits any single search to about 2,500 results — to go beyond that, narrow your filters (price, surface, type) or split the search by area or arrondissement.",
            "default": 100
          },
          "maxResultsPerUrl": {
            "title": "Maximum Results Per URL",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listings to collect from each individual search or URL. Set to 0 for no per-URL limit (the overall Maximum Results still applies).",
            "default": 0
          },
          "ignoreUrlFailures": {
            "title": "Continue If a URL Fails",
            "type": "boolean",
            "description": "When enabled, the scraper skips any search or URL that fails and continues with the rest. When disabled, the run stops on the first failure.",
            "default": true
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}