Rightmove Properties Scraper
Pricing
from $1.26 / 1,000 results
Rightmove Properties Scraper
UK properties for sale and to rent from Rightmove: address, price, bedrooms, tenure, geo coordinates, selling agent, images and listing dates. Search by place name - locations are resolved for you.
Pricing
from $1.26 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
UK properties for sale and to rent from Rightmove — address, price, bedrooms, bathrooms, tenure, latitude/longitude, the selling agent, images and listing dates.
Search by plain place name; locations are resolved for you. HTTP only, no browser, no login.
Input
{"channel": "buy","locations": ["London", "Bath"],"minPrice": 300000,"maxPrice": 750000,"minBedrooms": 2,"maxPages": 5}
locations also accepts a Rightmove identifier (REGION^87490) or a full
Rightmove search URL, so you can paste whatever you already have.
What you get
recordType | One per | Carries |
|---|---|---|
SEARCH_SUMMARY | location | resolved identifier and display name, other matches for an ambiguous name, upstream match count, the reachable ceiling, pages fetched, duplicates dropped, how many rows were featured |
PROPERTY | listing | id, URL, address, price, bedrooms/bathrooms, tenure, geo coordinates, agent, images, listing dates — plus the raw upstream object |
ERROR | failed input | why |
{"recordType": "PROPERTY","propertyId": 148711631,"propertyUrl": "https://www.rightmove.co.uk/properties/148711631","displayAddress": "One Hyde Park, Knightsbridge, London, SW1X","propertySubType": "Apartment","bedrooms": 5, "bathrooms": 5,"price": 60000000, "priceDisplay": "£60,000,000", "currency": "GBP","latitude": 51.501871, "longitude": -0.161945,"tenure": "LEASEHOLD","agentName": "Global 1, London","isFeatured": false}
Known limits — read these before you rely on the output
Rightmove reports far more matches than you can actually retrieve. A
London sale search reports 59,420 matches, but paging is capped at
roughly 1,025 properties — index 1000 returns rows, index 1025 returns
none. The count is not a lie about the market; it is a lie about what is
reachable. Both numbers are on every summary (upstreamResultCount and
reachableCeiling), and the run logs a warning when they diverge.
To get past the ceiling, narrow the search rather than paging deeper — price bands, bedroom counts, or smaller locations (borough instead of "London"). Several narrow searches beat one wide one.
Featured listings are placed first regardless of sort. Between 2 and 9 of
every 25 rows are promoted, so the top of a price-sorted page is routinely
out of order. Every row carries isFeatured, and the summary reports
featuredRowsReturned, so you can drop them before sorting yourself.
Sale and rent prices are not the same kind of number. Rent rows carry
priceFrequency: "monthly" and an allDisplayPrices list holding both
"£5,000 pcm" and "£1,154 pw". Comparing a rent price to a sale price
without reading the frequency compares one month's rent to a purchase price.
A price of £1 is a real listing, not a parsing bug. Auction and guide-price
listings carry a nominal amount with a priceQualifier such as "Guide Price".
They are flagged with isNominalPrice rather than being dropped or nulled.
Separately, some listings display "POA" while still carrying a real
price — the amount is present even though the site hides it.
Ambiguous place names pick the top match. "London" resolves to
REGION^87490, but Rightmove also offers Wimbledon, Central London and South
London for that query. The runners-up are reported in the summary as
locationAlternatives, so you can tell when you got a different Richmond
than you meant. Pass an identifier directly to be certain.
Bad filter values return an empty page, not an error — so this actor refuses unknown sorts, property types, channels and radii up front. Without that, a typo would look like "nothing matched" rather than "you sent a bad filter".
Rightmove's own property categories are loose. A bungalow search returns
some rows sub-typed Land or Detached. That is upstream's classification,
passed through unchanged.
Technical
Server-rendered Next.js; the whole page of results is strict JSON inside
<script id="__NEXT_DATA__"> at props.pageProps.searchResults — no HTML
parsing at all. 25 properties per page, paged with &index= in steps of 24.
The TLS fingerprint pool is an allowlist, not a preference. On the same
URL, chrome124, chrome120, safari17_0, safari15_5 and edge101 all
return 200, while chrome131 and firefox133 are refused with an empty-body
403. Only verified-passing profiles are used, so a retry can never rotate
into a guaranteed block.
robots.txt was checked at path level on both hosts used — the search
path and the location typeahead.
Full recon trail is in CRAWLING_METHOD.md.