OnTheMarket Scraper - UK Property, EPC, Tenure & Agents
Pricing
from $3.96 / 1,000 property searches
OnTheMarket Scraper - UK Property, EPC, Tenure & Agents
Scrape OnTheMarket UK listings: price, tenure, EPC rating, council tax band, beds and baths, agent contacts and coordinates. For sale and to rent, any location.
Pricing
from $3.96 / 1,000 property searches
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
OnTheMarket Scraper — UK Property Data, Prices & Agents 🏘️
🎉 Every UK listing with the fields buyers actually filter on: EPC, tenure and council tax band
Built for property analysts, buying agents, proptech teams and anyone tracking UK housing stock
🔎 What is the OnTheMarket Scraper — and when should you use it?
The OnTheMarket Scraper turns live UK property listings from OnTheMarket, the country's third property portal into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: UK listings for sale, to rent or new-build, from any town, city, county or postal district. Every row carries the asking price as a number, the address, bedrooms and bathrooms, property type, coordinates, photos and the marketing estate agent's name and phone number. Switch on full property details and each row also carries the postcode, tenure, EPC rating and its assessment date, council tax band, measured broadband speed, nearest stations and schools, floorplans and the complete description.
Use something else when: the property is not on OnTheMarket, or you need sold prices. Use Rightmove Property Scraper for the largest UK portal by inventory, plus sold-price comparables stitched to Land Registry records. Use Zoopla Property Scraper for the second UK portal, with sale and rent valuation estimates alongside the listings. Use Smart Idealista Scraper for Spain, Italy and Portugal, where OnTheMarket has no coverage at all. This actor covers live OnTheMarket listings. There is no sold-price archive on the portal, so price history is out of scope, and agent email addresses are never published — enquiries route through OnTheMarket's own form, so you get the branch phone number instead.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/onthemarket-property-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want UK property listings, prices and estate agent contacts from OnTheMarket using the Apify Actor `sian.agency/onthemarket-property-scraper`.Use it when I need: UK listings for sale, to rent or new-build, from any town, city, county or postal district. Every row carries the asking price as a number, the address, bedrooms and bathrooms, property type, coordinates, photos and the marketing estate agent's name and phone number. Switch on full property details and each row also carries the postcode, tenure, EPC rating and its assessment date, council tax band, measured broadband speed, nearest stations and schools, floorplans and the complete description.Don't use it when: the property is not on OnTheMarket, or you need sold prices — use rightmove-property-scraper or zoopla-property-scraper or smart-idealista-scraper instead.How to call it: give `locations` a list of OnTheMarket location slugs (`london`, `manchester`, `e14`) and pick a `channel` of `for-sale`, `to-rent` or `new-homes`. Narrow with `minPrice`, `maxPrice`, `minBedrooms`, `maxBedrooms`, `propertyType`, `radius`, `keywords` or `addedSince` (`24-hours` is the cheap way to run it on a schedule). `includeDetails` adds EPC, tenure, council tax band, stations and schools for an extra charge per property. To expand properties you already have, set `operation` to `detail` and pass `propertyUrls`; to reuse a search you built on the site, or to sweep one estate agent's whole book, paste the URL into `searchUrls`.Start with this input:{"operation": "search","channel": "for-sale","locations": ["manchester"],"minPrice": 200000,"maxPrice": 400000,"minBedrooms": 2,"maxResults": 100}Ask me which UK area and channel they want, their budget and bedroom range, and whether they need the EPC and tenure detail fields, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Pull every 2-3 bed flat to rent in E14 added in the last 24 hours and rank them by monthly rent.
- Find all for-sale properties in Bath with an EPC rating of D or worse so I can build a retrofit prospect list.
- Scrape the Connells Watford branch and tell me how many new instructions they took this week.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/onthemarket-property-scraper.md.
📋 Overview
OnTheMarket lists property that never reaches the other portals — agents often post there first, and some list there exclusively. This Actor reads it the way a data team wants it read: one row per property, typed values, no HTML.
What you get:
- ✅ The UK fields that decide a deal: tenure, EPC rating and its assessment date, council tax band, measured broadband speed, nearest stations with distances and rail lines, nearest schools. Five of the eight OnTheMarket scrapers on the Store return the listing card and stop.
- ⚡ 30 properties per request: a whole town in seconds, and a 1,000-property sweep in under a minute.
- 🎯 Typed values, not scraped text:
pricearrives as525000, not"Offers in excess of £525,000". Latitude and longitude are floats. Bedrooms is an integer. - 💰 No charge for failures: you pay per property returned. Error rows cost nothing.
- 💎 Estate agent contacts on every row: branch name, phone number, postal address and branch URL — the lead data, attached to the stock.
- ✨ Sale, rent and new homes: one Actor, all three channels, the same output shape.
✨ Features
- 🔍 Search any UK location: towns, cities, counties and postal districts —
london,manchester,e14,sw1a,milton-keynes. - 🏷️ For sale, to rent or new homes: switch channel, keep the same columns.
- 🎛️ Filters that match the site's own: price range, bedroom range, property type, radius, keyword, and "added in the last 24 hours".
- 📄 Optional full detail: turn on one switch to add EPC, tenure, council tax, broadband, stations, schools, floorplans and the complete description.
- 🏢 Estate agent branch sweeps: paste a branch URL and get that agent's entire book.
- 🌐 Paste any OnTheMarket search URL: every filter in the URL is honoured, including ones this form does not expose.
- 📍 Coordinates on every row: map it, geofence it, join it to your own boundaries.
- 📮 Postcode and country on detail rows — the join key for every other UK dataset.
- 🔢 A hard row budget: set
maxResultsand the run stops there. No surprise bills. - 🚫 Adverts filtered out: sponsored slots in the results list are dropped, never billed as properties.
🎬 Quick Start
Pick an operation, give it a location, press Start. The Actor paginates, parses and writes one row per property to your dataset — then saves an HTML run report next to it.
curl -X POST "https://api.apify.com/v2/acts/sian.agency~onthemarket-property-scraper/runs?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"operation":"search","channel":"for-sale","locations":["manchester"],"maxResults":100}'
🚀 Getting Started (3 Simple Steps)
Step 1: Choose your channel
Pick For sale, To rent or New homes.
Step 2: Name your locations
Type the location slug the way OnTheMarket writes it in its own URL — manchester, bristol, e14. Add several to sweep a region in one run.
Step 3: Set a row budget and run
maxResults caps the whole run. Turn on Add full property details if you need EPC, tenure and council tax band.
That's it! In under a minute, you'll have:
- One clean row per property, ready for CSV or Excel
- Estate agent name and phone number on every row
- An HTML report showing exactly what you were charged for
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | search (default) or detail |
channel | string | No | for-sale, to-rent or new-homes |
locations | array | No | OnTheMarket location slugs, e.g. ["london","manchester"] |
searchUrls | array | No | Full OnTheMarket search or agent-branch URLs |
propertyUrls | array | No | Property URLs for the detail operation |
maxResults | integer | No | Whole-run row budget (default 100) |
includeDetails | boolean | No | Add EPC, tenure, council tax, stations, schools |
minPrice / maxPrice | integer | No | Price bounds in pounds (pcm for rentals) |
minBedrooms / maxBedrooms | integer | No | Bedroom bounds |
propertyType | string | No | detached, terraced, flats-apartments, … |
radius | integer | No | Miles around the location |
keywords | string | No | Listing must mention this word, e.g. garden |
addedSince | string | No | 24-hours, 3-days, 7-days, 14-days |
includeUnderOffer | boolean | No | Include stock already under offer |
sortBy | string | No | recommended, newest, price-high, price-low |
Example — a filtered sale search:
{"operation": "search","channel": "for-sale","locations": ["manchester", "bristol"],"minPrice": 200000,"maxPrice": 400000,"minBedrooms": 2,"propertyType": "semi-detached","sortBy": "newest","maxResults": 500}
Example — full detail for specific properties:
{"operation": "detail","propertyUrls": ["https://www.onthemarket.com/details/19275782/"]}
📤 Output
Results are saved to the Apify dataset with 40+ fields including:
| Field | Type | Description |
|---|---|---|
propertyId | string | OnTheMarket's own listing ID |
price | number | Asking price, or monthly rent for rentals |
priceQualifier | string | "Offers in excess of", "Guide price", … |
address | string | Display address |
postcode | string | Full postcode (detail rows) |
propertyType | string | Semi-detached house, Flat, Terraced house, … |
bedrooms / bathrooms | number | Room counts |
tenure | string | Freehold / Leasehold (detail rows) |
epcRating | string | A–G energy rating (detail rows) |
councilTaxBand | string | Band A–H (detail rows) |
broadbandSpeedMbps | number | Measured max download (detail rows) |
latitude / longitude | number | Coordinates |
addedOrReduced | string | "Added yesterday", "Reduced", … |
agentName / agentPhone | string | Marketing branch and its phone number |
nearestStations | array | Name, distance and rail lines (detail rows) |
imageUrls | array | Every photo on the listing |
Example row:
{"propertyId": "19638202","propertyTitle": "3 bedroom terraced house for sale","url": "https://www.onthemarket.com/details/19638202/","price": 365000,"priceText": "£365,000","channel": "for-sale","address": "Furber Road, Bristol","propertyType": "Terraced house","bedrooms": 3,"bathrooms": 1,"latitude": 51.453959,"longitude": -2.522341,"addedOrReduced": "Added > 14 days","agentName": "Connells - Kingswood, Bristol","agentPhone": "0117 295 3066","agentUrl": "https://www.onthemarket.com/agents/branch/connells-kingswood-bristol/","imageCount": 5,"features": ["Tenure: Freehold", "Three bedroom terraced home", "Off-street parking"],"status": "success"}
💼 Use Cases & Examples
1. New-Stock Alerts for Buyers and Investors
A buying agent who needs to see new instructions the morning they land.
Input: one location, addedSince: "24-hours", on a daily schedule
Output: only the properties added since yesterday
Use: Bristol drops from 3,477 properties to 28, so the run costs pennies and every row is genuinely new.
2. Estate Agent Lead Generation
An agency selling services to estate agents.
Input: a county or city, a few hundred rows Output: every listing with its marketing branch name, phone number and branch URL Use: group by agent to rank who is winning instructions in that patch, with a live phone number attached.
3. Competitor Stock Monitoring
An estate agent tracking a rival branch.
Input: the rival's branch URL in searchUrls
Output: that agent's entire book, for sale or to rent
Use: run weekly and diff the results to see every new instruction, price reduction and withdrawal.
4. Buy-To-Let and Yield Modelling
A landlord sizing up a postcode.
Input: the same area run twice — once for-sale, once to-rent, same bedroom filter
Output: both halves of a gross-yield calculation for the same streets
Use: turn on full details and every row also carries tenure, EPC and council tax band.
5. EPC and Retrofit Targeting
A retrofit, insulation or heat-pump business building a prospect list.
Input: a region with includeDetails: true
Output: every property with its EPC rating and assessment date
Use: filter to D, E, F and G — the stock facing the tightening rental efficiency floor.
6. Property Market Analysis
An analyst tracking asking prices over time.
Input: a fixed set of locations on a weekly schedule Output: a time series of asking prices, price qualifiers and days-on-market labels Use: measure how long stock sits and how often it is reduced, by area and property type.
7. Proptech and AI Agent Data Feeds
A product that needs live UK listings behind it.
Input: the API or MCP call, on demand Output: typed JSON with coordinates and postcodes Use: the postcode joins straight to any other UK dataset — Land Registry, census, flood risk.
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/onthemarket-property-scraper').call({operation: 'search',channel: 'for-sale',locations: ['manchester'],minBedrooms: 2,maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/onthemarket-property-scraper').call(run_input={'operation': 'search','channel': 'to-rent','locations': ['e14'],'addedSince': '24-hours',})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['address'], item['price'])
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~onthemarket-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation":"search","locations":["bristol"],"maxResults":100}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: a daily schedule
- HTTP Request: call the Actor with
addedSince: "24-hours" - Process: filter the returned rows on your own criteria
- Action: write to a sheet, post to Slack, or start an outreach sequence
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 properties per run — every field, every filter, same quality
- No credit card required
- Enough to check the output shape against your own pipeline
PAID Tier (Production Ready)
- Unlimited properties per run
- 30 properties per request — a 1,000-row sweep finishes in under a minute
- Pay-per-result: charged per property returned, never for an error row
💰 You are charged for what you receive. Full property details are a separate, optional add-on — leave the switch off and you pay for listing rows only.
❓ Frequently Asked Questions
Q: Do I need an API key, a proxy or a login? A: No. Give it a location and press Start.
Q: How many properties can one search return? A: About 1,020. OnTheMarket stops paginating at page 34 of 30 rows. The result counter on the site will say 50,000, but those rows are not reachable by anyone. To go wider, add locations, narrow the price band, or split by property type.
Q: Which locations work? A: Any slug OnTheMarket itself uses — towns, cities, counties and postal districts. Copy it out of the site's own URL. An unknown slug returns a clear error row instead of silently scraping nothing.
Q: What does "Add full property details" cost? A: It reads each property's own page, so it bills one Property Detail event per property on top of the listing row. It is the only way to get EPC, tenure, council tax band and the full description — the search page does not carry them.
Q: Does it cover rentals as well as sales? A: Yes, and new homes too. Rental prices come back as the monthly figure, with the formatted string keeping the weekly equivalent alongside it.
Q: Can I get sold prices or price history? A: No. OnTheMarket publishes live listings, not a sold-price archive. If a price changes between runs you can derive the reduction yourself, and each row says when it was last reduced.
Q: Are estate agent email addresses included? A: No, because OnTheMarket does not publish them — enquiries route through its own contact form. You get the branch name, phone number, postal address and branch URL.
Q: What output formats are available? A: JSON, CSV and Excel — export directly from the Apify dataset.
🐛 Troubleshooting
"is not a location OnTheMarket knows"
- Open OnTheMarket, search for the place, and copy the slug out of the address bar.
leedsworks;leeds-city-centredoes not. Use the broader slug and a radius.
A search returns fewer rows than the site claims
- OnTheMarket caps every search at 34 pages of 30 rows. That ceiling is the site's, not the Actor's.
- Split the search: add locations, tighten the price band, or filter by property type.
EPC, tenure or council tax band are empty
- Those live on the property page. Turn on Add full property details.
- Some agents simply do not supply them. A field the agent left as "Ask agent" is returned empty rather than as a fake value.
A rental price looks wrong
- Rentals are returned as the monthly (pcm) figure. The weekly figure stays in
priceText.
The run stopped before my row budget
- On the FREE tier a run stops at 25 properties. Add credits for unlimited rows.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
OnTheMarket is a trademark of OnTheMarket plc. This actor is not affiliated with, endorsed by, or sponsored by OnTheMarket.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools