Rightmove Property Scraper — UK Sale & Rent Listings
Pricing
from $1.05 / 1,000 result items
Rightmove Property Scraper — UK Sale & Rent Listings
Rightmove property listings for AI agents and analysts: any UK location (town, outcode, postcode, station), for sale / to rent / new homes / commercial, with all site filters, exact listing timestamps, price per sq ft, agent & phone, optional full property pages. Location lookup built in.
Pricing
from $1.05 / 1,000 result items
Rating
0.0
(0)
Developer
Samat Makatov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Search rightmove.co.uk — the UK's largest property portal — the way its own search does: any town, area, outcode, postcode or station; for sale, to rent, new homes or commercial; every filter the site offers (price, bedrooms, type, radius, must-haves, added-since, SSTC/let-agreed). Each property comes back as clean JSON with exact listing timestamps, coordinates, size and price per sq ft, agent and phone; detail: true adds the full description, key features, tenure & lease years, council tax band, service charge, deposit, nearest stations and floorplans. Built for analysts and AI agents: no browser, no proxies, no API key.
Use cases
- New-listing alerts —
sortType: 6+sinceHours: 2every couple of hours → only what appeared since the last run, with agent phone numbers. - Price-reduction tracking —
sinceField: "updated"catches reductions and re-listings; comparepriceacross runs byid. - Buy-to-let yield screening — run the same postcode on
buyandrent, join on bedrooms/type, dividepricePcm × 12by saleprice. - Comparable evidence for valuations —
includeSSTC: true+detail: truegives sold-subject-to-contract comps with size,pricePerSqFt, tenure and lease years. - Agent / developer market share — count listings per
agent(oragentCompany) in an area, spot new branches and developments (agentIsDeveloper). - Commercial-property sourcing —
commercial-buy/commercial-rentwithbusinessForSale, use classes and sizes.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
location | string | — (prefill "London") | Required unless locationIdentifier is given (the run stops with a clear message otherwise). Free text as typed on the site: town, area, outcode ("M3"), full postcode, station ("Leeds station"). Resolved through Rightmove's own typeahead; the first non-street match wins. |
locationIdentifier | string | — | Exact identifier, e.g. REGION^904, OUTCODE^2506, POSTCODE^123456, STATION^5462, STREET^<token>. Overrides location. Copy from a site URL or from mode: "locations". |
locationType | enum | — | REGION | OUTCODE | POSTCODE | STATION | STREET — preferred match type when the text is ambiguous. |
mode | enum | search | search or locations (returns the typeahead candidates for location without searching). |
channel | enum | buy | buy · rent · new-homes · commercial-buy · commercial-rent |
minPrice, maxPrice | integer | — | £ sale price; £ per calendar month for rentals. |
minBedrooms, maxBedrooms | integer 0–10 | — | 0 = studio. Ignored on commercial channels. |
radius | enum | "0.0" | Miles: 0.0 0.25 0.5 1.0 3.0 5.0 10.0 15.0 20.0 30.0 40.0 — the only values the site accepts; Apify refuses any other value before the run starts. |
propertyTypes | enum[] | — | detached semi-detached terraced flat bungalow land park-home private-halls |
mustHave | enum[] | — | garden parking newHome retirement sharedOwnership auction |
dontShow | enum[] | — | newHome retirement sharedOwnership auction houseShare (houseShare rentals only) |
maxDaysSinceAdded | enum | — | 1 3 7 14 — server-side; finer cut-offs via sinceHours. |
furnishTypes | enum[] | — | Rentals: furnished partFurnished unfurnished |
letType | enum | — | Rentals: longTerm shortTerm student |
includeSSTC | boolean | false | Sales: include sold-subject-to-contract / under-offer listings. |
includeLetAgreed | boolean | false | Rentals: include let-agreed listings. |
keywords | string[] | — | Must-appear words, e.g. ["garage","annexe"]; the site reports keywordMatchType. |
sortType | enum | "6" | 6 newest listed · 10 oldest · 1 lowest price · 2 highest price |
sinceHours | integer | — | Keep only listings whose firstVisibleDate (or listingUpdateDate, see sinceField) is younger than N hours. Exact timestamps come with the list — no detail needed. With sortType 6 the run stops early. |
sinceField | enum | added | added (new listings) or updated (also price reductions / re-listings). |
detail | boolean | false | Open every property page (0.7 s apart, about 50 properties a minute) for description, key features, sizes, tenure, costs, stations, floorplans, brochures, EPC. A page that cannot be read leaves detailError on its row; see Blocking below for when property pages stop. |
maxItems | integer 1–1000 | 40 | Stop after N properties. Mode locations returns every match (at most 10). |
maxPages | integer 1–42 | 42 | Result pages (24 listings plus the page's featured property each). Rightmove serves at most ~1,000 results per search. |
fields | string[] | — | Keep only these top-level fields per item, in this order. Every row keeps id (mode locations: locationIdentifier), and with detail: true also detailError when a property page was not read; they come first unless you list them. Another letter case or a near miss ("bedroms") is read as the output field and noted in the status; detail-only fields without detail: true and unknown names are ignored with a note; if no name is an output field the run fails and lists the valid names. |
Reference
Location identifiers (sample — any place works via location)
| Place | locationIdentifier |
|---|---|
| London | REGION^87490 |
| Manchester | REGION^904 |
| Birmingham | REGION^162 |
| Leeds | REGION^787 |
| Glasgow | REGION^550 |
| Edinburgh | REGION^475 |
| Liverpool | REGION^813 |
| Bristol | REGION^219 |
| Sheffield | REGION^1195 |
| Nottingham | REGION^1019 |
| Cardiff | REGION^281 |
| Belfast | REGION^133 |
| Oxford | REGION^1036 |
| Cambridge | REGION^274 |
| Brighton | REGION^93554 |
| Leicester | REGION^789 |
| Reading | REGION^1114 |
| Southampton | REGION^1231 |
| Milton Keynes | REGION^940 |
| Outcode SW1A | OUTCODE^2506 |
| Leeds Station | STATION^5462 |
Identifier types: REGION (towns, boroughs, counties, London areas), OUTCODE (first half of a postcode), POSTCODE (full postcode), STATION, STREET. Run mode: "locations" with any text to list the candidates with their identifiers.
Channels
channel | Site section | Rental-only options apply |
|---|---|---|
buy | property-for-sale | no |
rent | property-to-rent | yes (furnishTypes, letType, includeLetAgreed, dontShow: houseShare) |
new-homes | new-homes-for-sale | no |
commercial-buy | commercial-property-for-sale | no (bedrooms / residential types ignored) |
commercial-rent | commercial-property-to-let | yes |
Sort, radius, added-since
sortType: 6 newest · 10 oldest · 1 price ↑ · 2 price ↓. radius miles: 0.0, 0.25, 0.5, 1.0, 3.0, 5.0, 10.0, 15.0, 20.0, 30.0, 40.0. maxDaysSinceAdded: 1, 3, 7, 14. These are select fields: Apify refuses any other value (another spelling or case included) before the run starts.
Examples
New flats in Manchester since the last run (alerting)
{ "location": "Manchester", "channel": "buy", "propertyTypes": ["flat"], "sortType": "6", "sinceHours": 6, "maxItems": 200 }
Furnished 2-bed rentals within a mile of SW1A, full details
{ "location": "SW1A", "locationType": "OUTCODE", "channel": "rent", "minBedrooms": 2, "maxPrice": 4000, "furnishTypes": ["furnished"], "radius": "1.0", "detail": true, "maxItems": 50 }
Sold-STC comparables with size and lease for a valuation
{ "locationIdentifier": "OUTCODE^2506", "channel": "buy", "includeSSTC": true, "propertyTypes": ["flat"], "detail": true, "fields": ["id","displayAddress","price","bedrooms","sizeSqFt","pricePerSqFt","tenure","yearsRemainingOnLease","annualServiceCharge","listingUpdateReason","url"], "maxItems": 100 }
Price reductions in Leeds this week
{ "location": "Leeds", "channel": "buy", "sinceField": "updated", "sinceHours": 168, "maxPrice": 300000, "maxItems": 300 }
Which identifiers does "Newcastle" resolve to?
{ "mode": "locations", "location": "Newcastle" }
Output
{"id": 92854638,"url": "https://www.rightmove.co.uk/properties/92854638","displayAddress": "Belfield Road, Didsbury Village, M20","price": 1500000, "currency": "GBP", "frequency": "not specified","priceDisplay": "£1,500,000", "priceQualifier": null, "pricePcm": null, "pricePw": null,"bedrooms": 6, "bathrooms": 3,"propertySubType": "Detached", "propertyTypeFullDescription": "6 bedroom detached house for sale","tenure": "FREEHOLD", "transactionType": "buy", "channel": "BUY","latitude": 53.419401, "longitude": -2.229238, "distanceMiles": null,"displaySize": "2,806 sq. ft.", "sizeSqFt": 2806, "pricePerSqFt": 535,"addedOrReduced": "Added on 07/09/2026", "firstVisibleDate": "2026-09-07T16:40:18.000Z","listingUpdateReason": "new", "listingUpdateDate": "2026-09-07T16:46:06.000Z","agent": "Philip James Kennedy, Didsbury", "agentBranchId": 7572, "agentPhone": "0161 524 4262", "agentIsDeveloper": false,"premiumListing": true, "featured": true, "auction": false, "development": false,"image": "https://media.rightmove.co.uk/…_max_476x317.jpeg", "images": ["…"], "imagesCount": 29, "floorplansCount": 1,"locationIdentifier": "REGION^904", "locationName": "Manchester, Greater Manchester","searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E904&…","fetchedAt": "2026-09-13T07:55:11.933Z"}
| Field | Meaning |
|---|---|
id, url | Rightmove property id and page |
price, currency, frequency, priceDisplay, priceQualifier | Amount as listed; rentals may be weekly — see pricePcm / pricePw (normalised monthly and weekly rent) |
bedrooms, bathrooms, propertySubType, propertyTypeFullDescription, tenure | Basics |
latitude, longitude, distanceMiles | Location; distance only with a radius search |
displaySize, sizeSqFt, pricePerSqFt | Size when the agent supplied it; computed £/sq ft |
firstVisibleDate, listingUpdateReason, listingUpdateDate, addedOrReduced | Exact listing timeline (new, price_reduced, …), timestamps in real UTC |
letAvailableDate | Rentals: the day the property is available, YYYY-MM-DD (or Rightmove's text, e.g. Now) |
agent, agentBranchId, agentPhone, agentIsDeveloper | Listing agent / developer |
premiumListing, featured, enhancedListing, auction, development, students, onlineViewingsAvailable, displayStatus | Flags (displayStatus e.g. "Sold STC", "Let agreed") |
image, images, imagesCount, floorplansCount, virtualToursCount | Media |
keywordMatchType, locationIdentifier, locationName, searchUrl, fetchedAt | Provenance |
detail only: description, keyFeatures, propertyPhrase, outcode, incode, ukCountry, sizeSqM, pricePerSqM, pricePerSqFtSite, yearsRemainingOnLease, councilTaxBand, annualGroundRent, annualServiceCharge, deposit, letAvailableDate, furnishType, letType, minimumTermInMonths, listingHistory, published, archived, entranceFloor ({alias, displayText}), parking, heating, garden, accessibility, nearestStations[], agentCompany, agentBranchName, agentAddress, agentLogo, brochures[], floorplans[], epcGraphs[], allImages[], sharedOwnership, affordableBuyingScheme, businessForSale, commercialUseClasses[], tags[], detailError | From the property page |
mode: "locations" rows: query, locationIdentifier, type, id, displayName, howToUse, fetchedAt. When nothing matches, the run ends with the status No Rightmove location matches "…" and saves no rows.
Every run also writes a SUMMARY record to its key-value store (linked in the run's Output tab): rows saved, Rightmove's total, pages read, detail counts with the reason property pages stopped, notes on ignored inputs and why the run ended early.
Use it from code / agents
curl -X POST "https://api.apify.com/v2/acts/yadroo~rightmove-uk/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"location":"Bristol","channel":"buy","maxPrice":350000,"minBedrooms":2,"maxItems":50}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('yadroo/rightmove-uk').call({ location: 'Manchester', channel: 'rent', sinceHours: 3, maxItems: 100 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("yadroo/rightmove-uk").call(run_input={"locationIdentifier": "OUTCODE^2506", "channel": "buy", "includeSSTC": True, "detail": True, "maxItems": 60})items = client.dataset(run["defaultDatasetId"]).list_items().items
MCP: add https://mcp.apify.com to your agent (Claude, Cursor, custom) and call the yadroo/rightmove-uk tool with the same JSON input — the input schema descriptions are written for agents.
Pricing
Pay per event: $0.005 per run start + $0.0015 per property. A 100-property search costs about $0.155; detail: true costs the same per item but takes ~0.7 s per property. mode: locations rows are billed as items too (usually < 10). Store discounts: Bronze −10 %, Silver −20 %, Gold and above −30 % on the property price; the start event is the same on every plan; platform usage is included.
Your max cost per run is respected: the run stops before the next property it could not pay for, saves what it has and ends with Stopped at your spending limit: N rows delivered. A run that nears its timeout stops starting new pages, keeps every row already read and ends with Stopped before the run timeout: N rows saved. Rows are saved page by page (every 10 properties with detail: true), and a restarted run never saves or bills a property twice.
Limits & FAQ
- Rate limits — one request per results page (24 listings + 1 featured property) plus one per property page, 0.7–0.8 s apart. Measured in the cloud: about 660 properties a minute from results pages, about 50 a minute with
detail: true(1,000 properties ≈ 20 min). Rightmove caps any search at ~1,000 results (42 pages); split by price band, outcode or type for full coverage — the status says when the cap ended the paging. - Freshness — live search results with exact
firstVisibleDate/listingUpdateDateon every list item, sosinceHoursmonitoring needs no detail pages. - Time zone — Rightmove sends these timestamps as UK wall-clock time with a
Z(UTC) suffix, so in summer (BST) they run one hour ahead of real UTC; its own page timestamp is off the same way. The actor converts them from Europe/London to real UTC (no change in winter, when UK time is UTC).letAvailableDateis a calendar day and is returned as a plain date. - Rentals —
priceis the amount as listed (may be weekly); usepricePcm/pricePw.minPrice/maxPriceare always per month. - Blocking — the search and property pages have been stable without proxies (no block in 1,300 requests, 02.10.2026). If the first results page is refused (403 or a challenge page), the run fails with that message; a later results page that fails ends the paging, keeps the rows saved and says so in the status. On property pages, a 403 or three failed pages in a row stop them for the rest of the run: the rest of the current results page is saved with list data only and
detailError: "skipped: …", no further results pages are read, and the status reports detail k/N and why. A single page that fails (a removed listing included) only setsdetailErroron its own row. - Newer property pages — listings with 15-digit ids (most commercial listings, a few residential ones) use a newer page layout.
detail: truereads it too, but that layout carries no council tax band, ground rent, deposit, furnishing, agent company/address/logo, Rightmove's own price texts, feature lists (parking, heating, garden, accessibility) or tags: those fields staynull/[]on such rows. A page in a layout the actor cannot read keeps the list fields withdetailErrorand does not stop the other property pages. - Ambiguous places — "Newcastle" resolves to several regions; set
locationType, passlocationIdentifier, or checkmode: locations. Streets are only chosen whenlocationType: STREETor no area matches. - Not included — sold-price history, agent e-mail, anything behind login. Only what the public page shows.
- Roadmap — saved-search diffing (only items not seen in a previous run), sold-prices dataset.
Made by Yadroo. Related actors: otodom-pl · willhaben-at · kleinanzeigen-de · marktplaats-nl · krisha-kz · autoscout24-cars