Works with the best tools:
Works with the best tools:
Have a question?
Contact usThe Real Estate API extracts structured property data from major real estate websites β price, title, surface area, number of rooms, energy class, images, and more β without writing any parsing logic. Just pass the listing URL and get clean JSON back.
The Real Estate API handles JavaScript rendering, proxy rotation, and CAPTCHA bypassing automatically. No need to set useChrome: true β it is enabled by default for all supported portals.
The following real estate portals are fully supported. Can't find your target? Contact us and we'll evaluate adding it.
| Parameter | Type | Default | Description |
|---|---|---|---|
| url | string | β | RequiredFull URL of the real estate listing. Must include https://. |
| premiumProxy | boolean | false | +9 creditsResidential proxy for better success on protected portals. Consumes 10 credits. |
| proxyCountry | string | null | Requires premiumProxyISO 3166-1 country code (e.g. "FR", "US"). Consumes 25 credits. |
| waitForNetworkRequests | boolean | false | OptionalWait for AJAX requests to finish. Useful for listings that load price asynchronously. |
For a full description of all available options, see the Advanced Options section.
On success, the API returns a JSON object. Fields set to null were not found on the listing page.
| Field | Type | Description |
|---|---|---|
| title | string | Full title of the listing (e.g. "4-Room Apartment β Tenanted Sale"). |
| price | number | Listing price as a numeric value (e.g. 542900). |
| currency | string | ISO 4217 currency code (e.g. "EUR", "USD"). |
| surfaceArea | number | Surface area of the property (e.g. 70). |
| surfaceAreaUnit | string | "sqm" (square metres) or "sqft" (square feet). |
| numberOfRooms | number | Total number of rooms. |
| numberOfBedrooms | number | Number of bedrooms. |
| energyClass | string | DPE energy class and value (e.g. "D:208" = class D, 208 kWh/mΒ²/year). France only. |
| greenhouseGazClass | string | GES greenhouse gas class and value (e.g. "D:28"). France only. |
| monthlyRent | number | null | Monthly rent for rental listings. null for sale listings. |
| codeInsee | string | French INSEE municipality code (e.g. "75115" for Paris 15th). France only. |
| description | string | Full text description of the listing. |
| images | array | Array of image URLs for the listing photos. |
| host | string | Hostname of the scraped portal (e.g. "www.bienici.com"). |
| siteURL | string | The original listing URL that was scraped. |
| statusCode | number | HTTP status code returned by the target website. |
| captchaFound | boolean | true if a CAPTCHA was detected and bypassed. |
| error | string | null | null on success. Error message if the scrape failed. |
When a scrape fails, the API still returns HTTP 200 but the response will contain a non-null error field.
| HTTP Code | Meaning | What to do |
|---|---|---|
| 200 + error: null | Success | Data is ready to use. |
| 200 + error: "..." | Scrape failed | The listing URL may be invalid, expired, or the portal temporarily unavailable. |
| 400 | Bad request | Missing or malformed url parameter. |
| 401 | Unauthorized | Invalid credentials. Check your dashboard. |
| 429 | Rate limit exceeded | Slow down requests or upgrade your plan. |
const username = "yourUsername";
const apiKey = "yourApiKey";
const url = "https://www.scraping-bot.io/realEstate.html";
const auth = "Basic " + Buffer.from(`${username}:${apiKey}`).toString("base64");
async function scrape() {
const response = await fetch("http://api.scraping-bot.io/scrape/real-estate", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
Authorization: auth,
},
body: JSON.stringify({
url,
options: {
useChrome: false, // set to true if you want to use headless chrome for javascript rendering
premiumProxy: true, // set to false to use standard proxies instead of premium proxies (Unblock Amazon, Google, Rakuten...)
proxyCountry: null, // allows you to choose a country proxy (example: proxyCountry: "FR")
waitForNetworkRequests: false, // wait for most ajax requests to finish until returning the Html content (this option can only be used if useChrome is set to true),
// this can slowdown or fail your scraping if some requests are never ending only use if really needed to get some price loaded asynchronously for example
},
}),
});
const data = await response.json();
console.log(data);
}
scrape();Each request will return the product data in JSON format
{
"error": null,
"data": {
"title": "Apple iPhone XR 64GB Red Unlocked A2105 GSM SEALED BOX- 1 Year Apple Warranty",
"description": "Apple iPhone XR. 1 YEAR APPLE CARE WARRANTY.",
"image": "https://www.scraping-bot.io/iphone_example_ebay_files/s-l500.png",
"price": 689,
"shippingFees": 18,
"currency": "GBP",
"isInStock": true,
"EAN13": "0190198770660",
"ASIN": null,
"ISBN": null,
"color": "White",
"brand": "Apple",
"category": {
"name": "Mobile & Smart Phones",
"url": "https://www.ebay.co.uk/b/Mobile-Smart-Phones-/9355"
},
"categories": [
{
"name": "Mobile Phones & Communication",
"url": "https://www.ebay.co.uk/b/Mobile-Phones-Communication-/15032"
},
{
"name": "Mobile & Smart Phones",
"url": "https://www.ebay.co.uk/b/Mobile-Smart-Phones-/9355"
}
],
"siteURL": "https://www.ebay.co.uk/itm/Apple-iPhone-XR-64GB-Red-Unlocked-A2105-GSM-SEALED-BOX-1-Year-Apple-Warranty-/123902112947",
"siteHtml": null,
"productHasVariations": null,
"error": null,
"statusCode": 200,
"isFinished": null,
"isDead": null,
"htmlLength": 128240,
"captchaFound": false,
"isHtmlPage": true,
"host": "www.scraping-bot.io",
"deliveryDate": "Fri. 13 Sep. - Mon. 23 Sep. ",
"originalPrice": null
}
}