{
  "openapi": "3.0.1",
  "info": {
    "title": "Leboncoin Real Estate Scraper",
    "description": "Scrape leboncoin.fr real estate listings with full filters: city, price, surface, rooms, DPE. Returns 40+ fields per ad — GPS, images, seller info, energy class. No proxy setup needed, works out of the box.",
    "version": "1.0",
    "x-build-id": "V7KapbsLbCfxrN7mA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/leadsbrary~leboncoin-real-estate-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-leadsbrary-leboncoin-real-estate-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/leadsbrary~leboncoin-real-estate-scraper/runs": {
      "post": {
        "operationId": "runs-sync-leadsbrary-leboncoin-real-estate-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/leadsbrary~leboncoin-real-estate-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-leadsbrary-leboncoin-real-estate-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": {
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Words typed into leboncoin's search box (free text, French). The search runs across all of leboncoin, so use property words to stay on real estate. Examples: `maison`, `appartement`, `appartement T3`, `villa`, `terrain`. Default: `maison`.",
            "default": "maison"
          },
          "city": {
            "title": "City / Arrondissement",
            "type": "string",
            "description": "Where to search: a French city name, an arrondissement or a 5-digit postcode. Examples: `Paris 15`, `75015`, `Lyon 3`, `69003`, `Bordeaux`. The Actor converts it to GPS coordinates with the official api-adresse.data.gouv.fr service and searches around that point (see Search radius). Leave empty to search all of France. The run fails with \"City not found\" if the place cannot be resolved."
          },
          "radius": {
            "title": "Search radius (meters)",
            "minimum": 500,
            "maximum": 100000,
            "type": "integer",
            "description": "Distance around the city centre, in meters (500 to 100000). Only used when City is set. Example: `10000` = 10 km. Default: 10000.",
            "default": 10000
          },
          "priceMin": {
            "title": "Minimum price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in euros, as a whole number with no spaces or symbols. Example: `150000`. Leave empty for no minimum."
          },
          "priceMax": {
            "title": "Maximum price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in euros, as a whole number. Example: `400000`. Leave empty for no maximum."
          },
          "surfaceMin": {
            "title": "Minimum surface (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest living area to include, in square meters (whole number). Example: `60`. Leave empty for no minimum."
          },
          "surfaceMax": {
            "title": "Maximum surface (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest living area to include, in square meters (whole number). Example: `120`. Leave empty for no maximum."
          },
          "roomsMin": {
            "title": "Minimum rooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Minimum number of rooms (\"pièces\" in French listings, 1 to 20). Example: `3` returns 3-room properties (T3/F3) and larger. Leave empty for no minimum."
          },
          "maxAds": {
            "title": "Max ads",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of ads to save (1 to 5000). Each saved ad is one billed result, so this also caps your cost. leboncoin shows 35 ads per page and at most 100 pages per search, so one search never returns more than about 3,500 ads. Default: 100.",
            "default": 100
          },
          "delay": {
            "title": "Delay between pages (seconds)",
            "minimum": 0.5,
            "maximum": 30,
            "type": "number",
            "description": "Pause between two search-result pages, in seconds (0.5 to 30). Higher values are gentler on leboncoin but make the run longer. Default: 2.0.",
            "default": 2
          },
          "forceDescription": {
            "title": "Fetch full descriptions",
            "type": "boolean",
            "description": "leboncoin's search results never include the ad text, so `description` is empty by default. Turn this on to open every ad's own page and fetch its full description. It adds one request per ad and makes the run noticeably longer, so keep Max ads reasonable. It also increases platform usage (longer run), and if an \"Ad description\" event is listed in the Pricing tab, it is charged once per description found. Default: off.",
            "default": false
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}