Send us the source
Brief 01 What was hard 02 How it works 03 Numbers 04 Outcome 05 All cases → Send us the source

Atoms / Data extraction / Cases / Rightmove

Real estate — running since 2022

Rightmove — a national portal behind a search ceiling.

The UK residential market is well served by one dominant portal, which is convenient until you try to collect all of it. A hard ceiling on results per search means the naive approach silently caps at a fraction of the market — and the fraction is not random, it is the cheap end.

The source is named because it is public; the client is not. Every figure on this page is a measured production number the client agreed to publish. Have a source of your own? Send it over, whatever its size — you get an answer within 24 hours.

Case filerightmoveIn production
SourceRightmove
ClientMortgage & valuation analytics
Running since2022
DeliverySnowflake, daily
Sweep window4 hours
Properties in the graph29M
Reach → Read → Reconcile → DeliverRecounted daily
12B

property records to date

3.4B

a year

99.0%

measured coverage

29M

UK properties in the graph

SourceRightmove
VerticalReal estate
Running since2022 — without a rebuild
The brief01 / 05

What the client actually needed.

Not more rows. Every one of these projects started with somebody who already had data and could not use it for the decision in front of them.

The problem

Where it started

The client models residential valuations for lenders, so a systematically missing segment is a systematically wrong model. Their previous supplier delivered a large file each night and had never measured what share of the live market it represented — and when we measured it, the answer was seventy-one per cent, concentrated in exactly the price bands the lender cared least about.

Fixed on day one

What we committed to

Share of live listings present each morning, measured not asserted99% floor
Price changes and withdrawals captured within a day of occurringDaily
Full sweep completed before the client's 07:00 model run4 h window
Agent and branch attribution retained for every listingEvery record

Every one of these is measured continuously and reported on the same dashboard the client watches. A commitment nobody measures is a sentence in a proposal.

What was hard02 / 05

Four things that beat the previous attempt.

None of these is solved by better headers or a bigger proxy pool. Each needs a different piece of engineering, and working out which one you are actually facing is most of the job.

01 — CeilingCeiling

A bounded result set

Any search returns a bounded number of results however it is phrased, so a national sweep by area alone caps out in every city and quietly loses the busiest markets first.

What we doRecursive partitioning by geography, price band and property type, with each partition carrying a proof that it sits under the ceiling and splitting automatically when it approaches it.

02 — StatusStatus

Withdrawn, sold, or relisted

A listing that disappears may have sold, been withdrawn, or been relisted at a new price by the same agent an hour later. Treating those as one event corrupts every time-on-market figure downstream.

What we doDisappearances are classified using relisting detection across agent, address and media fingerprints, so a relist is recognised as the same property rather than counted as a new one.

03 — HistoryHistory

The source keeps the present

Price reductions are the strongest signal in the dataset and the source shows only the current asking price. If you were not observing yesterday, yesterday does not exist.

What we doEvery observed state is retained with its observation time, and price trajectories are reconstructed from our own record. Six years in, that archive is worth more than the daily file.

04 — WindowWindow

Four hours, once a day

A national sweep that overruns the client's morning model run is a sweep that did not happen, and load shaping means we cannot simply add parallelism until it fits.

What we doPartitions are scheduled by expected cost and volatility so the sweep finishes inside the window with the shaping constraint respected, and the slow tail is started first rather than last.

How it works03 / 05

Five decisions the pipeline is built on.

The architecture is not interesting; every extraction system has a queue, a fetcher and a parser. These are the decisions that made this one work where the last one did not.

01

Partition until it provably fits

Every partition carries a proof of sitting under the ceiling, re-checked on every sweep. When a town gets busy, its partition splits before anything is lost rather than after a quarter of reporting.

02

Detect relists, do not count them twice

Address normalisation, agent identity and media fingerprints are used to recognise the same property returning under a new listing, which is what makes time-on-market figures trustworthy.

03

Keep the archive

Observations are never overwritten. The client's most valuable derived fields — price trajectory, days on market, reduction frequency — all come from our own history rather than from the source.

04

Schedule for the window

Cost and volatility drive the order of work so the sweep completes before the model run, with the expensive tail started early instead of left to the end.

05

Recount from outside

An independent sample of the live market is collected each day by a different path, and the delivered file is measured against it. That measurement is the coverage figure in the client's dashboard.

The numbers04 / 05

What it does on an ordinary day.

Production figures, not a benchmark run. Coverage is recounted daily against an independent sample of the live source rather than asserted, which is why the numbers are not round.

Daily profile

Where the volume goes

Property records a day9.4M
Requests a day2.5M
Properties refreshed a day970k
Active listings tracked980k
Relists detected a day2 100

The live market is swept completely inside four hours — 1.5 million requests at 104 a second, which is the number the whole partitioning strategy is designed around, not the listing count. The standing graph of 29 million properties turns over on a rolling thirty-day cycle, another million requests spread across the day. Together: 9.4 million records a day, 280 million a month, 3.4 billion a year, 12 billion since 2022.

Headline

The four that are contractual

Collected to date
12B records
Coverage
99.0 %
Sweep window
4 h
History depth
6 yrs

These four sit in the support agreement. When one of them drifts outside its band, we are alerted within fifteen minutes and fixing it is routine work under the monthly arrangement, not a change request.

What changed05 / 05

Before, and after.

The columns are the client's own numbers from before the rebuild and the measured ones from production today. The left column is the part most vendors would rather not put on a page.

MetricBeforeToday

Share of live market delivered

About 71%, unmeasured

99.0%, recounted daily

Time on market

Wrong wherever relisting occurred

Correct, relists detected

Price history

None

Six years and growing

Sweep completion

Frequently after the model run

Inside the four-hour window

The valuation model was rebuilt on the new history within a quarter. The lender's risk team asked for the coverage measurement in writing, which is not a question anybody had thought to ask the previous supplier.

Start here

Have a source of your own? Two lines are enough.

Send the source, the fields you need and roughly how often. You get a straight answer within 24 hours: whether it can be done, what makes it hard, what coverage is achievable and roughly what it costs to build and to run. Whatever the size.

Direct

NDA before technical detail, as always. If it isn't our kind of work, we say so in the first reply.