# PropertyData UK Analytics (`parseforge/propertydata-scraper`) Actor

Scrape UK property analytics from PropertyData.co.uk. Get rental yields, price per sqft, commercial rents, average prices, and sold prices for any UK postcode. No API key needed. Batch processing with parallel requests. Export as CSV, JSON, or Excel.

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

## Pricing

from $7.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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🏠 PropertyData UK Scraper

Scrape UK property analytics from PropertyData.co.uk without any API key or account. Get rental yields, price per sqft, commercial rents, average prices by property type, and recent sold prices for any UK postcode. Designed for property investors, estate agents, and market analysts. Export as CSV, Excel, or JSON.

> **Get UK property market insights for any postcode - rental yields, price per sqft, sold prices, and more. No API key needed. No coding required.**

### ✨ What Does It Do

- 📈 **Rental Yield** - Get gross rental yield percentages per postcode area to find the best buy-to-let locations
- 💰 **Price Per Sqft** - Compare price per square foot across postcodes to spot undervalued areas
- 🏢 **Commercial Rent** - Get retail rent per sqft for commercial property analysis
- 🏘️ **Average Prices** - See average prices broken down by detached, semi-detached, terraced, and flats
- 🔨 **Recent Sold Prices** - Access recent property sales with addresses, dates, and sale prices
- 🎯 **PropertyData Score** - Get the overall area rating score

### 🔧 Input

- **UK Postcodes** - Enter UK postcodes to look up (e.g. W14 9JH, SW1A 2AA, E1 6AN). Each postcode returns rental yield, price per sqft, and more.
- **Max Items** - Free users can get 10 results. Paid users can get up to 1,000,000 results.

Example input:
```json
{
  "postcodes": ["W14 9JH", "E1 6AN", "SW1A 2AA"],
  "maxItems": 10
}
````

### 📊 Output

Each dataset row corresponds to one queried postcode. Download results in JSON, CSV, or Excel formats.

| 🏡 Postcode | 📋 District | 📈 Rental Yield | 💰 Price/Sqft |
|---|---|---|---|
| 🏢 Commercial Rent/Sqft | 🏘️ Avg Price Detached | 🏘️ Avg Price Semi | 🏘️ Avg Price Terraced |
| 🏘️ Avg Price Flat | 🎯 PropertyData Score | 🔨 Recent Sold Prices | ⏰ Scraped At |

### 💎 Why Choose the PropertyData UK Scraper?

| Feature | Our Tool |
|---|---|
| No API key or account needed | ✔️ |
| Rental yields per postcode | ✔️ |
| Price per square foot data | ✔️ |
| Commercial rent data | ✔️ |
| Average prices by property type | ✔️ |
| Recent sold prices with addresses | ✔️ |
| Batch processing (multiple postcodes) | ✔️ |
| Parallel requests for speed | ✔️ |
| Export JSON, CSV, Excel | ✔️ |
| No coding required | ✔️ |
| No proxy needed | ✔️ |

### 📋 How to Use

No technical expertise needed. Just follow these steps:

1. **Sign Up** - [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp)
2. **Find the tool** - Search for "PropertyData UK Scraper" in the Apify Store and enter your postcodes
3. **Run it** - Click "Start" and see your results

That's all. No coding, no API keys, no setup needed. Export your data in CSV, Excel, or JSON format.

### 🎯 Business Use Cases

- 📊 **Property Investor** - Compare rental yields and price per sqft across 20 postcodes to find the best buy-to-let opportunities before the market moves
- 💼 **Estate Agent** - Look up average prices by property type across client neighborhoods to set competitive asking prices backed by data
- 🔬 **Market Analyst** - Batch-process 100+ postcodes to build heat maps of property values and rental yields across UK regions

### ❓ FAQ

**🔍 How does this scraper work?**
The scraper uses PropertyData's internal endpoints to fetch rental yields, price per sqft, and commercial rents for each postcode. It also scrapes the postcode data pages for average prices and sold prices. No API key or login is needed.

**📊 How accurate is the data?**
Data comes directly from PropertyData.co.uk, which compiles information from Land Registry, rental listings, and other official sources. Accuracy depends on PropertyData's data quality and coverage for each postcode.

**📅 Can I schedule this to run regularly?**
Yes. Use the Apify scheduler to run this tool daily, weekly, or monthly to track price changes over time.

**⚖️ Is scraping PropertyData allowed?**
This tool accesses publicly available data from PropertyData.co.uk. Always review the site's terms of service and ensure your use case complies with local laws and regulations.

**⚡ How long does a run take?**
Processing 10 postcodes takes about 10 seconds. All data sources are fetched in parallel for maximum speed.

**⚠️ Are there any limits?**
Free users can look up 10 postcodes per run. Paid users can process up to 1,000,000 postcodes per run.

### 🔗 Integrate PropertyData UK Scraper with any app

- [Make](https://docs.apify.com/platform/integrations/make) - Automate workflows
- [Zapier](https://docs.apify.com/platform/integrations/zapier) - Connect with over 5000 apps
- [GitHub](https://docs.apify.com/platform/integrations/github) - Version control integration
- [Slack](https://docs.apify.com/platform/integrations/slack) - Receive notifications
- [Airbyte](https://docs.apify.com/platform/integrations/airbyte) - Data pipelines
- [Google Drive](https://docs.apify.com/platform/integrations/drive) - Export to spreadsheets

### 💡 More ParseForge Actors

- [Petco Product Scraper](https://apify.com/parseforge/petco-scraper) - Gather product data from Petco, including prices and reviews
- [Avvo Attorney Profile Scraper](https://apify.com/parseforge/avvo-attorney-scraper) - Extract attorney profiles and ratings from Avvo
- [TikTok Shop Scraper](https://apify.com/parseforge/tiktok-shop-scraper) - Download TikTok Shop product listings with details
- [Mercari Scraper](https://apify.com/parseforge/mercari-scraper) - Collect marketplace listings from Mercari, including prices and seller info
- [Pump.fun Scraper](https://apify.com/parseforge/pump-fun-scraper) - Extract token and trading data from the Pump.fun blockchain platform

Check out our full range of [data extraction tools](https://apify.com/parseforge) for more options.

### 🚀 Ready to Start?

[Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) and collect your first results for free. No coding, no setup, no API keys.

### 🆘 Need Help?

- Review the FAQ section above for common questions
- Visit the [Apify support page](https://docs.apify.com) for documentation and tutorials
- Reach out to us for custom scrapers, project proposals, or issue reports at [Tally contact form](https://tally.so/r/BzdKgA)

### ⚠️ Disclaimer

> This tool is independent and not affiliated with, endorsed by, or sponsored by PropertyData or its subsidiaries. All trademarks mentioned are the property of their respective owners.

# Actor input Schema

## `postcodes` (type: `array`):

List of UK postcodes to look up (e.g. W14 9JH, SW1A 2AA). Each postcode returns rental yield, price per sqft, average prices, and more. If empty, the selected city will be used to discover postcodes automatically.

## `cities` (type: `array`):

Select one or more UK cities to automatically discover and scrape all postcode districts. Only used when no postcodes are provided.

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

Free users: Limited to 10 postcodes (preview). Paid users: Optional, max 1,000,000

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

Proxy for large runs. The scraper starts without proxy for speed, and automatically switches to proxy if Cloudflare blocks requests.

## Actor input object example

```json
{
  "postcodes": [
    "W14 9JH"
  ],
  "cities": [
    "manchester"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset with all scraped 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 = {
    "postcodes": [
        "W14 9JH"
    ],
    "cities": [
        "manchester"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/propertydata-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 = {
    "postcodes": ["W14 9JH"],
    "cities": ["manchester"],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/propertydata-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 '{
  "postcodes": [
    "W14 9JH"
  ],
  "cities": [
    "manchester"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/propertydata-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PropertyData UK Analytics",
        "description": "Scrape UK property analytics from PropertyData.co.uk. Get rental yields, price per sqft, commercial rents, average prices, and sold prices for any UK postcode. No API key needed. Batch processing with parallel requests. Export as CSV, JSON, or Excel.",
        "version": "1.0",
        "x-build-id": "rqYpZ7hHVnoP2hTdK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~propertydata-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-propertydata-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/parseforge~propertydata-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-propertydata-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/parseforge~propertydata-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-propertydata-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": {
                    "postcodes": {
                        "title": "UK Postcodes",
                        "type": "array",
                        "description": "List of UK postcodes to look up (e.g. W14 9JH, SW1A 2AA). Each postcode returns rental yield, price per sqft, average prices, and more. If empty, the selected city will be used to discover postcodes automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cities": {
                        "title": "Cities",
                        "type": "array",
                        "description": "Select one or more UK cities to automatically discover and scrape all postcode districts. Only used when no postcodes are provided.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "london",
                                "manchester",
                                "glasgow",
                                "liverpool",
                                "sheffield",
                                "bristol",
                                "coventry",
                                "leeds",
                                "bolton",
                                "nottingham",
                                "birmingham",
                                "edinburgh",
                                "cardiff",
                                "sunderland",
                                "southampton",
                                "newcastle-upon-tyne",
                                "plymouth",
                                "bradford",
                                "reading",
                                "stoke-on-trent",
                                "wolverhampton",
                                "derby",
                                "swansea",
                                "hull",
                                "middlesbrough",
                                "portsmouth",
                                "newport",
                                "luton",
                                "aberdeen",
                                "dundee",
                                "brighton",
                                "york",
                                "cambridge",
                                "oxford",
                                "bath",
                                "exeter",
                                "chester",
                                "norwich"
                            ],
                            "enumTitles": [
                                "London",
                                "Manchester",
                                "Glasgow",
                                "Liverpool",
                                "Sheffield",
                                "Bristol",
                                "Coventry",
                                "Leeds",
                                "Bolton",
                                "Nottingham",
                                "Birmingham",
                                "Edinburgh",
                                "Cardiff",
                                "Sunderland",
                                "Southampton",
                                "Newcastle upon Tyne",
                                "Plymouth",
                                "Bradford",
                                "Reading",
                                "Stoke-on-Trent",
                                "Wolverhampton",
                                "Derby",
                                "Swansea",
                                "Hull",
                                "Middlesbrough",
                                "Portsmouth",
                                "Newport",
                                "Luton",
                                "Aberdeen",
                                "Dundee",
                                "Brighton",
                                "York",
                                "Cambridge",
                                "Oxford",
                                "Bath",
                                "Exeter",
                                "Chester",
                                "Norwich"
                            ]
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 postcodes (preview). Paid users: Optional, max 1,000,000"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy for large runs. The scraper starts without proxy for speed, and automatically switches to proxy if Cloudflare blocks requests."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
