# OnTheMarket Scraper — UK Property for Sale & Rent (`hipersoft/onthemarket-scraper`) Actor

Scrape UK property listings from OnTheMarket.com: price, bedrooms, bathrooms, address, postcode, coordinates, photos, agent name & phone, tenure, council tax, floorplans and description for homes for sale or to rent. Big searches split by price. Export CSV/JSON.

- **URL**: https://apify.com/hipersoft/onthemarket-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00075 / property listing

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## OnTheMarket Scraper: UK Property for Sale and to Rent

**OnTheMarket Scraper** extracts property listings from **OnTheMarket.com**, one of the UK's biggest property portals, with hundreds of thousands of **houses, flats, bungalows and land** for sale and to rent across **England, Scotland, Wales and Northern Ireland**. Every listing includes the **price, bedrooms, bathrooms, property type, address, latitude and longitude, photos, estate agent name and phone number**, and the "added" or "reduced" status. Turn on **Full property details** to also get the **full description, postcode, tenure, council tax band, broadband speed, key features, floorplans, EPC chart, virtual tours, and the nearest stations and schools**. Search **London, Manchester, Birmingham, Bristol, Leeds, Edinburgh** or any UK town, county or postcode district, filter by **price and bedrooms**, and export to **CSV, Excel or JSON**. Big searches are **split automatically by price**, so you are not limited to the roughly 1,000 results the site shows per search.

### What does OnTheMarket Scraper do?

- 🇬🇧 **Any UK location**: towns, cities, counties and postcode districts (SW11, M1, BS8…).
- 🏠 **For sale or to rent**: sale prices or monthly rents (pcm, with the weekly figure).
- 🏡 **Property types**: all property, houses, flats & apartments, bungalows and land.
- 💷 **Price and bedroom filters**: min/max price and min/max bedrooms.
- 📍 **Address and map coordinates** (latitude/longitude) for every listing.
- 📞 **Estate agent details**: branch name, phone number, branch page and logo.
- 🔖 **Status flags**: reduced, recently added, premium, plus the "Added < 7 days" / "Reduced" text.
- 📝 **Full details (optional)**: description, postcode, tenure, council tax band, broadband, key features, all photos, floorplans, EPC graph, virtual tours, nearest stations and schools.
- 🔗 **Paste OnTheMarket links** to reuse any search and filters from the site.
- 📈 **Automatic price splitting** for big areas like London to collect tens of thousands of listings.

### What data can you scrape from OnTheMarket?

| Field | Description |
|---|---|
| ID, title, link | Listing ID, headline (e.g. "4 bedroom terraced house for sale") and page |
| Price | Sale price or monthly rent (£), price text and qualifier ("Guide price", "Offers over") |
| Layout | Bedrooms, bathrooms and property type |
| Location | Address, postcode\*, latitude and longitude |
| Status | Reduced, recently added, premium, under offer / let agreed |
| Photos | Main photo and full gallery, floorplans\*, EPC graph\* |
| Agent | Branch name, phone, branch page, logo, address\*, company\*, group\*, website\* |
| Property facts\* | Tenure, council tax band, broadband speed, key features, labels (e.g. "Chain-free") |
| Neighbourhood\* | Nearest stations and schools with distances |
| Description\* | Full listing description |

\* With **Full property details** turned on.

### Use cases for UK property data

- **Property investors**: compare asking prices and rents across UK towns and postcodes to spot yield.
- **Estate agents**: monitor competitor stock, new instructions and price reductions in your patch.
- **Lettings market analysis**: track rents in London, Manchester, Birmingham and student cities.
- **Proptech and valuation (AVM) models**: feed geocoded listing data into pricing models.
- **Mortgage brokers and conveyancers**: find fresh listings and the agents behind them.
- **Relocation services and buyers**: shortlist homes by budget, bedrooms and nearest station.
- **Housing research**: analyse affordability, tenure mix and supply by region.

### How to scrape OnTheMarket

1. Click **Try for free** to open OnTheMarket Scraper in Apify Console.
2. Choose **For sale** or **To rent**, a **property type**, and enter **locations**.
3. Optionally set **price** and **bedroom** filters, **sort order**, and **Full property details**, or paste **OnTheMarket links**.
4. Set **Max listings** and click **Start**.
5. Download the listings as **CSV, Excel or JSON**.

### Input

#### Example input

```json
{
  "searchType": "for-sale",
  "locations": ["Bristol", "SW11"],
  "propertyType": "houses",
  "minBedrooms": 3,
  "maxPrice": 900000,
  "sortBy": "newest",
  "includeDetails": true,
  "maxItems": 500
}
```

| Field | Description |
|---|---|
| **Buy or rent** | For sale or to rent. |
| **Locations** | UK towns, cities, counties or postcode districts, one search each. |
| **Property type** | All property, houses, flats & apartments, bungalows or land. |
| **Minimum / Maximum price** | Sale price, or monthly rent for rentals (£). |
| **Minimum / Maximum bedrooms** | Bedroom range. |
| **Sort by** | Recommended, newest, lowest or highest price. |
| **Include under offer / let agreed** | Also return homes already under offer or let agreed. |
| **Full property details** | Adds description, postcode, tenure, council tax, floorplans and more. |
| **OnTheMarket search links** | Any OnTheMarket results link. |
| **Max listings** | Stop after this many (0 = no limit). |

### Output

#### Listing example (with full details)

```json
{
  "id": "20240478",
  "url": "https://www.onthemarket.com/details/20240478/",
  "title": "4 bedroom terraced house for sale",
  "address": "Jedburgh Street, Battersea, London, SW11",
  "channel": "for-sale",
  "price": 1275000,
  "pricePeriod": null,
  "priceText": "£1,275,000",
  "priceQualifier": "Guide price",
  "currency": "GBP",
  "propertyType": "Terraced house",
  "bedrooms": 4,
  "bathrooms": 2,
  "label": "Spotlight Property",
  "addedOrReduced": "Added > 14 days",
  "reduced": false,
  "recentlyAdded": false,
  "premium": false,
  "features": ["Tenure: Freehold", "Four bedroom home", "Potential to extend (Subject To Consents)", "No onward chain"],
  "latitude": 51.462251,
  "longitude": -0.152384,
  "imageUrl": "https://media.onthemarket.com/properties/20240478/1641023389/image-0-1024x1024.jpg",
  "images": ["https://media.onthemarket.com/properties/20240478/1641023389/image-0-1024x1024.jpg", "…"],
  "hasVirtualTour": false,
  "agentName": "Savills - Northcote Road",
  "agentPhone": "020 8022 7407",
  "agentId": 22358,
  "agentUrl": "https://www.onthemarket.com/agents/branch/savills-northcote-road/",
  "agentLogoUrl": "https://media.onthemarket.com/agents/companies/4/260326114016587/logo-190x100.png",
  "postcode": "SW11 5QA",
  "description": "Charming four bedroom family home, running off the north side of Clapham Common.\nDescription\nThis much-loved family home of 40 years offers well-proportioned accommodation with exciting potential to e…",
  "tenure": "Freehold",
  "councilTaxBand": "G",
  "broadband": { "type": "ultra-fast", "maxDownloadMbps": 1000, "maxUploadMbps": 1000 },
  "keyFeatures": ["Four bedroom home", "Potential to extend (Subject To Consents)", "No onward chain", "Sought after location, running off Clapham Common North Side", "Well placed for local schools", "EPC Rating = D"],
  "propertyLabels": ["Chain-free"],
  "epcGraphUrl": "https://media.onthemarket.com/properties/20240478/1641023389/epc-graph-0-1024x1024.jpg",
  "floorplans": ["https://media.onthemarket.com/properties/20240478/1641023389/floor-plan-0-1024x1024.jpg"],
  "virtualTours": [],
  "nearestStations": [
    { "name": "Clapham Common Underground Station", "distance": "0.6mi." },
    { "name": "Clapham South Underground Station", "distance": "0.7mi." },
    { "name": "Clapham Junction Station", "distance": "0.8mi." }
  ],
  "nearestSchools": [
    { "name": "Eaton House the Manor School", "distance": "0.1mi." },
    { "name": "Parkgate House School", "distance": "0.1mi." },
    { "name": "Belleville Wix Academy", "distance": "0.1mi." }
  ],
  "newHome": false,
  "listingStatus": "live",
  "views": "1970",
  "agentAddress": "99 Northcote Road, Northcote Road, SW11 6PL",
  "agentCompany": "Savills",
  "agentGroup": "Savills",
  "agentWebsite": "https://www.savills.co.uk/estate-agents/savills-northcote-road.aspx",
  "search": "for-sale property SW11"
}
```

#### Rental example (fast mode)

```json
{
  "title": "2 bedroom apartment to rent",
  "address": "6a St Ann's Square., Manchester M2",
  "channel": "to-rent",
  "price": 1370,
  "pricePeriod": "pcm",
  "priceText": "£1,370 pcm (£316 pw)",
  "agentName": "Marni Designs - Manchester"
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `id`, `url`, `title` | string | Listing. |
| `address`, `postcode` | string | Location. |
| `latitude`, `longitude` | number | Map coordinates. |
| `channel` | string | for-sale or to-rent. |
| `price`, `pricePeriod`, `priceText`, `priceQualifier`, `currency` | mixed | Price (rents per calendar month). |
| `propertyType`, `bedrooms`, `bathrooms` | mixed | Layout. |
| `label`, `addedOrReduced`, `reduced`, `recentlyAdded`, `premium` | mixed | Status. |
| `features`, `keyFeatures`, `propertyLabels` | array | Highlights. |
| `imageUrl`, `images`, `floorplans`, `epcGraphUrl`, `virtualTours`, `hasVirtualTour` | mixed | Media. |
| `tenure`, `councilTaxBand`, `broadband` | mixed | Property facts. |
| `nearestStations`, `nearestSchools` | array | Neighbourhood. |
| `description` | string | Full description. |
| `agentName`, `agentPhone`, `agentId`, `agentUrl`, `agentLogoUrl`, `agentAddress`, `agentCompany`, `agentGroup`, `agentWebsite` | mixed | Estate agent. |
| `newHome`, `listingStatus`, `views` | mixed | Extra info. |
| `search`, `scrapedAt` | string | Source info. |

### How much does it cost to scrape OnTheMarket?

OnTheMarket Scraper uses **pay-per-listing** pricing: a small fixed price per listing, with automatic discounts on higher Apify plans. See the **Pricing** tab for the exact price. Fast mode (without full details) collects about a thousand listings in a minute or two.

### More property data

- [Rightmove Scraper](https://apify.com/hipersoft/rightmove-scraper): the other big UK property portal.
- [SpareRoom Scraper](https://apify.com/hipersoft/spareroom-scraper): UK flatshares and rooms to rent.
- [UK Food Hygiene Scraper](https://apify.com/hipersoft/uk-food-hygiene-scraper): UK business hygiene ratings.

### FAQ

**How many listings can I get?**
OnTheMarket shows about 1,000 listings per search. When no price filter is set, the scraper splits big searches into price bands automatically, so you can collect all of London or any large county.

**Can I scrape rentals?**
Yes. Set **Buy or rent** to **To rent**. Prices are monthly rents (pcm), and `priceText` also shows the weekly figure.

**Can I search by postcode?**
Yes. Enter postcode districts such as **SW11**, **M1** or **BS8** as locations.

**Do I get the estate agent's phone number?**
Yes. Every listing includes the branch name and phone number. With full details you also get the branch address, company, group and website.

**Can I use my own filters?**
Yes. Set up a search on OnTheMarket, copy the link and paste it into **OnTheMarket search links**.

**What formats can I export?**
CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.

**Can I integrate OnTheMarket Scraper with other apps?**
OnTheMarket Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JS/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

**Is it legal to scrape OnTheMarket?**
The scraper only collects publicly listed property offers. You are responsible for using the data in line with OnTheMarket's terms and UK GDPR, especially for agent contact details.

### Related Actors

- [Rightmove Scraper](https://apify.com/hipersoft/rightmove-scraper)
- [SpareRoom Scraper](https://apify.com/hipersoft/spareroom-scraper)

### Notes

Original clean-room implementation. Returns only public data. Not affiliated with OnTheMarket.

# Actor input Schema

## `searchType` (type: `string`):

Homes for sale or homes to rent.

## `locations` (type: `array`):

UK towns, cities, counties or postcode districts, e.g. London, Manchester, Bristol, Kent, SW11, M1. Each location is a separate search.

## `propertyType` (type: `string`):

Type of property.

## `minPrice` (type: `integer`):

Sale price, or monthly rent (pcm) for rentals.

## `maxPrice` (type: `integer`):

Sale price, or monthly rent (pcm) for rentals.

## `minBedrooms` (type: `integer`):

Only homes with at least this many bedrooms.

## `maxBedrooms` (type: `integer`):

Only homes with at most this many bedrooms.

## `sortBy` (type: `string`):

Order of results.

## `includeUnderOffer` (type: `boolean`):

Also include homes that are under offer, sold STC or let agreed.

## `includeDetails` (type: `boolean`):

Also collect the full description, postcode, tenure, council tax band, broadband speed, key features, all photos, floorplans, EPC chart, virtual tours, nearest stations and schools, and agent address and website. Slower.

## `startUrls` (type: `array`):

Optional. Paste OnTheMarket search-results links with your own filters. When set, the search fields above are ignored.

## `maxItems` (type: `integer`):

Stop after this many listings. 0 means no limit.

## `proxyConfiguration` (type: `object`):

Not required for normal use.

## Actor input object example

```json
{
  "searchType": "for-sale",
  "locations": [
    "Manchester"
  ],
  "propertyType": "property",
  "sortBy": "recommended",
  "includeUnderOffer": false,
  "includeDetails": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "Manchester"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/onthemarket-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locations": ["Manchester"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/onthemarket-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "Manchester"
  ],
  "maxItems": 50
}' |
apify call hipersoft/onthemarket-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/onthemarket-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JyO2PBDVkyXKZ2lwr/builds/ToQSXpS7zDk02zbsP/openapi.json
