# OpenRent Scraper \[Only $0.5/1K💰] | UK Rentals | Property Data (`ahmed_jasarevic/openrent-scraper`) Actor

Scrape OpenRent UK rental listings — rent PCM/PW, deposit, EPC, landlord response and photos. Cheapest on the Store: $0.0005 per listing detail, $0.00015 per search card.

- **URL**: https://apify.com/ahmed_jasarevic/openrent-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.48 / 1,000 listing details

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

## OpenRent Scraper - UK Rental Listings, Rents and Landlord Data

The **OpenRent Scraper** collects public UK rental listings from OpenRent. It returns rent per month and per week, deposit, address, postcode, coordinates, property type, bedrooms, bathrooms, EPC rating, furnishing, tenant preferences, transport links, landlord response data and photos.

Use it for rental market research, lettings lead generation, portfolio monitoring and relocation analysis. Start from an OpenRent search URL, a location and property type, or listing sitemaps, and choose between lightweight search cards and fully enriched property details.

### Main Use Cases for UK Rental Listings

- **Rental market research** - compare asking rents, deposits and property types across London boroughs and UK cities.
- **Lettings lead generation** - find landlords and letting agents with public response rates and contact context.
- **Portfolio monitoring** - track new listings, price changes and availability in a target postcode.
- **Relocation analysis** - compare commute links, EPC ratings and furnishing across candidate neighborhoods.
- **Investment screening** - estimate rent bands and deposit requirements before a deeper property review.
- **Housing market dashboards** - feed rent, bedroom and EPC fields into a BI tool or map.
- **Comparable research** - collect a reproducible set of listings for a neighborhood or property type.

### How It Works

![OpenRent UK rental listings becoming structured rows with rents, deposits, EPC ratings and transport links](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-openrent-scraper.webp)

Provide an OpenRent search URL in `startUrls`, or let the Actor build one from `locations` and `propertyType`. Search pages are crawled up to `maxCrawlDepth`, and each detail page is opened when `includeDetails` is true. `maxItems` is the overall listing budget, while `maxRequestsPerStartUrl` protects each starting search from runaway pagination.

With `includeDetails` enabled, the parser reads the property page for the full address, postcode, coordinates, rent per month and per week, deposit, bedrooms, bathrooms, maximum tenants, available date, minimum tenancy and tenant preferences. It also captures furnishing, EPC rating, features, landlord name, response rate, response time and a long description.

Transport links are extracted as structured entries with a station or stop name, type and walking time. Photos and the static map image are kept as URL arrays or single URLs so they can be downloaded separately. `isLondon` marks listings in the London dataset, and `source` records which OpenRent surface produced the row.

When `includeDetails` is false, the Actor saves lightweight search cards with the title, rent, deposit, badges and thumbnail but without the full landlord, EPC, transport and photo data. This is faster for broad market counts. `includeSitemapUrls` can add listing sitemaps for wider discovery, bounded by `sitemapCount`.

The free preview stops after 10 fully scraped listing details. Some listings omit the deposit, minimum tenancy or landlord response data, and those fields remain null. OpenRent pages change over time, so keep `url`, `listingId` and `scrapedAt` with every row and compare snapshots instead of assuming a listing is still live.

### Input

Use a search URL for a reproducible run, or set a location and property type to let the Actor build the search. Detail mode adds the fields needed for property-level analysis.

| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
| `startUrls` | `array` | `No` | `London search` | OpenRent search, listing or sitemap URLs. |
| `locations` | `array` | `No` | `Empty` | One or more UK locations used to build search URLs when startUrls is empty. |
| `propertyType` | `string` | `No` | `Empty` | Filter for flats, houses or rooms. |
| `includeSitemapUrls` | `boolean` | `No` | `false` | Add OpenRent listing sitemaps as discovery sources. |
| `sitemapCount` | `integer` | `No` | `2` | Number of sitemap files to scan when sitemap discovery is enabled. |
| `maxItems` | `integer` | `No` | `50` | Maximum listings saved in one run. |
| `maxRequestsPerStartUrl` | `integer` | `No` | `60` | Maximum detail requests triggered by one start URL. |
| `includeDetails` | `boolean` | `No` | `true` | Open each listing for rent, EPC, landlord, transport and photo data. |
| `maxCrawlDepth` | `integer` | `No` | `2` | Maximum pagination depth from each starting URL. |
| `proxy` | `object` | `No` | `No proxy` | Optional Apify Proxy configuration for larger or repeated runs. |

Start with a single location or search URL and `maxItems` around 20 to validate coverage. A higher `maxItems` does not guarantee more rows if the search has fewer listings. The free preview is limited to 10 detailed listings, and detail mode uses more requests than card mode.

### Output

The default dataset contains one row per listing. Pricing, property facts, location, landlord signals, media and provenance are separated for analysis.

| Field group | Fields | What you get |
|---|---|---|
| Identity | `url`, `listingId`, `title`, `source` | Canonical listing URL, OpenRent listing ID, title and source surface. |
| Pricing | `rentPcm`, `rentPw`, `deposit`, `billsIncluded` | Monthly and weekly rent, deposit and whether bills are included. |
| Property | `propertyType`, `bedrooms`, `bathrooms`, `maxTenants`, `furnishing`, `epcRating`, `features` | Property type, room counts, furnishing, EPC and feature flags. |
| Location | `address`, `postcode`, `latitude`, `longitude`, `transportLinks`, `transportSummary`, `isLondon` | Address, postcode, coordinates, nearby transport and London flag. |
| Landlord and availability | `landlordName`, `landlordResponseRate`, `landlordResponseTime`, `availableFrom`, `minimumTenancy`, `tenantPreferences` | Public landlord signals, availability date, tenancy terms and tenant preferences. |
| Media and provenance | `photos`, `mapImageUrl`, `description`, `availabilityBadge`, `scrapedAt` | Photo URLs, map image, description, badge and observation timestamp. |

Deposit, minimum tenancy, landlord response data and some transport fields can be null when OpenRent does not publish them. `rentPw` is a derived weekly figure from the listing, not a separate negotiation. Use `listingId` as the stable key and keep both rent fields because UK lettings comparisons often use different periods.

### Pricing

Pricing is pay-per-event with separate events for full listing details and lightweight search cards. There is no actor-start event in the current pricing configuration.

| Event | FREE | BRONZE | SILVER | GOLD+ |
|---|---|---|---|---|
| Listing detail | $0.0005 | $0.00049 | $0.000485 | $0.00048 |
| Search card | $0.00015 | $0.00014 | $0.000135 | $0.00013 |

A fully enriched listing costs **$0.50 per 1,000** on FREE, falling to **$0.48 per 1,000** on GOLD+. A search card costs **$0.15 per 1,000** on FREE and **$0.13 per 1,000** on GOLD+. A 1,000-listing detail run is therefore about $0.50 before compute, while the same volume in card mode is about $0.15. The free preview is limited to 10 detailed listings.

### Example Input

```json
{
  "startUrls": [
    { "url": "https://www.openrent.co.uk/properties-to-rent/london" }
  ],
  "locations": [],
  "propertyType": "flats",
  "includeSitemapUrls": false,
  "maxItems": 20,
  "maxRequestsPerStartUrl": 60,
  "includeDetails": true,
  "maxCrawlDepth": 2,
  "proxy": { "useApifyProxy": false }
}
```

This searches London flats, keeps up to 20 listings and opens each detail page. Sitemap discovery stays off so the run remains focused on the supplied search.

### Example Output

```json
{
  "url": "https://www.openrent.co.uk/property-to-rent/london/studio-flat-craven-street-wc2n/2870098",
  "listingId": "2870098",
  "title": "Studio Flat, Craven Street, WC2N",
  "address": "London, WC2N",
  "postcode": "WC2N 5NP",
  "latitude": 51.50738,
  "longitude": -0.1244289,
  "propertyType": "Studio",
  "bedrooms": 1,
  "bathrooms": 1,
  "maxTenants": 1,
  "rentPcm": 2700,
  "rentPw": 623.08,
  "deposit": 2700,
  "billsIncluded": true,
  "availableFrom": "14 December, 2026",
  "furnishing": "Furnished",
  "epcRating": "C",
  "landlordName": "Naza B.",
  "landlordResponseRate": "99%",
  "landlordResponseTime": "Within 2 Days",
  "transportLinks": [
    { "name": "Charing Cross", "type": "Underground", "walkTime": "~2 min. walk" }
  ],
  "isLondon": true,
  "scrapedAt": "2026-10-27T17:37:59.592Z"
}
```

This is a trimmed real record. Photos, features, tenant preferences and the full description are omitted here but appear in the dataset.

### Integrations and Automation

Run the Actor from the Apify API, Apify MCP, a scheduled task, Zapier, Make, n8n or your own data pipeline. Export JSON, CSV, Excel, XML or HTML, or load rows into a property database, Google Sheets, Airtable, a BI warehouse or a webhook.

Use `listingId` as the stable key and retain `url` for provenance. Normalize `rentPcm` and `rentPw` before comparing neighborhoods, and keep `deposit` separate because it may represent a different number of weeks. Join transport links by listing ID rather than flattening arrays into a single string.

For market monitoring, schedule a daily or weekly run and compare rent, availability and landlord response fields between snapshots. Keep `scrapedAt` with every row so a withdrawn or re-priced listing has a clear timeline. Card mode is a cheaper way to detect new listings before enriching selected rows.

### Related Actors

- [Zoopla Scraper](https://apify.com/ahmed_jasarevic/zoopla-scraper) - UK property listings, sold prices and agent data.
- [OnTheMarket Scraper](https://apify.com/ahmed_jasarevic/onthemarket-scraper) - UK rental and sale listings with agent details.
- [Rightmove Scraper](https://apify.com/ahmed_jasarevic/rightmove-scraper) - UK property listings and sold price research.

### FAQ

#### Does OpenRent require a login?

No. The Actor reads public rental search and listing pages without logging in. It does not contact landlords or submit enquiries.

#### What is the difference between detail and card mode?

Detail mode opens each listing and returns the full address, EPC, landlord, transport and photo data. Card mode returns the lighter search-result fields and costs less.

#### Why is the deposit missing?

Some OpenRent listings do not publish a deposit or tenancy term. The field remains null rather than being estimated from rent.

#### Can I scrape multiple cities?

Yes. Add several locations or supply multiple search URLs. `maxRequestsPerStartUrl` limits detail requests per starting URL.

#### How many listings can the free preview return?

The free preview stops after 10 fully scraped listing details. Paid runs are limited by `maxItems`, the search results and normal platform limits.

#### Are sitemap URLs required?

No. Sitemap discovery is optional and useful for broad coverage. For a reproducible city or property-type run, a normal search URL is usually better.

### For AI Agents and LLM Apps

The Actor returns structured UK rental listings with rents, property facts, location, transport and landlord signals, suitable for market analysis and enrichment.

- One row represents one public OpenRent listing. Use `listingId` as the key and `scrapedAt` as the observation time.
- `rentPcm` and `rentPw` are different representations of the asking rent; do not sum them or treat both as independent prices.
- `deposit`, `minimumTenancy`, `landlordResponseRate` and some transport fields can be null. Missing data is not a zero value.
- `transportLinks` and `photos` are arrays. Preserve them as arrays or explode them deliberately in a warehouse.
- The free preview is limited to 10 detailed listings; search-card events are priced separately from detail events.

### Legal and Compliance

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by OpenRent. It reads publicly visible rental listings for legitimate market research and lettings analysis. The source platform terms and applicable housing law still apply.

Rental listings can include personal data such as a landlord name and contact context. Use the data for a lawful purpose, keep a documented basis where required, honor deletion and opt-out requests, and do not use it for discriminatory housing practices or unsolicited bulk contact.

### SEO Keywords

OpenRent scraper, UK rental listings, OpenRent API alternative, London rent data, UK property scraper, rental market data, landlord leads, OpenRent dataset, UK lettings data, rent prices UK, EPC data scraper, property listing scraper, OpenRent JSON export, rental comps, flat listings London, lettings agency data, UK housing market, rental yield research, OpenRent property data, tenant preferences data

# Actor input Schema

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

OpenRent search URLs (https://www.openrent.co.uk/properties-to-rent/<location>), property detail URLs (https://www.openrent.co.uk/property-to-rent/<city>/<slug>/<id>) or listing sitemap URLs. Search pages are paginated and their listings are expanded into full detail records; detail URLs are parsed directly.

## `locations` (type: `string`):

Comma-separated location names or postcodes to build search URLs from, e.g. "manchester, birmingham, BS1 4QA". A URL slug is generated for each. Ignored if Start URLs are supplied.

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

Optional OpenRent path filter appended to generated location search URLs.

## `includeSitemapUrls` (type: `boolean`):

Adds https://www.openrent.co.uk/sitemap-listings-1.xml and -2.xml (50,000 listing URLs in total) as start URLs. Useful for broad national coverage of already-listed properties.

## `sitemapCount` (type: `integer`):

How many of the listing sitemaps to read (1 or 2).

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

Maximum number of full property detail records to produce, and the only item limit — the crawler pages through search results (?skip=N, 20 per page) until this many listings are collected or the results run out. Free accounts are capped at 10 regardless of this value.

## `maxRequestsPerStartUrl` (type: `integer`):

Safety cap on how many detail pages are fetched from a single search URL.

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

On (default): visits every property page and outputs one complete listing per row, billed as a 'Listing detail'. Off: never opens the property pages and outputs only the lightweight search-result cards (title, rent pcm/pw, badges, thumbnail, distance), billed as a 'Search card' at a lower price. Landlord, EPC, transport and full photo data are missing when off.

## `maxCrawlDepth` (type: `integer`):

Crawlee crawl depth. 0 = only the start URLs, 1 = also search results, 2 = also detail pages.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.openrent.co.uk/properties-to-rent/london"
    }
  ],
  "locations": "",
  "propertyType": "",
  "includeSitemapUrls": false,
  "sitemapCount": 2,
  "maxItems": 50,
  "maxRequestsPerStartUrl": 60,
  "includeDetails": true,
  "maxCrawlDepth": 2,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.openrent.co.uk/properties-to-rent/london"
        }
    ],
    "locations": "",
    "propertyType": "",
    "sitemapCount": 2,
    "maxItems": 50,
    "maxRequestsPerStartUrl": 60,
    "maxCrawlDepth": 2,
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/openrent-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 = {
    "startUrls": [{ "url": "https://www.openrent.co.uk/properties-to-rent/london" }],
    "locations": "",
    "propertyType": "",
    "sitemapCount": 2,
    "maxItems": 50,
    "maxRequestsPerStartUrl": 60,
    "maxCrawlDepth": 2,
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/openrent-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 '{
  "startUrls": [
    {
      "url": "https://www.openrent.co.uk/properties-to-rent/london"
    }
  ],
  "locations": "",
  "propertyType": "",
  "sitemapCount": 2,
  "maxItems": 50,
  "maxRequestsPerStartUrl": 60,
  "maxCrawlDepth": 2,
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/openrent-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/openrent-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/847hvXJ3jj6s2ArPQ/builds/D2JDNw4PIoxmpr3R2/openapi.json
