Scrape rightmove.co.uk to crawl millions of real estate agents from United Kingdom. You can provide multiple search result listings to scrape/monitor.
This Rightmove agents scraper will enable you scrape any agent from rightmove.co.uk.
You can simply take your listing url from browser and enter it into this actor. This actor will crawl through all pages of particular listing and generate dataset for you.
Listing url is something you get when you perform the search on rightmove site. Example listing urls :
📈 Extract Rightmove market data listings on Rightmove
👀 This actor is not just scraper but also has monitoring capability. You can turn on monitoring mode and it will give you only newly added agents compared to your previous scrapes.
📩 This actor also helps yu to identify which agents are not listed anymore. Please refer to Identifying delisted agents
⬇️ Download Rightmove real estate data in Excel, CSV, JSON, and other formats
📝 | 📝 |
---|---|
Agent Name | Profile URL |
Branch Name | Whether Letting Agent ? |
Phone | Whether Sales Agent ? |
Direct Phone | Address |
Letting Phone | Sales Phone |
Main Phone | Postcode |
Company Name | Whether Estate Agent ? |
Latitude | Longitude |
Number of Sales Properties | Number of Lettings Properties |
Lettings listing URL | Sales Listing URL |
For simple usecase, you just need to provide browser url of rightmove search result page & that's all. You can leave other fields as they are to be sensible defaults.
1{ 2 "listUrls": [ 3 { 4 "url": "https://www.rightmove.co.uk/estate-agents/find.html?locationIdentifier=OUTCODE%5E1" 5 } 6 ], 7 "agentUrls": [ 8 { 9 "url": "https://www.rightmove.co.uk/estate-agents/agent/Savills/Aberdeen-Industrial-214091.html" 10 } 11 ], 12 "monitoringMode": false, 13 "fullAgentDetails" : true, 14 "enableDelistingTracker" : false, 15 "addEmptyTrackerRecord" : false, 16 "deduplicateAtTaskLevel" : false 17}
You can either provide listUrls
to search properties from or provide propertyUrls
directly to crawl.
Understading monitoring mode :
monitoringMode
: This option when turned on will only scrape newly added property listings compared to previously scraped properties by this actor. It's important to turn off fullScrape setting if you are using this mode. If you keep fullScrape on, it will re-scrape complete listing again.
enableDelistingTracker
: This option when turned on will start tracking date against each property under Apify Key Value store. This KV store can be queried later to find out which properties are delisted.
addEmptyTrackerRecord
: This option when turned on will add empty record having only id of property to Apify dataset. This helps you identify whether property is still listed compared to your own database in incremental mode.
fullAgentDetails
: By default it will scrape every single agent page to get full details of agent. If you don't need full details but basic details is enough for you, it's highly encouraged to turn off this setting. It will run the scraping a lot of faster and save the cost and resources.
deduplicateAtTaskLevel
: By default scraper will deduplicate and monitor successive updates at account level. In case, you have configured many tasks from this actor and you want de-duplication / successive updates at task level, enble this setting. Enabling this means that two different tasks are treated as two isolated scraping when it comes to monitoring mode.
The scraped data is stored in the dataset of each run. The data can be viewed or downloaded in many popular formats, such as JSON, CSV, Excel, XML, RSS, and HTML.
The result for scraping a single property like this:
1{ 2 "id": "Aberdeen-Industrial-214091.html", 3 "url": "https://www.rightmove.co.uk/estate-agents/agent/Savills/Aberdeen-Industrial-214091.html", 4 "name": "Aberdeen Industrial", 5 "branchName": "Savills, Aberdeen Industrial", 6 "brandName": "Savills", 7 "estateAgent": false, 8 "lettings": true, 9 "sales": true, 10 "phone": "01224 007695", 11 "directPhone": "01224 971111", 12 "address": "37 Albyn Place\r\nAberdeen\r\nAB10 1YN", 13 "lettingsTelephone": "01224 007695", 14 "mainTelephone": "01224 971111", 15 "salesTelephone": "01224 007694", 16 "postcode": "AB10 1YN", 17 "companyName": "Savills ", 18 "coordinates": { 19 "latitude": "57.14267347229752", 20 "longitude": "-2.124575889305664" 21 }, 22 "lettingsProperties": 20, 23 "salesProperties": 6, 24 "lettingsPropertiesUrl": "https://www.rightmove.co.uk/commercial-property-to-let/find/Savills/Aberdeen-Industrial.html?locationIdentifier=BRANCH%5E214091&propertyStatus=all&includeLetAgreed=true&_includeLetAgreed=on", 25 "salesPropertiesUrl": "https://www.rightmove.co.uk/commercial-property-for-sale/find/Savills/Aberdeen-Industrial.html?locationIdentifier=BRANCH%5E214091&includeSSTC=true&_includeSSTC=on" 26}
Since Rightmove allows only 1000 agents per listing/search result, you might want to break down your listing urls into smaller area if it has more than 1K results. Good News is that even if multiple list urls contains overlapping results, they will get deduplicated within same run data.
This actor provides you monitoring mode configuration using which you can get only incremental updates about newly added properties. In case, you also want to identify which agents are delisted from platform, you can use any of the following techniques with the help of this actor.
Running Always without monitoring mode : Run this actor always without monitoring mode enabled and cross check the new incoming batch of data with your existing database. If any property that exists in yoru database but not in newly scraped data batch, that means it's not listed anymore
Use Key Value Store generated by scraper :
If your are monitoring very large batch of data and you don't want to scrape everything all the time, this method involves bit of technicality but achieves the goal efectively. Apify has storage feature called Key-value store. When you run this scrape, this scraper stores every single property in key value store along with timestamp in rightmove-agents
store. Inside this store, key is property id itself and value is timestamp like this
{ lastSeen : '2023-11-02T05:59:25.763Z'}
Whenever you run this scraper, it will update the timestamp against particular id if it finds property on the platform. e.g. if we have 2 proprties with id prop1
and prop2
and we scraped them both on November 1, key value storage would look like this :
1prop1 -> { lastSeen : '2023-11-01T05:59:25.763Z'} 2prop2 -> { lastSeen : '2023-11-01T05:59:25.763Z'}
Now if you run this scraper again on December 1 and prop1 is not on the platform anymore but prop2 is still there, key value storage would change like this :
1prop1 -> { lastSeen : '2023-11-01T05:59:25.763Z'} 2prop2 -> { lastSeen : '2023-12-01T05:59:25.763Z'}
That means if any property has lastSeen
less than latest batch you loaded, that property is delisted now. You can directly iterate through whole Key value storage using Apify key value storage API to identify this. Please refer to this API documentation to do the same. Please remember store name generated by this scrape will be rightmove-agents
.
Alternatively, you can iterate through your existing database active agents and use this API to identify listing status.
For this approach to work, it's important that you enable this feature via enableDelistingTracker
(Enable Delisting tracker) input.
In case you need some custom solution, you can contact me : dhrumil@techvasu.com
Or learn more about me on github : https://github.com/dhrumil4u360
Yes, if you're scraping publicly available data for personal or internal use. Always review Websute's Terms of Service before large-scale use or redistribution.
No. This is a no-code tool — just enter a job title, location, and run the scraper directly from your dashboard or Apify actor page.
It extracts job titles, companies, salaries (if available), descriptions, locations, and post dates. You can export all of it to Excel or JSON.
Yes, you can scrape multiple pages and refine by job title, location, keyword, or more depending on the input settings you use.
You can use the Try Now button on this page to go to the scraper. You’ll be guided to input a search term and get structured results. No setup needed!