Rightmove UK Scraper - Properties, Prices, Sales & Rentals avatar

Rightmove UK Scraper - Properties, Prices, Sales & Rentals

Pricing

from $1.00 / 1,000 property records

Go to Apify Store
Rightmove UK Scraper - Properties, Prices, Sales & Rentals

Rightmove UK Scraper - Properties, Prices, Sales & Rentals

Fast, reliable Rightmove.co.uk scraper for UK properties for sale, rent and sold-price records. Search by location or property URL and extract 80+ structured fields per listing. Ideal for property research, price comparisons, rental analysis and real estate market intelligence.

Pricing

from $1.00 / 1,000 property records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

19 hours ago

Last modified

Share

Rightmove Scraper: UK Property Listings, Rentals and Sold Prices

Rightmove Scraper turns Rightmove into a clean UK property data feed. Get properties for sale, to rent, and historical sold-price records for any location, postcode or Rightmove link, with over 80 structured fields per property when full detail is enabled: price, full address and postcode, agent contacts, council tax band, ground rent, service charge, EPC graphs, nearest stations and airports, floorplans and more. Search by location plus filters, or paste any Rightmove URL, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • Five channels, one actor. For-sale (BUY), to-rent (RENT), sold-price history (SOLD), new homes (new) and student lettings (student) all come from the same input. Rival-style names such as sale, rent and new_homes are accepted too.
  • Two ways to find data. Build a search from a location plus filters, or paste any Rightmove URL: a search page, a single property page, or a sold-price area page.
  • 80+ fields on demand. Turn on full detail scraping for the complete description, key features, council tax band, ground rent, service charge, EPC graphs, nearest stations and airports, broadband speed, floorplans, remaining lease years, and full agent contact details.
  • Server-side filters that really narrow the result set. Price, bedrooms, property type, radius, sort order, furnished status, added-within-days, and the Let Agreed / Sold STC toggles are applied on Rightmove's own servers, not filtered away client-side.
  • Incremental and monitoring modes for recurring runs. Schedule it and get only new listings, or rows labelled NEW, UPDATED, REAPPEARED or EXPIRED; unchanged listings are not returned or billed.
  • Runs on your proxy settings. Datacenter is the default and cheapest option; the actor never switches to residential on its own, and it automatically retries with a different connection when one is refused.
  • Pay only for what you fetch. Every returned record is billed once, and the deep detail fields are billed only for the records that were actually enriched.

Use Cases

  • Property market research: track asking prices, price reductions and new listings across an area or postcode over time.
  • Lead generation for agents and services: collect agent names, companies and phone numbers from active listings for outreach.
  • Sold-price and comparable analysis: pull historical sold prices by postcode or area to value a property or a portfolio.
  • Relocation and house-hunting tools: feed for-sale and to-rent listings, with full detail, into your own search app or alert bot.
  • Portfolio and rent-roll monitoring: run monitoring mode on a schedule to catch newly listed properties as soon as they appear.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id158234567
channel"BUY" (also "RENT", "SOLD")
url"https://www.rightmove.co.uk/properties/158234567"
transactionType"SALE"
displayPrice"£325,000"
price325000
pricePerMonth / pricePerWeekrent listings only: 1500 / 346
currency"GBP"
bedrooms / bathrooms1 / 1
propertySubType"Flat"
displayAddress"Example Road, London, SW1A"
postcode"SW1A 1AA" (detail only)
latitude / longitude51.5 / -0.12
descriptiondetail only: the full listing description
keyFeaturesdetail only: array of bullet-point features
sizeSqFtdetail only: 381
tenureTypedetail only: "SHARE_OF_FREEHOLD"
councilTaxBand / annualGroundRent / annualServiceChargedetail only: "C" / 250 / 1071
nearestStationsdetail only: array of { name, distance, unit }
epcGraphs / floorplansdetail only: arrays of image URLs
imagesarray of photo URLs
agentName / agentPhone"Example Estate Agents, London" / "020 0000 0000"
detailScrapedtrue once the detail page has been fetched for this record
beds / baths / title / addedOn / furnishedType / ownershipadditive aliases of existing fields (addedOn is the date first listed, firstVisibleDate; empty when Rightmove gives none)
agentBrandName / agentCompanyType / country / countryCode / domesticRatesagent brand trading name / "agent" or "developer" / "United Kingdom" / "GB" / domestic rates figure (detail only, Northern Ireland listings)

Sold-price records (channel: "SOLD") carry a different shape: uuid, encryptedUprn, address, propertyType, bedrooms, bathrooms, hasFloorPlan, lastSoldPrice, lastSoldDate, transactionCount, a transactions array with every recorded sale (price, date, tenure, new-build flag), detailUrl and staticMapUrls, instead of the for-sale/to-rent fields above. Detail-enriched for-sale and to-rent records also carry secondaryPrice, pricePerSqFt, outcode/incode/ukCountry, sizeSqM, yearsRemainingOnLease, groundRentReviewPeriodInYears, nearestAirports, broadband, brochures, virtualTours, rooms, rental-only lettings terms (deposit, furnishType, letType, letAvailableDate), scheme flags (sharedOwnership, affordableBuyingScheme, commercial), full agent details (agentCompanyName, agentDisplayAddress, agentLogo, agentPhoneInternational), and verbatim rawCustomer / rawLivingCosts passthrough objects so nothing from the source page is lost.

How to Use

  1. Pick a mode: search (location plus filters) or url (paste direct Rightmove links).
  2. For search mode, choose a channel (BUY, RENT, SOLD, new or student) and one or more locations, then narrow with the price, bedroom, property type, radius, furnished, added-within and sort filters (sort by newest, oldest, lowest or highest price).
  3. Turn on Scrape full property details for the deep 80+ field set, and set Max items and Max pages per search to control run size and cost.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Buy search with filters and full detail:

{
"mode": "search",
"channel": "BUY",
"locations": ["London", "Manchester"],
"minPrice": 200000,
"maxPrice": 500000,
"minBedrooms": 2,
"maxPages": 3,
"includeDetails": true,
"maxItems": 300
}

Rent search:

{
"mode": "search",
"channel": "RENT",
"locations": ["Leeds"],
"maxPrice": 1500,
"minBedrooms": 1,
"maxPages": 2
}

Sold prices for an area:

{
"mode": "search",
"channel": "SOLD",
"locations": ["SW19"],
"maxItems": 200
}

Direct URLs (a search page and a single property):

{
"mode": "url",
"startUrls": [
{ "url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490" },
{ "url": "https://www.rightmove.co.uk/properties/158234567" }
],
"includeDetails": true
}

Supported URL shapes. The Start URLs field now has a non-empty default: one example of each supported shape below (the commercial row is not supported): a search per channel, a paginated and a filtered search, property pages, a location page, new homes and sold prices. In URL mode, if you leave it untouched the actor scrapes all of those examples, so replace it with your own links before running. Search mode ignores it.

ShapeExample pathResult
Buy search (region id)/property-for-sale/find.html?locationIdentifier=REGION%5E87490Listings, channel BUY
Rent search (region id)/property-to-rent/find.html?locationIdentifier=REGION%5E87490Listings, channel RENT
Paginated search...find.html?locationIdentifier=REGION%5E87490&index=24Starts from that result offset
Filtered / sorted search...&minPrice=300000&maxPrice=500000&minBedrooms=2&sortType=6&propertyTypes=flat&includeSSTC=falseRightmove applies the filters in the link
Property page/properties/94114530 (a #... share-link fragment is ignored)One full-detail record
Legacy property page/property-for-sale/property-155320229.html, /property-to-rent/property-108124898.htmlOne full-detail record
Location page/property-for-sale/Wimbledon.html (no location id needed)Listings, channel BUY
New-homes search/new-homes-for-sale/find.html?locationIdentifier=REGION%5E87490Listings, channel new
Sold prices, area/house-prices/london.htmlSold records, channel SOLD
Sold prices, postcode/house-prices/SW19.htmlSold records, channel SOLD
Sold prices, search link/house-prices/detail.html?country=england&locationIdentifier=REGION%5E87490&searchLocation=London (the link Rightmove's own sold-price search produces)Sold records for that area, channel SOLD
Sold property/house-prices/details/<id>One sold-property record with its transaction history, channel SOLD, same field shape as the area listing; the single-property page does not carry encryptedUprn, hasFloorPlan or staticMapUrls, so those stay empty there
Commercial search/commercial-property-for-sale/find.html?...Not supported: skipped with a warning in the log

Other unrecognised links are also skipped with a warning rather than failing the run. A link that loads but yields no records (an unknown area, a removed property, an empty search) logs a warning naming the link instead of finishing silently.

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/rightmove-scraper").call(run_input={"mode": "search", "channel": "BUY", "locations": ["London"], "maxItems": 200})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["displayAddress"], item["displayPrice"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/rightmove-scraper').call({ mode: 'search', channel: 'BUY', locations: ['London'], maxItems: 200 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Max pages per search defaults to 1, which is a single results page, 24 listings, per location, for BUY and RENT searches (including a pasted search-results URL). Raise it (up to 42, Rightmove's own pagination limit) to walk further into the result list. It has no effect on SOLD mode, which walks up to its own internal page limit and is bounded only by Max items. Max items caps the total records returned across every location, but each individual BUY/RENT location is still capped by Rightmove's own deep-pagination limit of roughly 1000 results. To cover a large area beyond that, split it into smaller sub-areas or postcodes and run them as separate locations.

Incremental mode

Turn on Incremental mode for scheduled runs of the same search. The actor remembers what each earlier run returned (per search, including whether details were requested) and labels every returned row with changeType: NEW, UPDATED (with changedFields listing what moved), REAPPEARED (back after being gone) or EXPIRED (no longer in the results). Unchanged listings are not returned, so they are not billed (for sold-price rows the per-response encryptedUprn token is kept in the output but never counts as a change), and detail enrichment is only fetched and charged for rows that are returned.

  • EXPIRED rows appear only after a run that walked the whole result set. A run cut short by Max items, Max pages, the deep-pagination limit or a failed page, a pasted link that starts beyond page 1, or a single property link never marks anything expired.
  • The relative "Added today / yesterday" badge, the distance from the search centre and the scrape time never count as a change; they stay in the output. Add more fields (nested paths such as agent.logo work) with Ignore fields when detecting changes.
  • A change in the listing update reason or date (for example a price reduction) does count as a change.
  • If both Monitoring mode and Incremental mode are on, Incremental mode applies.
  • EXPIRED rows count towards Max items and are billed as ordinary result rows.

Monitoring mode

When Monitoring mode is on, the actor remembers every listing id (or sold-record key) it has already returned for that exact combination of mode, channel, locations or URLs, and filters. The next run of the same search then returns only records it has not returned before, which is ideal for a scheduled search that should surface only new listings. Changing any filter or location starts a fresh, independent history. A pasted individual property link is never filtered by this history (it is still skipped, and not charged, when its listing was already collected by the run named in Resume from a previous run) and is re-fetched (and re-billed for detail) on every monitored run.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (location plus filters) or url (direct Rightmove links).
channelstringBUYBUY, RENT, SOLD, new (new homes) or student (search mode only). Aliases sale, rent, new_homes are accepted.
locationsarrayno default (prefill: ["London"])Location names, areas, or postcodes to resolve (search mode), e.g. "London", "SW19".
minPriceintegerno defaultMinimum price filter (BUY/RENT). For RENT this is the monthly (pcm) amount.
maxPriceintegerno defaultMaximum price filter (BUY/RENT). For RENT this is the monthly (pcm) amount.
minBedroomsintegerno defaultMinimum bedrooms (BUY/RENT).
maxBedroomsintegerno defaultMaximum bedrooms (BUY/RENT).
propertyTypesarrayno defaultProperty type filter (BUY/RENT): houses, flats, bungalows, land, detached, semi-detached, terraced, park-home (houses expands to detached, semi-detached and terraced).
radiusstringno defaultSearch radius in miles around the location, e.g. 0.5, 1, 5. Leave empty to search the exact area only.
sortTypestring"" (most relevant)Result ordering: newest listed, oldest listed, lowest price, or highest price first.
sortstring""Alias of sortType: newest, oldest, highest, lowest. sortType wins when both are set.
furnishedstring""furnished, part_furnished or unfurnished (rent and student).
maxDaysSinceAddedstring""Only listings added within 1, 3, 7 or 14 days.
searchstringno defaultAlias of locations (a single location).
endPageintegerno defaultAlias of maxPages.
includeLetAgreedbooleanfalseInclude "Let Agreed" properties in rental searches.
includeSSTCbooleanfalseInclude "Sold STC" / under-offer properties in sale searches.
startUrlsarrayone example of each URL shapeDirect Rightmove URLs to scrape (URL mode): search pages, location pages, new-homes pages, property pages, or sold-price pages. Left untouched, URL mode scrapes the examples.
maxItemsinteger100000Maximum number of records to return; set 0 for unlimited. Each location is still capped by Rightmove's own roughly-1000-result deep-pagination limit.
maxPagesinteger1Maximum result pages to walk per location for BUY/RENT searches (24 listings per page); raise it to scrape deeper (up to 42). Has no effect on SOLD mode.
includeDetailsbooleanfalseFetch each property's detail page for 40+ extra fields; billed per record enriched.
monitoringModebooleanfalseReturn only listings not returned by a previous run of this exact search.
resumeFromRunIdstring-Run ID or dataset ID of an earlier run: listings already collected there are skipped and not charged again. A resumed run never marks listings EXPIRED.
incrementalModebooleanfalseLabel rows NEW / UPDATED / REAPPEARED / EXPIRED against earlier runs of this exact search; unchanged rows are not returned.
ignoreFieldsForChangesarray[]Extra output fields that must not count as a change (incremental mode only).
proxyConfigurationobject{"useApifyProxy": true}Connection settings; residential is never auto-enabled.
proxyCountrystringno defaultPin the proxy exit country; applied only when a proxy group such as residential is selected.
mcpConnectorsarrayno defaultOptional: send a summary of each record to apps authorized under Integrations.
notionParentPageUrlstringno defaultNotion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"id": 158234567,
"channel": "BUY",
"url": "https://www.rightmove.co.uk/properties/158234567",
"transactionType": "SALE",
"displayPrice": "£325,000",
"price": 325000,
"currency": "GBP",
"bedrooms": 1,
"bathrooms": 1,
"propertySubType": "Flat",
"displayAddress": "Example Road, London, SW1A",
"outcode": "SW1A",
"incode": "1AA",
"postcode": "SW1A 1AA",
"latitude": 51.5,
"longitude": -0.12,
"description": "<p>Offering approximately 381 sq.ft of well-presented accommodation ...</p>",
"keyFeatures": ["Share of Freehold", "Modern One Bedroom Apartment"],
"sizeSqFt": 381,
"tenureType": "SHARE_OF_FREEHOLD",
"yearsRemainingOnLease": 118,
"councilTaxBand": "C",
"annualGroundRent": 250,
"annualServiceCharge": 1071,
"nearestStations": [{ "name": "Example Station", "distance": 0.11, "unit": "miles" }],
"epcGraphs": ["https://media.rightmove.co.uk/property-epc/example.png"],
"floorplans": ["https://media.rightmove.co.uk/property-floorplan/example.png"],
"images": ["https://media.rightmove.co.uk/example.jpeg"],
"agentName": "Example Estate Agents, London",
"agentCompanyName": "Example Estate Agents Ltd",
"agentDisplayAddress": "1 Example Street, London, EC1A 1BB",
"agentPhone": "020 0000 0000",
"detailScraped": true
}

Plan Requirement

The default datacenter proxy works: in our checks datacenter connections returned real listing content for every supported page shape, so no residential proxy is required. The actor retries with a different connection when one is refused or fails to connect, and gives up on a single property after 25 seconds rather than stalling the run. For larger or more frequent runs, select the residential proxy group under Connection for extra resilience. The actor's Pricing tab shows the current rates.

Billing

  • apify-actor-start: charged once per run.
  • apify-default-dataset-item: charged once for every row written to the dataset (including EXPIRED rows in incremental mode).
  • detail-enrichment: charged once for every row that was pushed with full detail (detailScraped: true), for search results with Scrape full property details on and for every pasted property link. Rows that are not returned (unchanged in incremental mode, already seen in monitoring mode, or failed) are never charged.

FAQ

How much does it cost?

You pay per property record returned, plus an extra charge only for the records where full detail was fetched. The Pricing tab on the actor page shows the current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available property listing and sold-price data. You are responsible for how you use it: follow Rightmove's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Agent contact details and listing photos may be subject to third-party rights.

Can I get only new listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode (labels every change) or Monitoring mode (new listings only). Each run then remembers every property it has already returned for that exact search, and only returns ones it hasn't seen before.

Why did my search only return 24 properties?

For BUY and RENT searches, Max pages per search defaults to 1, a single results page of 24 listings, per location. Raise it (up to 42) to walk further into the result list, and set Max items to fit the total you want. This limit does not apply to SOLD mode, which is bounded only by Max items.

Why did my run return zero properties instead of an error?

If a location cannot be resolved, or the site refuses every request for that search, the run finishes normally with an empty dataset and a short explanation in its run summary, rather than throwing an error. Check the run's summary output (requests, blocks, pages fetched) to tell "no matches for this filter" apart from "the site blocked every request", and try again if requests were blocked.

Yes. A direct property URL in URL mode always returns the deep field set, and is billed as detail enrichment, regardless of the Scrape full property details toggle, since there is nothing to enrich beyond the page itself. That toggle applies to search results, whether from a location or a pasted search URL; it has no effect on SOLD mode.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

🔗 Want more real estate data?

Pair this actor with these related scrapers from the same team:

🧩 Zoopla Scraper
Scrape UK property from Zoopla: for sale, to rent and Land Registry sold prices. Search...
🏠 Jitty Scraper
Scrape residential property listings from Jitty.com across the UK. Search with 20+...
🏠 OnTheMarket Scraper
Scrape onthemarket.com for-sale, to-rent and new-homes listings with 85+ fields: price...
🏠 591.com.tw Scraper
Extract property listings from 591房屋交易網 591.com.tw, Taiwan’s largest real estate...
💼 NHS UK
Scrape nhs.uk Jobs listings into a flat dataset. Extract 50+ fields, including pay band...
💼 Reed.co.uk Scraper
Scrape Reed.co.uk jobs, companies, courses and reviews by keyword, location, filters or...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.