OnTheMarket Scraper - UK Property, EPC, Tenure & Agents avatar

OnTheMarket Scraper - UK Property, EPC, Tenure & Agents

Pricing

from $3.96 / 1,000 property searches

Go to Apify Store
OnTheMarket Scraper - UK Property, EPC, Tenure & Agents

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Ü

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

Share

OnTheMarket Scraper — UK Property Data, Prices & Agents 🏘️

Store-SIÁN Agency Store-Rightmove Property Scraper Store-Zoopla Property Scraper Store-Smart Idealista Scraper

🎉 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: price arrives as 525000, 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 maxResults and 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

FieldTypeRequiredDescription
operationstringNosearch (default) or detail
channelstringNofor-sale, to-rent or new-homes
locationsarrayNoOnTheMarket location slugs, e.g. ["london","manchester"]
searchUrlsarrayNoFull OnTheMarket search or agent-branch URLs
propertyUrlsarrayNoProperty URLs for the detail operation
maxResultsintegerNoWhole-run row budget (default 100)
includeDetailsbooleanNoAdd EPC, tenure, council tax, stations, schools
minPrice / maxPriceintegerNoPrice bounds in pounds (pcm for rentals)
minBedrooms / maxBedroomsintegerNoBedroom bounds
propertyTypestringNodetached, terraced, flats-apartments, …
radiusintegerNoMiles around the location
keywordsstringNoListing must mention this word, e.g. garden
addedSincestringNo24-hours, 3-days, 7-days, 14-days
includeUnderOfferbooleanNoInclude stock already under offer
sortBystringNorecommended, 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:

FieldTypeDescription
propertyIdstringOnTheMarket's own listing ID
pricenumberAsking price, or monthly rent for rentals
priceQualifierstring"Offers in excess of", "Guide price", …
addressstringDisplay address
postcodestringFull postcode (detail rows)
propertyTypestringSemi-detached house, Flat, Terraced house, …
bedrooms / bathroomsnumberRoom counts
tenurestringFreehold / Leasehold (detail rows)
epcRatingstringA–G energy rating (detail rows)
councilTaxBandstringBand A–H (detail rows)
broadbandSpeedMbpsnumberMeasured max download (detail rows)
latitude / longitudenumberCoordinates
addedOrReducedstring"Added yesterday", "Reduced", …
agentName / agentPhonestringMarketing branch and its phone number
nearestStationsarrayName, distance and rail lines (detail rows)
imageUrlsarrayEvery 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 ApifyClient
client = 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)

  1. Trigger: a daily schedule
  2. HTTP Request: call the Actor with addedSince: "24-hours"
  3. Process: filter the returned rows on your own criteria
  4. 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
  • 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.

🔗 View current pricing


❓ 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.
  • leeds works; leeds-city-centre does 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.

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

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools