OnTheMarket Scraper at a glance
OnTheMarket Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes id, url, channel, price and price (num), which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Real Estate
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 25 options
Scrape onthemarket.com for-sale, to-rent and new-homes listings with 85+ fields: price, address & geo, bedrooms/bathrooms, full description, key info, nearest stations & schools, area stats, floorplans, virtual tours and complete agent contacts. Search by location + filters or paste URLs.
What OnTheMarket Scraper can do
- Two ways to find properties. Search by location plus filters, or paste OnTheMarket search-result or property-details URLs. No need to build search URLs by hand.
- Three channels in one actor. For-sale, to-rent and new-homes listings, all read from the same search and detail pages.
- Rich fields, two depths. Every search card carries about 28 fields; turn on full property details to expand each record to 85+ fields.
- Direct agent contacts. Agent name, company, phone, website, contact URL and address are captured straight from the listing, never inferred or guessed.
- Search-side filters. Price, bedrooms, property type, radius and sort order, plus an include-under-offer / SSTC toggle, all applied as OnTheMarket's own query parameters so the site does the narrowing.
- UK-specific detail. EPC energy rating, tenure, council tax band, stamp duty label, and nearby stations and schools are captured on enriched records.
Choose what to collect
These inputs let you configure OnTheMarket Scraper - UK Property Listings & Agent Contacts. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | How to start the scrape. 'Search' builds result pages from a location + filters. 'URL list' scrapes the search or property-details URLs you paste. |
channelstring | Which listings to scrape (search mode). |
locationsarray | One or more places to search - a town, city, postcode or area (e.g. 'London', 'Manchester', 'SW19'). Each is resolved to its OnTheMarket search area. |
startUrlsarray | URL mode only. Paste OnTheMarket search-result URLs (sale, to-rent, new homes, postcode, with filters, sort and page), property-details URLs, a place landing page (/property/london/), an agent branch page or an agents directory. Left unedited it scrapes one example of each shape. If you paste your own URLs but leave Mode on Search and Locations at London, the run switches to URL mode; if you changed Locations, Search mode ignores these URLs (warning in the log). |
minPriceinteger | Lowest price (sale price, or monthly rent for to-rent). |
maxPriceinteger | Highest price (sale price, or monthly rent for to-rent). |
minBedroomsinteger | Fewest bedrooms. |
Show 18 more inputs
| Input | What it controls |
|---|---|
maxBedroomsinteger | Most bedrooms. |
propertyTypesarray | Filter by property type. Leave empty for all types. |
radiusstring | Expand the search around the location by this many miles. Works with town / postcode locations. |
sortTypestring | How to order results. |
includeUnderOfferboolean | Also include listings that are under offer or sold subject to contract. |
addedToSitestring | Only listings added within this window (24 hours, 3 days or 7 days). Leave empty for all. |
includeDetailsboolean | Fetch each property's details page for the full description, key info, floorplans, nearby stations & schools, area stats, and complete agent contact details. Slower and adds a per-record detail charge. |
maxItemsinteger | Maximum number of listings to return. This is the run cap. Set to 0 for no item limit (stops when Max pages is reached). |
maxPagesinteger | No page limit by default - the run stops at Max items. Set a value only to cap how many result pages are walked. |
resumeFromRunIdstring | Optional. ID of a previous run of this actor (or a dataset ID). Listings and agent records already in that dataset are skipped, so this run returns only listings not collected yet. Max items then counts only the new listings. For recurring monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching listings as NEW. Later runs compare every listing against the last run (price, qualifier, bedrooms, bathrooms, title, description, features, agent details, labels and the other listing fields) and return only NEW, UPDATED and REAPPEARED listings, with an UPDATED row's changedFields naming exactly what moved. The days-since-added counter, the age and promotion labels (main label, label id, sticker, premium, spotlight), image lists, area statistics, view counter and similar-property lists are never compared, since they change on their own. Every returned row is billed as a dataset item; unchanged listings are suppressed (not returned, not billed) unless you turn on Emit unchanged. Max items counts returned rows. A listing is remembered as delivered only once its row was stored, so rows cut by Max items or the maximum cost limit come back on the next run. State is kept separately for each search setup (locations or URLs, channel, filters, details on or off). To continue one specific interrupted run instead, use Resume above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the search settings. |
emitUnchangedboolean | Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. These rows are returned in the dataset, so they are billed like any other returned row and count toward Max items. |
emitExpiredboolean | Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced after a complete scan of the tracked search, never when Max items, Max pages, a single listing URL or Resume cut it short. These rows are returned in the dataset, so they are billed like any other returned row and count toward Max items. |
ignoreFieldsForChangesarray | Optional. Top-level field names to exclude from UPDATED change detection, in addition to the built-in handling (days since added, age and promotion labels, images, area statistics, view counter and similar-property lists never trigger an UPDATED). Use this if another field turns out to be noisy in your setup. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
idIDurlURLchannelChanneldisplayPricePricepricePrice (num)priceQualifierQualifierbedroomsBedsbathroomsBathshumanisedPropertyTypeTypedisplayAddressAddresslatitudeLatlongitudeLngShow 32 more fields
agentNameAgentagentPhoneAgent phonedetailScrapedEnrichedpropertyTitlepropertyTitlemainLabelmainLabeldaysSinceAddedReduceddaysSinceAddedReducedcoverImagecoverImagesourceUrlsourceUrldescriptiondescriptionkeyInfokeyInfominimumAreaSqFtminimumAreaSqFtstampDutyLabelstampDutyLabelstationstationschoolschoolareaStatsareaStatsfloorplansfloorplanstotalViewstotalViewsnamenamecompanyNamecompanyNametelephonetelephoneaddressaddresspostcodepostcodecontactUrlcontactUrlsearchForSaleUrlsearchForSaleUrlsearchToRentUrlsearchToRentUrlhasSaleshasSaleshasLettingshasLettingsrankrankchangeTypechangeTypechangedFieldschangedFieldsfirstSeenAtfirstSeenAtlastSeenAtlastSeenAtExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": "12345678",
"url": "https://www.onthemarket.com/details/12345678/",
"channel": "FOR-SALE",
"propertyTitle": "3 bedroom detached house for sale",
"humanisedPropertyType": "Detached house",
"bedrooms": 3,
"bathrooms": 2,
"displayPrice": "£450,000",
"price": 450000,
"priceQualifier": "Guide price",
"displayAddress": "42 Sample Road, Sampleton, London, SW0 0AA",
"latitude": 51.5074,
"longitude": -0.1278,
"mainLabel": "New",
"daysSinceAddedReduced": "Added today",
"features": [
"Detached",
"Off-street parking",
"Garden"
],
"images": [
"https://media.onthemarket.com/sample/1.jpg",
"https://media.onthemarket.com/sample/2.jpg"
],
"description": "A well presented three bedroom detached house close to local amenities and transport links.",
"keyInfo": [
"Tenure: Freehold",
"Council tax band: D",
"EPC rating: C"
],
"station": [
{
"name": "Sample Park",
"distanceMiles": 0.4
}
],
"school": [
{
"name": "Sample Primary School",
"distanceMiles": 0.3
}
],
"agentName": "Sample Estates",
"agentCompanyName": "Sample Estates Ltd",
"agentPhone": "01632 960001",
"agentWebsiteUrl": "https://www.sample-estates.example",
"agentContactUrl": "https://www.onthemarket.com/agents/sample-estates/contact/",
"agentAddress": "1 Sample Parade, Sampleton, SW0 0AA",
"rawAgent": {
"id": 4321,
"name": "Sample Estates"
},
"detailScraped": true
}Ways to use this data
- Property portals and lead tools: mirror OnTheMarket's for-sale, to-rent and new-homes inventory into your own site, app or feed.
- Estate agent directories and prospecting: build a list of active agents, their listings and direct contact details by area.
- Market and pricing research: track asking prices, price qualifiers and stock levels across UK towns, postcodes and property types.
- House-hunting and relocation tools: feed a personal search (location, budget, bedrooms, property type) into a spreadsheet, bot or notification app.
- Academic and planning research: study housing supply, property mix and new-build activity across regions.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does OnTheMarket Scraper return?
The documented output for OnTheMarket Scraper includes id, url, channel, price, price (num), qualifier, beds and baths. Availability of each field depends on the source page and the selected mode.
How much does OnTheMarket Scraper cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new listings on a schedule?
Yes. Turn on Incremental mode (see above) and schedule the run: each run returns only new, updated or reappeared listings, and you are billed only for the rows it returns. To continue one specific interrupted run instead, paste its run ID into Resume from a previous run.
Why did a run return fewer listings than Max items?
A few honest reasons: Max pages stopped the page walk before Max items was reached; the search area genuinely has fewer results than Max items; or OnTheMarket did not recognise a location string, so the run tried a best-guess area name built from your text, and when that page did not exist the location was skipped with a note in the run log. Use the place names OnTheMarket's own search box suggests to avoid this. A listing that appears again under a later location or URL in the same run is only counted once, not treated as new.
Does this include estate agent reviews or ratings?
No. OnTheMarket does not publish estate-agent reviews, ratings or testimonials, so none are collected. The EPC energy rating shown in keyInfo is a property attribute, not an agent rating.
Can I use it with AI agents or automation platforms?
Yes. Call it from the API, the Scheduler, or any Apify integration (Make, Zapier, n8n, Google Sheets, webhooks), or from an MCP client through Apify's own MCP server.
