Rightmove Scraper - UK Sale & Rent Property Listings
Pricing
from $2.20 / 1,000 results
Rightmove Scraper - UK Sale & Rent Property Listings
Extract UK residential properties for sale and rent from Rightmove by location or URL. Get prices, bedrooms, photos, tenure and available agency contacts. Pay per delivered listing row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Security
Limited permissionsShare
Rightmove Scraper
Extract UK residential properties for sale and to rent from Rightmove as structured rows you can export.
- Search by location or supply Rightmove search and property URLs.
- Collect prices, bedrooms, bathrooms, property types and available tenure information.
- Add descriptions, photos, floorplans and agency contacts when available.
- Export rows for market research, property comparisons and scheduled monitoring.
- Pay $3.00 per 1,000 delivered rows on the Free plan, plus a small start fee.
What does Rightmove Scraper do?
Rightmove Scraper collects residential listings from rightmove.co.uk. Each row represents one property listing, with rowType: "listing". Use the same output for sale and rental research without maintaining separate spreadsheets for each search.
- Location search: enter a UK place in
location; chooseBUYorRENTwithchannel. - URL input: provide search URLs or individual property URLs in
startUrls. - Detail enrichment:
scrapeDetailsis on by default. Available detail fields are added to the listing row, not billed as separate rows. - Several inputs: each supplied URL has its own
maxItemslimit, subject to the total run limits.
Only searchCategory: "residential" is supported. Commercial, overseas, student, new-home and retirement searches are not supported categories.
What data can you extract from Rightmove?
Property listing rows
Fields depend on what the listing exposes. Detail fields may be absent when scrapeDetails is off or a detail page cannot be collected.
| Field | Description | Example |
|---|---|---|
rowType | Entity represented by the row. | listing |
id | Rightmove listing identifier. | 123456789 |
url | Property page URL. | https://www.rightmove.co.uk/properties/123456789 |
channel | Sale or rental channel. | BUY |
searchCategory | Category attached to search rows. | residential |
displayAddress | Address text displayed by the listing. | Example Street, Example Town |
primaryPrice | Display price, including rental wording when supplied. | £1,500 pcm |
priceAmount | Numeric price when available. | 1500 |
priceFrequency | Rental price interval when available. | monthly |
bedrooms | Advertised bedroom count. | 2 |
bathrooms | Advertised bathroom count. | 1 |
propertySubType | Property type from the listing. | Flat |
tenure | Available sale tenure information. | Freehold |
summary | Short search-result description. | Two-bedroom flat |
description | Longer property description from details. | Example listing description |
keyFeatures | Advertised features, up to 50 entries. | ["Garden"] |
mainImage | Main image URL from search results. | https://example.com/photo.jpg |
images | Detail image URLs, up to 50 entries. | ["https://example.com/photo.jpg"] |
floorplans | Floorplan information when supplied. | Source-provided entries |
stations | Nearby station information when supplied. | Source-provided entries |
lettingsInfo | Available rental terms. | Source-provided object |
salesInfo | Available sale information. | Source-provided object |
org | Estate agency or property broker information. | {"name": "Example Estate Agents"} |
phones | Published agency telephone numbers. | [{"value": "+1 555 0100", "type": "landline"}] |
emails | Empty when no email is available. | [] |
address | Structured address information where available. | {"full": "Example Street, Example Town"} |
geo | Coordinates when available. | {"lat": 55.95, "lng": -3.19} |
web | Available agency profile link and social-link list. | {"website": null, "socials": []} |
leadAbsences | Reasons contact fields are unavailable. | ["emails:闸门锁"] |
scrapedAt | Collection timestamp. | 2026-10-24T09:00:00+00:00 |
The fixed absence labels include: emails:闸门锁 means email access is gated, person:未验证 means a named person is unverified, and social:本站无 means social links are unavailable. These are explanations, not contact details.
How to scrape Rightmove
- Open Rightmove Scraper in Apify Console.
- Enter a location such as
Edinburgh. For URLs, use the JSON input editor with the string-array format below. - Choose
channeland setmaxItemsto3for a small first run. - Click Start and inspect the run status and dataset.
- Download the rows or read them through the API.
An empty JSON input, {}, selects an Edinburgh example with up to 3 rows. This is a normal billed run, not a free preview. Filling either target field selects the search operation automatically; there is no mode field to configure.
Search by location
Set location to a UK place name. Use channel: "BUY" for properties for sale or channel: "RENT" for rentals. The place must be resolvable; an unrecognized location is not a promise of zero matching listings.
Use search URLs or property URLs
Use plain URL strings in startUrls, not objects containing url. Search URLs must include locationIdentifier. Individual property URLs identify the listing through /properties/<id>.
When URLs are supplied, they take precedence over location. Set channel explicitly for rental searches even if the URL contains property-to-rent. Do not assume other URL filters or sorting are preserved; use the documented input fields. Direct property URLs collect the identified property.
What to fill in
| Field | What to enter | Default |
|---|---|---|
location | One UK place name; used when no URLs are supplied. | Form example: Edinburgh |
startUrls | Rightmove search or property URLs as an array of strings. | Empty |
channel | BUY for sale or RENT for rent. | BUY |
searchCategory | Keep residential; no other category is supported. | residential |
maxItems | Maximum rows per URL or location, from 1 to 1,050. | 70; form example: 3 |
scrapeDetails | Add available detail fields to search rows. | true |
sortType | 6: newest; 2: highest price; 1: lowest price; 10: oldest. | "6" |
maxPages | Legacy setting; does not limit pages in current runs. Use maxItems. | 1 |
includeRawPayloads | Include source records as rawSrp and rawLdp; increases row size. | false |
requestDelayMillis | Pause between enriched listings in milliseconds, from 0 to 10,000. | 500 |
Location input:
{"location": "Edinburgh","channel": "BUY","maxItems": 3,"scrapeDetails": true}
Search URL input:
{"startUrls": ["https://www.rightmove.co.uk/property-to-rent/find.html?locationIdentifier=REGION%5E87490"],"channel": "RENT","maxItems": 3}
Individual property input; replace the illustrative ID with a current listing:
{"startUrls": ["https://www.rightmove.co.uk/properties/123456789"],"maxItems": 1}
maxItemsis the canonical per-input row limit.maxResults,limitandmax_resultsare accepted aliases.- Unknown fields do not fail the run: close misspellings are corrected where recognized, and other unknown fields are ignored with a note.
- Unsupported
sortTypevalues are ignored. Invalid target values can stop the run withINVALID_INPUT: <field> — <how to fix>before any row is charged. A start charge can still apply. - Normal runs write
INPUT_REPORTin the default key-value store, showing supplied, normalized, filled and ignored fields. Check it when the result differs from your input.
Output example
Illustrative rental row; identifiers and personal details are placeholders:
{"rowType": "listing","id": "123456789","url": "https://www.rightmove.co.uk/properties/123456789","source": "rightmove","channel": "RENT","searchCategory": "residential","displayAddress": "Example Street, Example Town","primaryPrice": "£1,500 pcm","priceAmount": 1500,"priceFrequency": "monthly","bedrooms": 2,"bathrooms": 1,"propertySubType": "Flat","org": {"name": "Example Estate Agents"},"phones": [{"value": "+1 555 0100", "type": "landline"}],"emails": [],"scrapedAt": "2026-10-24T09:00:00+00:00"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. Nested fields are easiest to retain in JSON. The OUTPUT and RUN_SUMMARY records contain run counts, timestamps and warnings; ERROR_SUMMARY records errors when available.
Why use this Rightmove scraper?
- Pay for delivered rows. Detail enrichment belongs to the same property row.
- Keep usable results. Partial rows returned before the collection deadline can be delivered. Rows already written remain available if the run stops; rows not yet delivered are not guaranteed after an abort.
- Understand missing values. Unavailable details stay empty rather than being invented.
- Compare locations. Several search URLs can be supplied in one run.
- Repeat research. Schedule searches and compare exported rows by listing ID and collection time.
- No proxy setup. You do not need to set up proxies.
How much does it cost to scrape Rightmove?
The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of selected memory, with a minimum of one event. At the default 512 MB, one normal run start costs $0.005. Platform usage is included in these prices.
| Apify plan | Start at 512 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.0030 | $3.00 |
| Starter | $0.005 | $0.0030 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
| Platinum | $0.005 | $0.0020 | $2.00 |
| Diamond | $0.005 | $0.0016 | $1.60 |
maxItemsapplies to each URL, or to the location search when URLs are empty. The default is 70; larger requests are collected in parts of at most 70 rows.- Free-plan runs are capped at 200 rows in total. Free-plan users have 10 total runs of this Actor; paid plans remove that run-count cap. These are limits set by the publisher.
- The whole run is bounded by Maximum cost per run, called
maxTotalChargeUsdin the API. Set it as a run option, not inside the input JSON. - Fewer matching listings or incomplete collection can produce fewer rows than requested.
Example: three search URLs delivering 5 rows each produce 15 rows. On the Free plan at 512 MB, the charge is 15 × $0.003 + $0.005 = $0.050. An empty result has no row charge, but the start charge still applies.
Use with AI agents and the API
Apify MCP server
For Claude, ChatGPT, Cursor or VS Code clients that support remote MCP servers, add:
https://mcp.apify.com?tools=lentic_clockss/rightmove-property-scraper
Sign in with Apify when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool provides run and dataset identifiers; read the rows with get-dataset-items.
Clients without remote MCP support can run npx @apify/actors-mcp-server --tools lentic_clockss/rightmove-property-scraper with their token in APIFY_TOKEN.
Example prompt: "Find three residential properties for sale in Edinburgh. Return the price, bedrooms and listing URL."
Apify API
Use the same JSON input as in Console.
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/rightmove-property-scraper").call(run_input={"location": "Edinburgh", "channel": "BUY", "maxItems": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/rightmove-property-scraper').call({ location: 'Edinburgh', channel: 'BUY', maxItems: 3 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For HTTP, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~rightmove-property-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After the run finishes, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Standby HTTP endpoint
Base URL: https://lentic-clockss--rightmove-property-scraper.apify.actor.
| Method | Route | Purpose |
|---|---|---|
GET | / | Service information and readiness. |
GET | /health | Service health response. |
GET | /input-example | Sample Actor input. |
GET | /openapi.json | OpenAPI document. |
These routes provide information, not dataset collection. Although the OpenAPI document also lists POST /search, that operation is not implemented by this Actor's HTTP service. Start collection through the normal Actor API above.
Integrations
Use Apify Schedules for recurring runs. Connect exported rows to Google Sheets, Make, Zapier, n8n, Slack or Airtable through integrations, or notify your application with a webhook.
FAQ
Is it legal to scrape Rightmove?
Public availability does not remove legal obligations. Check Rightmove's terms and applicable data-protection requirements for your use. Personal data requires a lawful basis; you are responsible for how you collect, store and use it.
Why did my run end as ABORTED?
A run can be aborted by a user or an external action. Check its status message and logs. This Actor does not automatically pause and resume runs; do not treat ABORTED as a promise that rows will arrive later.
How many results can I get?
Request 1 to 1,050 rows per input with maxItems. The actual count depends on available listings, collection success and the total charge limit. Free-plan runs stop at 200 rows in total.
Why are some fields empty?
The source may omit them, detail enrichment may be disabled, or a detail request may fail. Agency email addresses and named-person details are not guaranteed. The Actor does not submit contact forms to obtain missing information.
Can I collect sale and rental properties?
Yes. Set channel to BUY or RENT. Use separate runs for sale and rental searches; a rental URL alone does not change the channel setting.
Why did my Free-plan access stop after 10 runs?
The publisher limits Free-plan users to 10 total runs of this Actor. The run summary explains when this cap is reached. A paid Apify plan removes this particular limit.
Does maxPages limit my results?
No. It remains a compatibility field, but current runs paginate according to maxItems, available results and the run limits.
Does it collect property details?
Yes. Search rows are enriched when scrapeDetails is true, its default. An individual property URL requests that property's details directly.
Limitations
- Only residential sale and rental searches are supported. Sold-price history is not exposed as an Actor input.
- Search URLs need a usable
locationIdentifier. Other URL filters are not guaranteed to carry over. - Use plain strings for
startUrls; URL objects are not handled correctly by the current input processing. - Phone numbers, tenure, photos, stations and rental terms depend on what each listing supplies.
- Image and feature lists are capped at 50 entries. Optional raw records may be trimmed or omitted for size.
- No complete-market coverage or automatic recovery after an aborted run is guaranteed.
Related scrapers
More real estate and property data scrapers from the same publisher:
- Zumper Scraper
- Booli Scraper
- Craigslist Scraper
- PropertyGuru Scraper
- OpenSooq Scraper
- Apartments.com Rental Scraper
- Dot Property Scraper
- FINN.no Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.