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

3 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.

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 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.
locationIdentifierstring—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".
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.

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" resolves to several regions; set locationType, pass locationIdentifier, or check mode: locations. Streets are only chosen when locationType: STREET or 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