Skip to content

Real estate data

Property listings.
Ready for your pipeline.

Extract asking prices, property features and listing identifiers from pages you supply. Build comparable records across permitted sources without managing browser infrastructure.

Property listing → data.extract
{
  "listing_id": "123",
  "asking_price": 325000,
  "currency": "EUR",
  "bedrooms": 2,
  "area_sqm": 74
}

Illustrative property data, not a live listing or valuation.

Extract a listing into a defined schema

POST this JSON body to /api/v1/scrape with an x-api-key header. Replace the illustrative URL with a listing you are authorized to collect.

If property details load dynamically, add use_js_render and an appropriate js_wait_for selector. Prefer an individual listing or list view over a map when it exposes the same data more directly.

Check the API HTTP status and success, then read data.extract. Validate currency, area units and missing values; do not treat an asking price as a sale price.

Extraction reference →
{
  "url": "https://property.example.com/listing/123",
  "extract_schema": {
    "type": "object",
    "properties": {
      "listing_id": {
        "type": "string"
      },
      "asking_price": {
        "type": "number"
      },
      "currency": {
        "type": "string"
      },
      "bedrooms": {
        "type": "integer"
      },
      "area_sqm": {
        "type": "number"
      }
    }
  }
}

Build history, not duplicate listings

  1. 01 · Keep source identifiers

    Store the source URL and portal listing ID. Cross-portal matching needs your own rules; similar addresses can refer to different units.

  2. 02 · Normalize each snapshot

    Record collection time, currency, units and listing status. Retain missing values instead of guessing property features.

  3. 03 · Compare on your schedule

    Your application schedules new requests and detects changes. A failed request is not evidence that a property was sold or withdrawn.

Process supplied URLs with async batches, or give an MCP agent a small set of listings to research.

Know the limits of a listing snapshot

Does one request collect all listings on a portal?

No. A request reads the URL you supply. Collect pagination URLs or run the required browser interactions, then deduplicate listings in your application. Async batches can process up to 100 supplied URLs.

Can I track changes in asking prices?

Yes, by scheduling collection in your application and storing snapshots with source URLs, listing IDs and collection times. Compare matching properties yourself; FineData does not supply built-in price history, alerts or valuations.

Can I scrape map-based interfaces?

Browser actions can interact with a page, but a rendered map does not guarantee access to every listing. Public list views and individual property URLs are usually easier to validate than map-only content.

Which sources can I use?

Use only public or otherwise authorized listing data, subject to the source terms and licensing. Portal coverage is not guaranteed, and personal details may require additional privacy safeguards. An asking price is not a verified sale price or valuation.

A default fetch with AI extraction is 8 tokens before rendering, routing or retries. Use tokens_used for actual charges. Follow source licensing and the Acceptable Use Policy, including obligations around personal data.

Test one listing from each source

Check the fields before building a larger collection. Failed scrapes are not billed.