OnTheMarket Scraper - UK Property Data, Price & Tenure avatar

OnTheMarket Scraper - UK Property Data, Price & Tenure

Pricing

from $1.45 / 1,000 property returneds

Go to Apify Store
OnTheMarket Scraper - UK Property Data, Price & Tenure

OnTheMarket Scraper - UK Property Data, Price & Tenure

OnTheMarket.com listings for sale or to rent as clean JSON: price as a number with its meaning (sale or monthly rent, weekly rent from the page), tenure with lease years, bedrooms, bathrooms, features, coordinates, the agency and added/reduced status. Filters cost no extra requests. Unofficial.

Pricing

from $1.45 / 1,000 property returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Pull property listings from OnTheMarket.com — the UK's third-largest property portal — as clean JSON: the price as a number and what it means, tenure with the lease years remaining, bedrooms, bathrooms, features, coordinates and the agency, for sale or to rent, anywhere in the UK.

Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by OnTheMarket. All product names are trademarks of their respective owners.

No API key. Reads the same public pages a visitor sees.


Run it tomorrow and you only get what is new

Schedule this Actor with monitoringMode: true and each run returns only the listings it has not returned before. Not "here is everything again, please de-duplicate it yourself" — the Actor remembers what it already gave you, so a daily feed of a 4,000-listing search costs you the handful of new homes, not 4,000 rows every morning. You are never charged for the same property twice.

Listings your filters removed are remembered too, so widening a filter later does not resurrect them as false "new" listings. Listings that did not fit under your limit are not remembered, so they are still waiting on the next run instead of being silently lost.


Why this one is different

The price is a number that means what it says

OnTheMarket publishes the price as text — £550,000 on a sale, £1,550 pcm (£358 pw) on a rental. This Actor reads it into price and labels it: priceType: "sale" (median in the 86 sales measured: £650,000) or priceType: "monthly-rent" (median in the 28 rentals: £1,410), with rentPerWeek taken from OnTheMarket's own bracket rather than calculated. A listing whose price text carries no figure comes back as price: null with isPriceOnApplication: true — never a zero. OnTheMarket's qualifier (Guide price, Offers over, Shared ownership) is kept in priceQualifier.

Tenure is a value, and the lease length is another

OnTheMarket only states the tenure inside the feature bullets — Tenure: Leasehold (999 years remaining). This Actor lifts it out into tenure (FREEHOLD, LEASEHOLD, SHARE_OF_FREEHOLD) and leaseYearsRemaining (a number, on 35 of the 114 listings measured), and removes the bullet from features so it is not sold twice. The shortest lease in the sample was 59 years.

Advertising slots are not sold as properties

Up to two of the thirty cards on a list page are advertising slots (ad?: true), not listings. They are dropped before counting, so they are never delivered or charged.

No branch phone numbers

OnTheMarket's card data includes the marketing branch's telephone on every one of the 114 listings measured. This Actor returns the agency name and its branch page and leaves the phone out; UK phone numbers written into the address or features are removed too. Property data, not a contact list.

An unknown place is a 404, and it is reported as one

OnTheMarket answers a place it does not know with an honest 404. This Actor returns a no-such-search row that says how OnTheMarket spells its places — distinct from no-results, which is its own "zero listings" answer. OnTheMarket serves at most 34 pages per search and redirects anything beyond to its front page; that is treated as "no more pages", never as an empty search. A page that fails for any other reason is reported as unreadable, with a note saying which pages were delivered before it. All of these rows are free.

Filters run here, because OnTheMarket's robots.txt says so

OnTheMarket's robots.txt disallows the price, bedroom, type and radius query parameters and the /flat/, /apartment/ and *-bed- paths. This Actor requests only /for-sale/property/<place>/ or /to-rent/property/<place>/ plus ?page=N, and every filter — price, bedrooms, bathrooms, type, tenure, shared ownership, developments, recently added, keywords, agency — runs on the rows already fetched. Nothing extra is requested and nothing extra is charged. A property is never dropped for a value OnTheMarket did not publish.


Input

Either paste a search URL, or build one from the fields below.

FieldTypeDefaultDescription
searchUrlstringe.g. https://www.onthemarket.com/for-sale/property/london/. Query parameters and type paths are dropped
channelstringsalesale or rent
locationstringlondonA town (london, manchester, milton-keynes) or a postcode area (sw1a, m1)
maxListingsinteger201-950. One property = one row = one charged event. OnTheMarket serves at most 34 pages (about 950 properties) per search
maxPagesinteger0Hard cap on requests; 0 = decide from maxListings. 34 at most
useProxybooleanfalseOff by default — OnTheMarket answers Apify's network directly. Switches on by itself if blocked
keywords / keywordMatch / excludeKeywordsarray / string / arrayMatch on title, address, type, features, labels, price qualifier, tenure, added/reduced text and agency
agencyNamesarrayKeep only these agencies (partial match)
minPrice / maxPriceinteger0GBP. Sale total or rent per calendar month. A property with no price is kept
requirePricebooleanfalseDrop listings with no published price
minBedrooms / maxBedroomsinteger-1-1 = off. An unpublished count is kept
minBathroomsinteger-1-1 = off
propertyTypesarrayPartial match on OnTheMarket's words: Apartment, Flat, Terraced house, Detached house, Bungalow, Studio
tenureTypesarrayFREEHOLD, LEASEHOLD, SHARE_OF_FREEHOLD. An unpublished tenure is kept
excludeSharedOwnershipbooleanfalseDrop shared-ownership listings
excludeDevelopmentsbooleanfalseDrop developer listings that advertise a range of homes
recentlyAddedOnlybooleanfalseKeep only listings OnTheMarket flags as recently added
monitoringModebooleanfalseReturn only properties not returned on a previous run
resetMonitoringStatebooleanfalseOne-shot: forget what was already returned
{ "channel": "sale", "location": "manchester", "maxListings": 100,
"minBedrooms": 3, "maxPrice": 400000, "tenureTypes": ["FREEHOLD"], "excludeSharedOwnership": true, "excludeDevelopments": true }

Monitoring mode turns this into a daily feed

OnTheMarket lists in its own "recommended" order, so to catch new stock anywhere in the results set maxListings high (up to 950): every page is read, but only the listings not returned before are delivered and charged.

Schedule it and set monitoringMode: true: each run returns only the properties it has not returned before. Properties removed by your filters are remembered too, so changing a filter later does not resurrect them as false "new" listings — and properties that simply did not fit under maxListings, or were cut off by the run's charge limit, are not remembered, so they are still waiting for you on the next run rather than being silently lost.

Measured on 2026-09-05: 50,000+ properties for sale in London (OnTheMarket caps the count at 50,000); 2,919 to rent in Manchester; 53 for sale in SW1A.


Output

One row per property:

{
"source": "onthemarket.com",
"status": "ok",
"listingId": "20268229",
"title": "3 bedroom chalet for sale",
"address": "David Drive, Harold Park",
"url": "https://www.onthemarket.com/details/20268229/",
"searchedLocation": "Property & houses for sale in London",
"transactionType": "sale",
"propertyType": "Chalet",
"bedrooms": 3,
"bathrooms": 2,
"price": 550000,
"priceCurrency": "GBP",
"priceType": "sale",
"priceDisplay": "£550,000",
"priceQualifier": null,
"isPriceOnApplication": false,
"rentPerMonth": null,
"rentPerWeek": null,
"isSharedOwnership": false,
"tenure": "FREEHOLD",
"leaseYearsRemaining": null,
"features": ["Three Bedrooms", "Semi Detached", "Great Condition"],
"labels": [],
"latitude": 51.600282905437,
"longitude": 0.243168901765,
"addedOrReducedText": "Added yesterday",
"mainLabel": "Added yesterday",
"isRecentlyAdded": true,
"isReduced": false,
"isPremium": false,
"isExclusive": true,
"isSpotlight": false,
"hasVirtualTour": false,
"agencyName": "haart Estate Agents - Harold Wood",
"agencyUrl": "https://www.onthemarket.com/agents/branch/haart-estate-agents-harold-wood/",
"isDevelopment": false,
"developmentFeatures": [],
"mainImageUrl": "https://media.onthemarket.com/properties/20268229/1641899749/image-0-480x320.jpg",
"scrapedAt": "2026-09-05T08:36:33.126Z"
}

Measured across 114 live listings (113 unique) on 2026-09-05: id, title, address, url, type, price, coordinates, agency and added/reduced text on 114 of 114; bedrooms on 110; bathrooms on 107; tenure on 85; a lease length on 35; a price qualifier on 51. OnTheMarket does not publish a listing date on the list page — only the text Added today / Reduced yesterday / Added > 14 days and a recently-added flag, both passed through.

Rows that are never charged

statuswhen
no-resultsOnTheMarket reports zero properties for this search. That is its answer, not a failure
no-such-searchOnTheMarket has no page at that address (HTTP 404) - a place spelled differently from OnTheMarket's addresses. Not a claim that there is nothing there
no-filter-matchListings were read, but your filters removed all of them. The row says how many were read
no-new-listingsMonitoring mode: nothing new since the previous run
unreadableThe page could not be read, its embedded data was missing, or it claimed a total above zero while yielding nothing

Pricing

Pay per property returned. Rows that report an empty search, an unknown place, a filter that matched nothing, or a page that could not be read are not charged. A property that appears twice across pages is dropped before delivery, so it is never charged twice.


Notes

  • robots.txt was read in full on 2026-09-05. The User-agent: * section disallows agent contact pages, */flat/, */apartment/, *-bed- paths (except a few named allowances), student and overseas bedroom paths, and the query parameters max-price, min-price, min-bedrooms, max-bedrooms, prop-types, radius, sort-field, let-agreed, under-offer, new-home-flag=T, view=map…, direction, modal, more-like-this, bounding-box, online-viewings-first, exclusive-first. This Actor requests only the plain listing path with ?page=N.
  • Only public pages are read. No login, no API key.