# OpenRent Property Scraper 🏠 (`shahidirfan/openrent-property-scraper`) Actor

Extract rental property listings from OpenRent with automated data collection. Get property details, prices, locations, and landlord information at scale. Ideal for real estate analytics, market research, and property comparison platforms. Fast, reliable, and compliant.

- **URL**: https://apify.com/shahidirfan/openrent-property-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

Collect OpenRent rental listings in a clean, analysis-ready dataset. Use it to monitor asking rents, compare neighborhoods, track listing updates, and build lead lists from one of the UK’s most active rental marketplaces.

### Features

- **Flexible search entry points** — Start from a listing page, a location, or a keyword-based search.
- **Useful property coverage** — Collect titles, descriptions, rent, photos, room info, and listing freshness.
- **Clean dataset output** — Empty values are removed so each record is easier to filter, export, and analyze.
- **Fast batch collection** — Pull multiple listings per run and stop automatically once you reach your target count.
- **Proxy support** — Use Apify Proxy for more reliable collection at scale.

### Use Cases

#### Rental Market Research
Compare asking rents across neighborhoods and track how listings change over time. Build a repeatable dataset for weekly or monthly market snapshots.

#### Lead Generation
Collect property records for outreach, CRM enrichment, or team follow-up. The output is structured so it can be exported directly into downstream tools.

#### Price Monitoring
Watch how rents move for specific areas, room types, or property styles. Use the results to spot price drops, new inventory, or unusual outliers.

#### Portfolio Analysis
Review a set of properties in one place and compare them by rent, update time, and listing details. This is useful for landlords, agents, and researchers.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `url` | String | No | `https://www.openrent.co.uk/properties-to-rent/london` | OpenRent search URL to start from. |
| `keyword` | String | No | `studio` | Optional keyword filter for the collected listings. |
| `location` | String | No | `London` | Fallback location used when no search URL is provided. |
| `results_wanted` | Integer | No | `20` | Maximum number of properties to save. |
| `max_pages` | Integer | No | `10` | Maximum number of search pages to visit. |
| `proxyConfiguration` | Object | No | `{ "useApifyProxy": true }` | Proxy settings for more reliable collection. |

### Output Data

Each dataset item contains a clean property record with fields like:

| Field | Type | Description |
|-------|------|-------------|
| `id` | Number | Unique property identifier. |
| `title` | String | Listing title. |
| `description` | String | Property description. |
| `url` | String | Listing URL. |
| `imageUrl` | String | Main listing image. |
| `rentPerMonth` | Number | Monthly asking rent. |
| `rentPerWeek` | Number | Weekly asking rent. |
| `lastUpdated` | String | How recently the listing was updated. |
| `details` | Array | Extra listing details such as rooms, baths, or furnishing. |
| `attributes` | Object | Normalized detail fields for easier filtering. |
| `letAgreed` | Boolean | Whether the property is already let. |
| `isNew` | Boolean | Whether the listing is marked as new. |
| `isMultiRoom` | Boolean | Whether the listing is a multi-room property. |
| `sourceSearchPage` | String | Search page used to discover the listing. |
| `scrapedAt` | String | Timestamp when the record was collected. |

### Usage Examples

#### Quick London Search

```json
{
    "url": "https://www.openrent.co.uk/properties-to-rent/london",
    "results_wanted": 20
}
````

#### Search by Keyword

```json
{
    "keyword": "studio",
    "location": "London",
    "results_wanted": 20
}
```

#### Larger Collection Run

```json
{
    "location": "Manchester",
    "results_wanted": 100,
    "max_pages": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Sample Output

```json
{
    "id": 2865841,
    "title": "1 Bed Flat, London WC2N",
    "description": "A bright one-bedroom flat in a central location.",
    "url": "https://www.openrent.co.uk/property-to-rent/london/1-bed-flat-london-wc2n/2865841",
    "imageUrl": "https://imagescdn.openrent.co.uk/listings/2865841/example.jpg",
    "rentPerMonth": 2750,
    "rentPerWeek": 634.62,
    "lastUpdated": "around 6 days ago",
    "details": ["1 Bed", "1 Bath", "Furnished"],
    "attributes": {
        "1_bed": "1 Bed",
        "1_bath": "1 Bath",
        "furnished": "Furnished"
    },
    "letAgreed": false,
    "isNew": true,
    "isMultiRoom": false,
    "sourceSearchPage": "https://www.openrent.co.uk/properties-to-rent/london?skip=0",
    "scrapedAt": "2026-04-21T12:00:00.000Z"
}
```

### Tips for Best Results

#### Start Small

- Begin with `results_wanted` set to 20 for quick checks.
- Increase the limit once you confirm the search terms return the listings you want.

#### Choose a Clear Search Scope

- Use a specific location when you want local market data.
- Use a keyword when you want to focus on listing type or property style.

#### Use Proxy Settings for Reliability

- Apify Proxy can help stabilize larger runs.
- Residential proxy groups are a safer choice for heavier usage.

#### Review the Output Before Scaling

- Confirm the first run contains the fields you need.
- Adjust the search terms before collecting a large dataset.

### Proxy Configuration

```json
{
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Integrations

Connect the dataset to tools such as:

- **Google Sheets** — Export listings for analysis.
- **Airtable** — Build a searchable property database.
- **Zapier** — Trigger workflows from new listings.
- **Make** — Connect rental data to automation scenarios.
- **Webhooks** — Send records into your own systems.

### Frequently Asked Questions

#### How many listings can I collect?

It depends on your search scope and the number of matching properties. Start with a small run, then increase `results_wanted` once you confirm the search is working well.

#### Can I use a specific location?

Yes. You can set a direct OpenRent search URL or provide a location name to focus the results on a particular area.

#### Can I use the output in spreadsheets?

Yes. The output is structured for easy export to CSV, Google Sheets, Airtable, and similar tools.

# Actor input Schema

## `url` (type: `string`):

Optional OpenRent search URL. If provided, this takes priority over location fallback.

## `keyword` (type: `string`):

Optional keyword filter applied to title/description/details of API results.

## `location` (type: `string`):

Location fallback used only when URL is not provided, e.g. London, Manchester, Bristol.

## `results_wanted` (type: `integer`):

Maximum number of properties to save.

## `max_pages` (type: `integer`):

Safety cap for search-page pagination. One page is 20 listings.

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

Recommended for production runs to reduce blocking risk.

## Actor input object example

```json
{
  "url": "https://www.openrent.co.uk/properties-to-rent/london",
  "keyword": "studio",
  "location": "London",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "url": "https://www.openrent.co.uk/properties-to-rent/london",
    "keyword": "studio",
    "location": "London",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/openrent-property-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 = {
    "url": "https://www.openrent.co.uk/properties-to-rent/london",
    "keyword": "studio",
    "location": "London",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/openrent-property-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 '{
  "url": "https://www.openrent.co.uk/properties-to-rent/london",
  "keyword": "studio",
  "location": "London",
  "results_wanted": 20
}' |
apify call shahidirfan/openrent-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OpenRent Property Scraper 🏠",
        "description": "Extract rental property listings from OpenRent with automated data collection. Get property details, prices, locations, and landlord information at scale. Ideal for real estate analytics, market research, and property comparison platforms. Fast, reliable, and compliant.",
        "version": "0.0",
        "x-build-id": "2Rk9W7Bn2kDRCXNVt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~openrent-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-openrent-property-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/shahidirfan~openrent-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-openrent-property-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/shahidirfan~openrent-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-openrent-property-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": {
                    "url": {
                        "title": "Search URL",
                        "type": "string",
                        "description": "Optional OpenRent search URL. If provided, this takes priority over location fallback."
                    },
                    "keyword": {
                        "title": "Keyword Filter",
                        "type": "string",
                        "description": "Optional keyword filter applied to title/description/details of API results."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Location fallback used only when URL is not provided, e.g. London, Manchester, Bristol."
                    },
                    "results_wanted": {
                        "title": "Maximum Properties",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of properties to save.",
                        "default": 20
                    },
                    "max_pages": {
                        "title": "Maximum Search Pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety cap for search-page pagination. One page is 20 listings.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Recommended for production runs to reduce blocking risk.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
