Rightmove Property Scraper — UK Sale & Rent Listings avatar

Rightmove Property Scraper — UK Sale & Rent Listings

Pricing

from $1.05 / 1,000 result items

Go to Apify Store
Rightmove Property Scraper — UK Sale & Rent Listings

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

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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.

Need it tailored to your workflow? Missing a field, a filter, another source or a different output format? Open an issue and describe what you need — we read every request and adapt the actor.

Use cases

  • New-listing alerts — sortType: 6 + sinceHours: 2 every couple of hours → only what appeared since the last run, with agent phone numbers.
  • Price-reduction tracking — sinceField: "updated" catches reductions and re-listings; compare price across runs by id.
  • Buy-to-let yield screening — run the same postcode on buy and rent, join on bedrooms/type, divide pricePcm × 12 by sale price.
  • Comparable evidence for valuations — includeSSTC: true + detail: true gives sold-subject-to-contract comps with size, pricePerSqFt, tenure and lease years.
  • Agent / developer market share — count listings per agent (or agentCompany) in an area, spot new branches and developments (agentIsDeveloper).
  • Commercial-property sourcing — commercial-buy / commercial-rent with businessForSale, use classes and sizes.

Input

FieldTypeDefaultNotes
locationstring— (prefill "London")Required unless locationIdentifier or searchUrl is given (the run stops with a clear message otherwise). Free text as typed on the site: town ("St. Albans"), area, "city, district" ("Clapham, London"), outcode ("M3"), full postcode, station ("Leeds station"), or a pasted Rightmove search URL. Resolved through Rightmove's own location search — see How location is read below.
locationIdentifierstring—Exact identifier, e.g. REGION^904, OUTCODE^2506, POSTCODE^123456, STATION^5462. Overrides location. Copy from a site URL or from mode: "locations".
searchUrlstring—A results page copied from rightmove.co.uk (…/property-for-sale/find.html?locationIdentifier=REGION%5E904&minBedrooms=2…). Its location, channel and filters are searched; the fields of this form add the filters the URL does not set. Overrides location and locationIdentifier. A property page or another site is refused.
locationTypeenum—REGION | OUTCODE | POSTCODE | STATION | STREET — preferred match type when the text is ambiguous.
modeenumsearchsearch or locations (returns the typeahead candidates for location without searching).
channelenumbuybuy · rent · new-homes · commercial-buy · commercial-rent
minPrice, maxPriceinteger—£ sale price; £ per calendar month for rentals.
minBedrooms, maxBedroomsinteger 0–10—0 = studio. Ignored on commercial channels.
radiusenum"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.
propertyTypesenum[]—detached semi-detached terraced flat bungalow land park-home private-halls
mustHaveenum[]—garden parking newHome retirement sharedOwnership auction
dontShowenum[]—newHome retirement sharedOwnership auction houseShare (houseShare rentals only)
maxDaysSinceAddedenum—1 3 7 14 — server-side; finer cut-offs via sinceHours.
furnishTypesenum[]—Rentals: furnished partFurnished unfurnished
letTypeenum—Rentals: longTerm shortTerm student
includeSSTCbooleanfalseSales: include sold-subject-to-contract / under-offer listings.
includeLetAgreedbooleanfalseRentals: include let-agreed listings.
keywordsstring[]—Must-appear words, e.g. ["garage","annexe"]; the site reports keywordMatchType.
sortTypeenum"6"6 newest listed · 10 oldest · 1 lowest price · 2 highest price
sinceHoursinteger—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.
sinceFieldenumaddedadded (new listings) or updated (also price reductions / re-listings).
detailbooleanfalseOpen 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.
maxItemsinteger 1–100040Stop after N properties. Mode locations returns every match (at most 10).
maxPagesinteger 1–4242Result pages (24 listings plus the page's featured property each). Rightmove serves at most ~1,000 results per search.
fieldsstring[]—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)

PlacelocationIdentifier
LondonREGION^87490
ManchesterREGION^904
BirminghamREGION^162
LeedsREGION^787
GlasgowREGION^550
EdinburghREGION^475
LiverpoolREGION^813
BristolREGION^219
SheffieldREGION^1195
NottinghamREGION^1019
CardiffREGION^281
BelfastREGION^133
OxfordREGION^1036
CambridgeREGION^274
BrightonREGION^93554
LeicesterREGION^789
ReadingREGION^1114
SouthamptonREGION^1231
Milton KeynesREGION^940
Outcode SW1AOUTCODE^2506
Leeds StationSTATION^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.

How location is read

  • Punctuation does not matter: St. Albans, King's Lynn, Stoke-on-Trent, Brighton & Hove, extra spaces or capitals are looked up as words (Rightmove's location search itself refuses punctuation).
  • One town of that name: a name that is one of Rightmove's main towns is that town — Leeds is Leeds, West Yorkshire (not Leeds, Maidstone, Kent or Leeds Station), Sheffield is not Sheffield, Penzance.
  • Several towns of that name: Newcastle (Upon Tyne, Under Lyme, County Down), Newport, Richmond stop the run before anything is searched, naming each candidate with its locationIdentifier — type the full name (Newcastle Upon Tyne, Richmond, North Yorkshire) or pass the identifier.
  • City and district: Clapham, London, London, Clapham or Gosforth / Newcastle upon Tyne — the place whose name contains every part is searched; if none does, the run stops with the closest matches.
  • Anything else (areas, outcodes, postcodes, stations, small places): Rightmove's first match that is not a street, as on the site. When other places share the name, the status names them.
  • A pasted search URL (in location or searchUrl): its locationIdentifier, channel and filters are used.
  • Text Rightmove does not know stops the run with "did you mean …", saving nothing.

How the location was read is in the run's status and in SUMMARY.locationReadAs. The first results page is also checked: if Rightmove searched another place than the one sent (or none), the run stops before saving or charging anything.

Channels

channelSite sectionRental-only options apply
buyproperty-for-saleno
rentproperty-to-rentyes (furnishTypes, letType, includeLetAgreed, dontShow: houseShare)
new-homesnew-homes-for-saleno
commercial-buycommercial-property-for-saleno (bedrooms / residential types ignored)
commercial-rentcommercial-property-to-letyes

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"
}
FieldMeaning
id, urlRightmove property id and page
price, currency, frequency, priceDisplay, priceQualifierAmount as listed; rentals may be weekly — see pricePcm / pricePw (normalised monthly and weekly rent)
bedrooms, bathrooms, propertySubType, propertyTypeFullDescription, tenureBasics
latitude, longitude, distanceMilesLocation; distance only with a radius search
displaySize, sizeSqFt, pricePerSqFtSize when the agent supplied it; computed £/sq ft
firstVisibleDate, listingUpdateReason, listingUpdateDate, addedOrReducedExact listing timeline (new, price_reduced, …), timestamps in real UTC
letAvailableDateRentals: the day the property is available, YYYY-MM-DD (or Rightmove's text, e.g. Now)
agent, agentBranchId, agentPhone, agentIsDeveloperListing agent / developer
premiumListing, featured, enhancedListing, auction, development, students, onlineViewingsAvailable, displayStatusFlags (displayStatus e.g. "Sold STC", "Let agreed")
image, images, imagesCount, floorplansCount, virtualToursCountMedia
keywordMatchType, locationIdentifier, locationName, searchUrl, fetchedAtProvenance
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[], detailErrorFrom 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 ApifyClient
client = 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 / listingUpdateDate on every list item, so sinceHours monitoring 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). letAvailableDate is a calendar day and is returned as a plain date.
  • Rentals — price is the amount as listed (may be weekly); use pricePcm / pricePw. minPrice/maxPrice are 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 sets detailError on its own row.
  • Newer property pages — listings with 15-digit ids (most commercial listings, a few residential ones) use a newer page layout. detail: true reads 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 stay null / [] on such rows. A page in a layout the actor cannot read keeps the list fields with detailError and does not stop the other property pages.
  • Ambiguous places — "Newcastle" names several towns: the run stops and lists them with their identifiers (see How location is read); type the full name, pass locationIdentifier, or check mode: locations. Streets are only chosen when locationType: STREET or no area matches (Rightmove's search pages do not accept a street identifier, so such a run stops with a clear message).
  • 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