USE CASE

Real Estate Data Extraction — Listings, Prices and Price History

The same apartment appears on four portals, under two agencies, with three different floor areas and two different asking prices. ScrapeWise extracts every listing, resolves them to one property, keeps the price history, and hands you rows you can model yield on.

PAIN POINTS

Why Property Data Is Harder Than It Looks

  1. 01

    One Property, Four Listings, Four Different Truths

    Multi-agency listing is the norm, not the exception. Counted raw, a market of 3,000 properties reads as 5,000 units of supply. Worse, the duplicates are not evenly spread — desirable stock is listed more widely, so the distortion lands hardest exactly where the analysis matters.

  2. 02

    The Price History Is Not on the Page

    Portals show today's asking price and nothing else. The number that predicts a negotiation — was this listed at EUR 199,000 six weeks ago and cut twice since — exists only if someone captured the listing before the cut. It cannot be recovered retroactively.

  3. 03

    Floor Area Is Stated, Not Standardised

    Gross, net, living and usable area get published in the same field with no label. A yield model built on unreconciled area figures produces price-per-square-metre numbers that are confidently wrong, and the error is invisible in the output.

  4. 04

    Listings Go Stale Without Being Removed

    A sold property often stays up for weeks. Without tracking first-seen, last-seen and status transitions, time-on-market is unmeasurable and the apparent inventory includes stock nobody can buy.

  5. 05

    Rental and Sale Data Live on Different Pages

    Yield needs both, matched to comparable stock in the same micro-location. Collecting them from separate portals without a shared location and attribute model leaves you comparing a 2-room rental in one district to a 3-room sale in another.

EUR 0.15

Per 1,000 listing pages extracted — a whole city's inventory costs less than an analyst hour

36

Ready-made site endpoints, plus any regional property portal you point us at

5

Free requests on every new account — pull a district and check the rows before committing

HOW IT WORKS

From Portal to Property Dataset in 3 Steps

01

Define the Market and Portals

Tell us the city or districts, which portals carry the inventory there, and whether you need sale, rental or both. Matching tolerances and inclusion rules are agreed before a single page is collected.

02

We Extract, Resolve and Diff

Every listing is extracted independently, then resolved to a property on address, floor, rooms and area. Each run is diffed against the previous one so price cuts, new inventory and status changes are captured the day they appear.

03

You Get Rows, Not Screenshots

Delivered as JSON, CSV or straight to your warehouse, with property-level totals and listing-level detail together. Feed it into yield models, comparables or acquisition screens and re-run the same scope on any cadence.

One Apartment, Four Portals, One Row You Can Trust

This is the actual sequence behind the resolution above — a two-room Tallinn apartment appearing on four portals under two agencies, with three stated floor areas and one price cut nobody would see from a single snapshot.

  1. Extract Every Listing Independently

    Each portal is collected on its own terms: asking price, stated area, room count, floor, building year, address as published, agency, listing reference and the date the portal claims it went live. Nothing is merged at this stage. Four listings go in as four rows, each carrying the URL it came from, because a reconciliation you cannot audit is a reconciliation nobody will trust.

  2. Resolve Them to One Property

    Matching runs on the combination that actually identifies a property — address or cadastral reference where published, plus floor, room count, area within tolerance and building. Agency listing references match two of the four immediately. The fourth states 45 m² against 48.2 m² elsewhere, inside the tolerance band but flagged: it still resolves to PR-10482, and the conflict is carried on the row rather than silently averaged away.

  3. Keep the Timeline, Not Just the Snapshot

    Because the property was already being tracked, the row carries what the portals do not show: first seen 63 days ago at EUR 199,000, cut to EUR 189,000 on day 23, and one portal still advertising EUR 195,000 with a last-modified date 41 days old. Time-on-market, the cut history and the stale outlier are all derived from the extraction history — none of it is readable from today's page.

What a Property Extraction Has to Get Right

Property extractions rarely fail on the asking price. They fail on identity, on area, and on time — and each of those errors survives into the model looking exactly like a correct number.

Property Identity Across Portals

Address strings differ by portal, and many deliberately obscure the house number until enquiry. Identity is built from what is stable: cadastral or land-registry reference where published, then address plus floor, room count, area and building year together. Any one of those alone over-merges.

  • cadastral_ref
  • address_normalised
  • floor
  • matched_property_id

Area, Rooms and What Was Actually Measured

Gross, net, living and usable area are published interchangeably. Where the portal labels the basis it is captured; where it does not, the figure is kept as stated and marked unlabelled rather than assumed. Price per square metre is computed only on a stated basis, never on a guessed one.

  • area_sqm
  • area_basis
  • rooms
  • area_conflict

Price, Price History and Cuts

Today's asking price is one field. The negotiation signal is the sequence: original asking price, each change, the date of each change and the cumulative reduction. It exists only because the listing was observed over time, which is why history cannot be backfilled after the fact.

  • asking_price
  • first_asking_price
  • price_changes
  • total_reduction_pct

Status, Time on Market and Staleness

First seen, last seen and status transitions separate live inventory from listings a portal simply never took down. Without them, time-on-market is unmeasurable and apparent supply includes stock that has already sold.

  • first_seen
  • last_seen
  • listing_status
  • days_on_market

Resolved, Duplicate, or Conflicting

Every listing collected lands in one of three states. A property dataset that does not distinguish them cannot support a supply count, let alone a valuation.

  • Resolved — A Distinct Property

    First time this property has been seen. It contributes one unit to supply, carries its own price history from the moment it was first observed, and holds the listing it was resolved from as evidence.

  • Duplicate — Same Property, Another Portal

    Matched to a property already resolved, usually the same agency syndicating or a second agency on the same instruction. It adds a price point and a channel but not a unit of supply. Kept visible, because how widely a property is advertised is itself a signal.

  • Conflicting — Held for Review

    Same address and floor, but an area or room count outside tolerance, or two materially different asking prices on the same day. Held rather than merged or dropped, because silently averaging 45 m² and 50 m² produces a price per square metre that is wrong in a direction nobody can see.

What You Send, What You Receive

You define the market, the portals and the property types. You receive deduplicated property rows with asking prices, normalised attributes and the price history the portals do not publish.

You give
  • Market and arearequired

    The country, city or districts you are tracking. Defined as portal search URLs, a district list, or a bounding area you approve before extraction starts.

    EE — Tallinn: Kristiine, Põhja-Tallinn, Kesklinn
  • Portals to coverrequired

    National portals plus the regional and agency sites that actually carry inventory in that market, including agency websites where listings appear before syndication.

    kv.eecity24.eerightmove.co.ukagency sites
  • Types and transactionrequired
    • Sale — residential
    • Rental — long term
    • Sale and rental
    • Commercial

    Both sides are needed for yield. Sale and rental listings are extracted into the same attribute and location model so comparable stock can actually be compared.

  • History policyoptional
    • Track price changes and time on market

    On by default. Each run diffs against the previous one, so price cuts, status transitions and days on market accumulate. History starts the day tracking starts — it cannot be backfilled.

  • Refresh cadenceoptional
    • Daily
    • Twice weekly
    • Weekly
    • One-off snapshot

    Daily is what makes a price cut visible within a day of it happening. A one-off snapshot gives you inventory and prices but no history and no time-on-market.

You get

One row per listing, keyed to one property, 16 columns each

  • matched_property_id
  • portal
  • listing_url
  • address_normalised
  • property_type
  • rooms
  • area_sqm
  • area_basis
  • floor
  • asking_price
  • price_per_sqm
  • first_asking_price
  • +4 more, see all columns

Delivered by REST API, CSV export or straight into your data warehouse. Property-level totals and listing-level detail arrive together, so a supply count can always be traced back to the listings that produced it.

The Property Rows You Actually Receive

One row per listing, each carrying the property it resolved to — which is what lets you count supply and channels from the same dataset. Five listings, two properties, one conflict held back.

matched_property_idportaladdress_normalisedroomsarea_sqmasking_pricedays_on_marketresolution
PR-10482portal-a.eeKristiine, Tallinn — 4th floor248.2EUR 189,00063resolved
PR-10482portal-b.eeKristiine, Tallinn — 4th floor248.0EUR 189,00063duplicate
PR-10482portal-d.eeKristiine, Tallinn — 4th floor245.0EUR 189,00063conflicting — area 45.0 vs 48.2
PR-10730portal-a.eePõhja-Tallinn — 2nd floor371.4EUR 244,9009resolved
—portal-c.comKristiine, Tallinn — 4th floor250.0EUR 195,000—stale — last modified 41 days ago
BUILD VS BUY

Scrape It Yourself, or Receive Resolved Rows

Feature
In-House Portal Scripts
Scrapewise
Portal coverage
The two or three you had time to script
Any public portal, including regional sites and agency websites
Duplicate listings
Counted as separate supply, or dropped on a title match
Resolved on address, floor, rooms and area — duplicates kept as channels
Price history
Whatever you happened to store, if you thought of it first
Every run diffed; cuts, reductions and days on market accumulate automatically
Area conflicts
First value wins, silently
Flagged and held, never averaged into a price per square metre
Stale listings
Indistinguishable from live inventory
First seen, last seen and status transitions on every row
When a portal changes layout
A silent data gap until someone notices the row count
Extraction is maintained on our side; you keep receiving rows
What you compare on cost
Engineering time, plus proxies, plus the gaps
EUR 0.15 per 1,000 listing pages, 5 free requests to test
BENEFITS

Built for Investors, Proptech Teams and Market Analysts

One Property, One Row, Every Channel

One Property, One Row, Every Channel

Listings are resolved across portals and agencies before anything is counted, so supply figures reflect properties rather than advertisements. The duplicates are retained as channels, because how widely a property is marketed is a signal in its own right.

Price History the Portals Do Not Publish

Price History the Portals Do Not Publish

Every run is diffed against the last, so original asking price, each cut, cumulative reduction and days on market accumulate on the property. This is the negotiation signal, and it exists only from the moment tracking starts.

Area and Attributes You Can Model On

Area and Attributes You Can Model On

Floor area, room count, floor and building year are normalised across portals, with the measurement basis recorded where the portal states it and conflicts flagged where they disagree. Price per square metre is computed on a stated basis, never a guessed one.

Property Data That Survives Contact With a Model

Stop counting advertisements as supply. ScrapeWise resolves every listing to a property, keeps the price history the portals discard, and delivers rows your yield and comparables models can actually use.

FAQ

Frequently Asked Questions

Everything you need to know about extracting property listing, price and rental data with ScrapeWise.

Any public listing site. ScrapeWise ships 36 ready-made site endpoints and adds new ones on request, which in property is usually necessary — the portal that decides a national market is rarely one of the global names. Agency websites matter too, because listings frequently appear there before they syndicate.