OnTheMarket Property Scraper — UK Listings, Prices & Agents
Pricing
Pay per event
OnTheMarket Property Scraper — UK Listings, Prices & Agents
Scrape OnTheMarket property listings — price, bedrooms, bathrooms, address, coordinates, features, images, agent and more. Search by UK location or paste search / property URLs. One row per property; optional detail enrichment (description, EPC, floor area, nearby stations & schools). JSON/CSV out.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
OnTheMarket Property Scraper
Turn any OnTheMarket search into clean, structured property data. Search by UK location (with price, bedroom and type filters), or paste search-results URLs and property URLs — and get one flat row per property with price, bedrooms, bathrooms, address, coordinates, features, images and the full agent block. Flip on detail mode to add the full description, EPC rating, floor area, and nearby stations & schools.
Built for property-market research, price monitoring, lead generation and building UK real-estate datasets.
How it works

✨ Why use this scraper?
- Rich rows out of the box — ~25 fields per property from the search results alone: price, beds, baths, property type, address, latitude/longitude, features, cover image + gallery, days-since-added and the full agent block (name, phone, logo, URL).
- Three ways in — location slugs (a search is built for you), pasted search-results URLs, or direct
/details/property URLs. Mix them in one run. - Every UK location —
london,manchester,sw1,n3… OnTheMarket resolves the slug server-side. Addfor-sale/to-rent, price, bedroom and property-type filters. - Full detail on demand — turn on Scrape property detail pages (or paste a property URL) to add the full description, EPC rating, floor area (sqm), postcode, nearby stations (with lines) and schools (with ratings).
- Skips the ads — injected "in-market" advertorial cards are filtered out, so every row you pay for is a real property listing.
- No brittle DOM scraping — reads OnTheMarket's embedded
__NEXT_DATA__JSON, so the output stays stable when the page layout changes. - JSON, CSV, Excel or API — pipe straight into your sheet, BI tool or pipeline. Billed per property.
🎯 Use cases
| You are a… | Use it to… |
|---|---|
| Property investor | Track asking prices, £/sqm and new listings across your target postcodes |
| Estate agent | Benchmark competing listings — price, beds, features and time on market |
| Market researcher | Measure price distribution and stock levels per area and property type |
| Proptech / app builder | Seed a UK property dataset with structured listing + agent rows |
| Lead-gen | Pull agent names, phones and branches behind live listings by area |
| Relocation / buyer | Compare properties by price, floor area, EPC and nearby transport |
📥 Supported inputs
| Input | Example | What it does |
|---|---|---|
| Location slug | london, manchester, sw1 | Builds a search and paginates the results |
| Search URL | https://www.onthemarket.com/for-sale/property/london/ | Paginates that search's results |
| Property URL | https://www.onthemarket.com/details/19723728/ | Scrapes that single property in full detail |
Not supported: anything behind a login, saved searches/alerts tied to an account, buyer/agent messaging, or sold-price history endpoints. The actor reads only public search-results and property pages.
⚙️ How it works
- Classify every input — location slugs become search URLs; pasted URLs are sorted into search vs
/details/property pages. - Fetch each page with a real browser TLS fingerprint over a UK residential IP, so OnTheMarket returns the real page.
- Parse the page's embedded
__NEXT_DATA__JSON — a search page yields 30 properties; the?page=2,?page=3… sequence is followed automatically up to your limit. - Enrich each property from its detail page (when Scrape property detail pages is on): description, EPC, floor area, postcode, stations and schools.
- Emit one flat, deduplicated row per property to the dataset.
⚙️ Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
locations | array | ["london"] | Location slugs to build a search from. |
startUrls | array | — | Search-results URLs and/or /details/ property URLs. Auto-classified. |
channel | string | for-sale | for-sale or to-rent (applied to the Locations builder). |
propertyType | string | — | e.g. flats-apartments, houses, bungalows, land. |
minPrice / maxPrice | integer | — | Price band (£) for built searches. |
minBedrooms / maxBedrooms | integer | — | Bedroom band for built searches. |
radius | integer | — | Search radius (miles) around the location. |
sortField | string | recommended | recommended, update-date, price-asc, price-desc. |
scrapeDetails | boolean | false | Also fetch each property's detail page for description, EPC, floor area, stations and schools (~2× requests). Pasted property URLs are always fully detailed. |
maxItems | integer | 1000 | Max rows for the whole run. |
maxItemsPerSearch | integer | 1000 | Max properties per location / search URL. |
maxConcurrency | integer | 6 | Parallel requests. |
maxRequestRetries | integer | 12 | Retry budget on IP-level blocks (403/429/5xx). |
proxy | object | Apify Residential (GB) | Proxy for free-tier runs; paid runs use a built-in GB residential pool. |
📤 Output
Each row is one property, flat and ready for CSV/Excel. Detail fields (below the divider) appear when Scrape property detail pages is on or when you paste a /details/ URL.
{"rowType": "property","id": "19865517","propertyUrl": "https://www.onthemarket.com/details/19865517/","title": "1 bedroom flat for sale","propertyType": "Flat","channel": "sale","status": "live","price": "£290,000","priceNumeric": 290000,"shortPrice": "£290k","priceQualifier": "Offers over","bedrooms": 1,"bathrooms": 1,"floorAreaSqM": 39,"address": "Brixton Hill, London SW2","postcode": "SW2 5LP","latitude": 51.450127,"longitude": -0.123365,"features": ["Well-appointed kitchen", "Lift access", "One double bedroom"],"mainLabel": "Recently added","daysSinceAdded": "Added < 7 days","images": ["https://media.onthemarket.com/properties/19865517/…/image-0-480x320.jpg"],"agentId": 54127,"agentName": "Trevlyn Properties - Maidstone","agentPhone": "020 3641 3807","agentUrl": "https://www.onthemarket.com/agents/branch/trevlyn-properties-maidstone/","matterportVirtualTour": false,"isNewHome": false,"sourceUrl": "https://www.onthemarket.com/for-sale/property/london/","sourceMode": "search","scrapedAt": "2026-07-06T03:22:01.916Z","detailScraped": true,"description": "This stunning one-bedroom apartment, situated on the prominent Brixton Hill…","epcRating": "D","broadbandType": "ultra-fast","broadbandMaxDownloadMbps": 10000,"stations": [{ "name": "Brixton Underground Station", "distance": "0.5mi.", "lines": ["Victoria"], "networks": ["Tube"] }],"schools": [{ "name": "Sudbourne Primary School", "distance": "0.3mi.", "rating": "Outstanding" }]}
🔑 Key output fields
| Field | Description |
|---|---|
id, propertyUrl | OnTheMarket property id and its /details/ URL |
price, priceNumeric, priceQualifier | Asking price as shown, as a number, and the qualifier (e.g. "Offers over") |
bedrooms, bathrooms, floorAreaSqM | Core specs; floor area (sqm) from the detail page |
propertyType, tenure, status | "Flat" / "Semi-detached house"; Freehold/Leasehold; live/under-offer |
address, postcode, latitude, longitude | Location + geo-coordinates |
features | Bullet features from the listing |
images, coverImage | Photo gallery URLs |
agentName, agentPhone, agentUrl, agentLogo | The listing agent / branch |
epcRating, broadbandType, broadbandMaxDownloadMbps | EPC band and broadband (detail) |
stations, schools | Nearby transport and schools with distances (detail) |
❓ FAQ
Is scraping OnTheMarket legal? This actor collects only publicly available listing data. You are responsible for using the output in line with OnTheMarket's terms and applicable laws (including GDPR for any personal data such as agent contact details). Do not use it to spam or to build a competing listings service.
Do I need proxies? OnTheMarket serves UK-geolocated pages, so requests go through UK residential IPs. Paid runs use a built-in GB residential pool automatically; free-tier runs default to Apify Residential (GB).
How many properties can I get? As many as the search returns — pagination is followed automatically up to your maxItems/maxItemsPerSearch limits. A single London search exposes tens of thousands of listings across pages.
How do I get the full description, EPC and floor area? Turn on Scrape property detail pages, or paste /details/ property URLs directly (those are always fully detailed).
What's a "row"? One property. You're billed per property row emitted to the dataset.
🛟 Support
Found a missing field or a page shape that doesn't parse? Open an issue on the actor's Issues tab with the input URL — fixes are quick.
🧭 Explore more scrapers
Building a UK property or lead-gen pipeline? This actor pairs well with other real-estate and directory scrapers in the store — combine listing data with agent and location enrichment.
⚠️ Disclaimer
This actor is an independent tool and is not affiliated with, endorsed by, or connected to OnTheMarket or its operators. All trademarks belong to their respective owners. It accesses only publicly available pages and does not bypass any login. You are solely responsible for how you use the collected data, including compliance with OnTheMarket's terms of service and all applicable data-protection laws.
🔎 SEO keywords
OnTheMarket scraper, OnTheMarket property scraper, UK property scraper, real estate scraper UK, property listings scraper, house prices scraper, flats for sale scraper, property data extraction, estate agent leads scraper, OnTheMarket API, UK housing data, property market research, scrape onthemarket.com, property price monitoring.