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 returns structured data for supported portals. Enable useChrome: true only when the target requires JavaScript rendering; it is not forced by this endpoint.
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.rightmove.co.uk/properties/123456789";
const auth = "Basic " + Buffer.from(`${username}:${apiKey}`).toString("base64");
async function scrape() {
const response = await fetch("https://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://i.ebayimg.com/images/g/example/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
}
}