# Openrent Property Search Scraper (`stealth_mode/openrent-property-search-scraper`) Actor

Scrape rental property listings from OpenRent.co.uk instantly. Collect rent prices, descriptions, images, availability dates, and 18+ fields per property — perfect for real estate investors, market researchers, and property aggregators analyzing the UK rental market.

- **URL**: https://apify.com/stealth\_mode/openrent-property-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## OpenRent Property Scraper: Extract UK Rental Listings Data

---

### What Is OpenRent.co.uk?

OpenRent.co.uk is the UK's leading property portal for rental listings, hosting hundreds of thousands of properties available for rent across England, Scotland, Wales, and Northern Ireland. With particular strength in major markets like Greater London, Edinburgh, and Manchester, OpenRent connects tenants with landlords and property managers. Collecting rental data manually is tedious and error-prone — the **OpenRent Property Scraper** automates this process, delivering structured rental property data in seconds.

---

### Overview

The **OpenRent Property Scraper** extracts comprehensive rental property listings from OpenRent search results, transforming unstructured HTML into clean, structured records. It is ideal for:

- **Real estate investors** tracking rental yields and market supply
- **Property researchers** analyzing rent trends by location and type
- **Data analysts** building datasets for market intelligence reports
- **Aggregator platforms** feeding rental data into property comparison sites
- **Market consultants** studying neighborhood demand and pricing

Key features include support for location-based search filtering, flexible item limits per URL, and robust error handling to ensure uninterrupted collection even when individual URLs fail.

---

### Input Format

The scraper accepts a JSON configuration with three main parameters:

```json
{
  "urls": [
    "https://www.openrent.co.uk/properties-to-rent/greater-london?term=Greater%20London&&viewingProperty=59"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | Array of strings | Direct links to OpenRent property list pages. Use search filters (location, price, property type) to narrow results. |
| `ignore_url_failures` | Boolean | If `true`, skips failed URLs and continues scraping. Recommended for bulk operations. |
| `max_items_per_url` | Integer | Maximum number of properties to extract per URL (e.g., `200`). Higher values collect more data per run. |

**URL examples:**

- `https://www.openrent.co.uk/properties-to-rent/greater-london`
- `https://www.openrent.co.uk/properties-to-rent/london/flats?term=London`

> **Tip:** Build URLs directly from OpenRent's search interface, then paste them into the scraper for consistent, filtered results.

***

### Output Format

**Sample output**

```json
{
  "i": 0,
  "id": 2874825,
  "let_agreed": false,
  "title": "1 Bed Flat, Craven Street, WC2N",
  "description": "Beautiful 1-Bedroom Flat in Central London—Victorian Charm and Modern Comfort This lovely one-bedroom flat is set in a clas                           ",
  "image_url": "//imagescdn.openrent.co.uk/listings/2874825/o_1jn216u0f183111ls168q15751blu3.JPG_homepage.JPG",
  "details": [
    "1 Bed",
    "1 Bath",
    "Furnished"
  ],
  "distance": 0.0,
  "commute_time": 0.0,
  "rent_per_month": 2650.0,
  "rent_per_week": 611.5385085798853,
  "last_updated": "around 1 month ago",
  "is_new": false,
  "is_multi_room": false,
  "max_room_rent_per_month": 0.0,
  "max_room_rent_per_week": 0.0,
  "property_type_description": "Flat",
  "available_date": "15 MAY",
  "from_url": "https://www.openrent.co.uk/properties-to-rent/greater-london?term=Greater%20London&&viewingProperty=3"
}
```

Each scraped property returns a detailed record with 18+ fields:

#### Identification & Metadata

| Field | Meaning | Example |
|---|---|---|
| `I` | Index number in the result set | `1`, `2`, `3` |
| `ID` | Unique OpenRent identifier for the property | `abc123def456` |
| `Let Agreed` | Whether the property has been let to a tenant | `true` / `false` |
| `Is New` | Whether the listing is newly posted | `true` / `false` |

#### Property Description

| Field | Meaning |
|---|---|
| `Title` | Property headline (e.g., "2-bed flat in Shoreditch") |
| `Description` | Full property description and amenities |
| `Property Type Description` | Category of property (e.g., "Flat", "House", "Studio") |
| `Details` | Key features: bedrooms, bathrooms, furnished status |
| `Image URL` | Primary listing image URL (for download or display) |

#### Pricing & Rental Terms

| Field | Meaning |
|---|---|
| `Rent Per Month` | Monthly rent in GBP for the entire property |
| `Rent Per Week` | Weekly rent in GBP for the entire property |
| `Max Room Rent Per Month` | Highest per-room monthly rent (for house shares) |
| `Max Room Rent Per Week` | Highest per-room weekly rent (for house shares) |
| `Is Multi Room` | Whether the property is offered as multiple rooms |

#### Location & Availability

| Field | Meaning |
|---|---|
| `Distance` | Distance from search origin point (in miles or km) |
| `Commute Time` | Estimated travel time to a specified location |
| `Available Date` | Date when the property becomes available for tenancy |
| `Last Updated` | Timestamp of the most recent listing update |

***

### How to Use

1. **Build search URLs** — Visit OpenRent.co.uk, apply filters (location, rent range, property type), then copy the resulting URL.
2. **Prepare input** — Paste one or more filtered URLs into the `urls` array. For example: `"https://www.openrent.co.uk/properties-to-rent/greater-london?term=Greater%20London"`
3. **Set limits** — Choose `max_items_per_url` based on your needs (typical range: `50–200`).
4. **Enable resilience** — Set `ignore_url_failures: true` for large-scale scrapes to handle temporary URL issues.
5. **Run the scraper** — Execute the job and monitor progress in the run logs.
6. **Download results** — Export data as JSON, CSV, or Excel for analysis.

**Best practices:**

- Narrow search URLs to specific regions and price ranges to collect targeted data.
- Use `ignore_url_failures: true` when scraping multiple URLs simultaneously.
- Check `Last Updated` field to identify recently refreshed listings.
- Respect OpenRent's terms of service regarding data reuse.

***

### Use Cases & Business Value

- **Investment analysis:** Compare rental yields across neighborhoods and property types
- **Market trends:** Track how rent prices fluctuate monthly or seasonally by location
- **Competitive intelligence:** Monitor competitor property portfolios and pricing strategies
- **Tenant research:** Analyze availability and rent affordability in specific postcodes
- **Portfolio management:** Aggregate rental data from multiple search parameters into a centralized database

The OpenRent Property Scraper eliminates days of manual browsing, delivering hundreds of property records in minutes — enabling faster decision-making for investors, researchers, and industry professionals.

***

### Conclusion

The **OpenRent Property Scraper** is a powerful tool for anyone needing structured UK rental property data at scale. Whether analyzing market trends, building property databases, or monitoring investment opportunities, this scraper delivers clean, actionable data with 18+ fields per listing. Start today and unlock insights from one of the UK's largest rental property databases.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.openrent.co.uk/properties-to-rent/greater-london?term=Greater%20London&&viewingProperty=59"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.openrent.co.uk/properties-to-rent/greater-london?term=Greater%20London&&viewingProperty=59"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/openrent-property-search-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 = {
    "urls": ["https://www.openrent.co.uk/properties-to-rent/greater-london?term=Greater%20London&&viewingProperty=59"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/openrent-property-search-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.openrent.co.uk/properties-to-rent/greater-london?term=Greater%20London&&viewingProperty=59"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/openrent-property-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/openrent-property-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Openrent Property Search Scraper",
        "description": "Scrape rental property listings from OpenRent.co.uk instantly. Collect rent prices, descriptions, images, availability dates, and 18+ fields per property — perfect for real estate investors, market researchers, and property aggregators analyzing the UK rental market.",
        "version": "0.0",
        "x-build-id": "H7fMgx4unesCA2RPh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~openrent-property-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-openrent-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~openrent-property-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-openrent-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~openrent-property-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-openrent-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the property list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
