UK Land Registry Price Paid Search avatar

UK Land Registry Price Paid Search

Pricing

from $2.00 / 1,000 record fetcheds

Go to Apify Store
UK Land Registry Price Paid Search

UK Land Registry Price Paid Search

Search UK property sale prices from HM Land Registry Price Paid Data. Find residential transactions by postcode, town, street, price range, property type & date. Covers England & Wales since 1995. Free government data, structured JSON output.

Pricing

from $2.00 / 1,000 record fetcheds

Rating

0.0

(0)

Developer

ryan clinton

ryan clinton

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Search and extract property sale transaction data from the official HM Land Registry Price Paid dataset. Retrieve sale prices, full addresses, property types, and transaction dates for any postcode, town, or street across England and Wales -- covering every recorded residential sale from January 1995 to the present.


Why use this actor?

  • Official government data source -- queries the HM Land Registry Linked Data API directly, giving you the same authoritative Price Paid Data used by property professionals, solicitors, and estate agents across the UK.
  • No API key or account needed -- the underlying data is published under the Open Government Licence v3.0 and is completely free. This actor wraps the API so you never need to learn its query format or handle its linked-data response structure.
  • Clean, structured output -- the raw API returns nested objects with language-tagged arrays. This actor flattens and normalizes every record into 15 simple key-value fields ready for analysis.
  • Automatic pagination -- a single run fetches up to 500 results across multiple API pages without you writing any loop logic.
  • Scheduled monitoring -- set up recurring Apify schedules to track property prices in target areas weekly or monthly and feed results into Google Sheets, webhooks, or your CRM automatically.

Key features

  • Flexible location search -- filter by postcode, town/city, or street name, with at least one of postcode or town required
  • Price range filtering -- set minimum and maximum sale prices in GBP to focus on a specific market segment
  • Property type filter -- narrow results to detached, semi-detached, terraced, or flat/maisonette properties
  • Date range support -- search within a specific time period using YYYY-MM-DD start and end dates
  • 30+ years of data -- access records dating back to January 1995 through to the most recent monthly update
  • 15 structured output fields -- every transaction includes price, date, full address breakdown, estate type, property type, new build status, and transaction category
  • Automatic pagination -- fetches up to 500 results across multiple API pages in a single run
  • Graceful timeout handling -- if a request takes longer than 60 seconds, the actor returns all results collected so far rather than failing
  • Case-insensitive input -- town and street names are automatically uppercased before querying, so you can enter them in any case
  • Low resource usage -- runs on 256 MB of memory with typical execution times under 30 seconds

How to use

Using the Apify Console

  1. Go to the UK Land Registry Price Paid Search actor page on Apify.
  2. Click Start to open the input configuration form.
  3. Enter at least a Postcode (e.g., SW1A 2AA) or a Town / City (e.g., LONDON).
  4. Optionally add a street name, price range, property type, or date range to narrow results.
  5. Set the Max Results (default 50, maximum 500).
  6. Click Start to run the actor.
  7. When the run completes, view results in the Dataset tab or export as JSON, CSV, or Excel.

Using the Apify API (JavaScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('ryanclinton/uk-land-registry').call({
town: 'MANCHESTER',
propertyType: 'flat-maisonette',
minPrice: 100000,
maxPrice: 300000,
dateFrom: '2024-01-01',
dateTo: '2024-12-31',
maxResults: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} transactions`);
items.forEach((item) => console.log(`${item.postcode} - ${item.price} GBP - ${item.dateOfTransfer}`));

Using the Apify API (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/uk-land-registry").call(run_input={
"town": "MANCHESTER",
"propertyType": "flat-maisonette",
"minPrice": 100000,
"maxPrice": 300000,
"dateFrom": "2024-01-01",
"dateTo": "2024-12-31",
"maxResults": 100,
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(f"Found {len(items)} transactions")
for item in items:
print(f"{item['postcode']} - {item['price']} GBP - {item['dateOfTransfer']}")

Input parameters

ParameterTypeRequiredDefaultDescription
postcodeStringConditional--Full UK postcode (e.g., SW1A 2AA, M34 3BG). Must be an exact match. At least one of postcode or town is required.
townStringConditional--Town or city name (e.g., LONDON, MANCHESTER). Case-insensitive -- automatically uppercased. At least one of postcode or town is required.
streetStringNo--Street name (e.g., HIGH STREET, PARK LANE). Case-insensitive -- automatically uppercased.
minPriceIntegerNo--Minimum sale price in GBP. Must be 0 or greater.
maxPriceIntegerNo--Maximum sale price in GBP. Must be 0 or greater.
propertyTypeStringNoAnyProperty type filter. Options: detached, semi-detached, terraced, flat-maisonette.
dateFromStringNo--Start date in YYYY-MM-DD format (e.g., 2023-01-01). Data available from 1995-01-01.
dateToStringNo--End date in YYYY-MM-DD format (e.g., 2024-12-31).
maxResultsIntegerNo50Maximum number of results to return. Minimum: 1, Maximum: 500.

Example input JSON

{
"postcode": "SW1A 2AA",
"minPrice": 200000,
"maxPrice": 1000000,
"propertyType": "flat-maisonette",
"dateFrom": "2020-01-01",
"dateTo": "2024-12-31",
"maxResults": 100
}

Tips:

  • Use full postcodes only -- partial postcodes like SW1A or M1 will not return results.
  • Combine postcode with street name to find sales on a specific street.
  • For high-volume towns like London, always use date filters to keep result sets manageable.

Output

Each transaction record in the output dataset contains 15 fields:

{
"transactionId": "A1B2C3D4-E5F6-7890-ABCD-EF1234567890",
"price": 275000,
"dateOfTransfer": "2024-06-15",
"postcode": "M1 4BT",
"propertyType": "Flat/Maisonette",
"oldNew": "Established",
"duration": "Leasehold",
"paon": "42",
"saon": "APARTMENT 7",
"street": "WHITWORTH STREET",
"locality": "",
"town": "MANCHESTER",
"district": "MANCHESTER",
"county": "GREATER MANCHESTER",
"categoryType": "Standard price paid"
}

Output fields

FieldTypeDescription
transactionIdStringUnique transaction identifier assigned by HM Land Registry
priceNumberSale price in GBP (pounds sterling)
dateOfTransferStringDate the sale completed, in YYYY-MM-DD format
postcodeStringFull postcode of the property
propertyTypeStringDetached, Semi-Detached, Terraced, or Flat/Maisonette
oldNewStringNew build if the property was newly built at the time of sale, otherwise Established
durationStringEstate type -- Freehold or Leasehold
paonStringPrimary Addressable Object Name -- typically the house number or building name
saonStringSecondary Addressable Object Name -- typically a flat or apartment number
streetStringStreet name
localityStringLocality within the town, if applicable (often empty)
townStringTown or city name
districtStringLocal authority district
countyStringCounty
categoryTypeStringStandard price paid for normal sales, or Additional price paid for company purchases, repossessions, and non-private transfers

Use cases

  • Property valuation research -- look up historical sale prices for a specific postcode or street to estimate current market value
  • Real estate market analysis -- track price trends across towns, districts, or property types over months or years
  • Investment due diligence -- compare sale prices in target postcodes before making buy-to-let or development investment decisions
  • Estate agent competitor research -- monitor recent sales volumes and prices in your operating area
  • Mortgage and lending assessment -- verify recent comparable sales to support property valuations
  • Academic and policy research -- analyze housing affordability, regional price disparities, and market cycles using 30+ years of data
  • Journalism and investigations -- identify unusual property transactions, such as high-value sales or bulk purchases in specific areas
  • Relocation planning -- compare property prices across different towns and property types when deciding where to move
  • Portfolio monitoring -- schedule regular runs to track price movements in areas where you own property
  • Proptech data pipelines -- feed structured transaction data into property technology platforms, dashboards, or machine learning models

API & integration

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/uk-land-registry").call(run_input={
"postcode": "EC2R 8AH",
"maxResults": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['price']} GBP -- {item['street']}, {item['town']}")

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('ryanclinton/uk-land-registry').call({
postcode: 'EC2R 8AH',
maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(`${item.price} GBP -- ${item.street}, ${item.town}`));

cURL

curl "https://api.apify.com/v2/acts/ryanclinton~uk-land-registry/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"postcode": "EC2R 8AH",
"maxResults": 50
}'

Integrations

Results can be connected to downstream systems using Apify's built-in integrations:

  • Google Sheets -- export transaction data directly to a spreadsheet for analysis
  • Webhooks -- trigger HTTP callbacks when a run completes to feed data into your own API
  • Zapier / Make -- build automated workflows that process property data without code
  • Slack / Email -- receive notifications with summary data after each scheduled run
  • Amazon S3 / Google Cloud Storage -- archive datasets for long-term storage and batch processing

How it works

  1. Input validation -- the actor checks that at least one of postcode or town is provided. If neither is set, it returns an error message with usage examples.
  2. Query construction -- search parameters are mapped to the HM Land Registry Linked Data API query format. Town, postcode, and street values are uppercased. Price and date filters are applied as range parameters.
  3. Paginated fetching -- the actor requests results in pages of 200 from the API, starting at page 0. Each request has a 60-second timeout via AbortController.
  4. Data transformation -- raw API responses contain nested linked-data objects with language-tagged value arrays. The actor extracts clean string values and maps each transaction to 15 flat output fields.
  5. Result collection -- transformed records accumulate until the maximum result count is reached or no more pages are available.
  6. Output -- all collected records are pushed to the Apify dataset for export in JSON, CSV, Excel, or via API.
Input (postcode/town/filters)
|
v
[Build API Query URL]
|
v
[Fetch Page from Land Registry API] <--+
| |
v |
[Transform Linked Data to Flat JSON] |
| |
v |
[Append to Results] |
| |
v |
{More pages & under maxResults?} --YES--+
|
NO
|
v
[Push Results to Apify Dataset]

Performance & cost

MetricValue
Memory requirement256 MB
Typical run time (50 results)5--15 seconds
Typical run time (500 results)15--45 seconds
API pages per requestUp to 200 results per page
Maximum results per run500
Estimated cost (50 results)~$0.001--$0.005
Estimated cost (500 results)~$0.005--$0.015
External API costFree (Open Government Licence)
API key requiredNo

Apify's free tier includes $5 of monthly platform usage, which is sufficient for hundreds of runs. Since the HM Land Registry API is free, you only pay for Apify compute time.


Limitations

  • England and Wales only -- the HM Land Registry covers England and Wales. Scotland (Registers of Scotland) and Northern Ireland (Land Registers of Northern Ireland) have separate registries not covered by this actor.
  • Full postcodes required -- partial postcodes (e.g., SW1A or M1) will not return results. You must provide the complete postcode including the inward code (e.g., SW1A 2AA).
  • Residential sales only -- the Price Paid dataset covers residential property transactions. Commercial property sales, transfers at zero value (gifts), right-to-buy sales at a discount, and court-ordered transfers are excluded.
  • Data publication lag -- HM Land Registry publishes new data monthly, typically with a lag of several weeks from the actual date of sale. Very recent transactions may not yet be available.
  • Maximum 500 results per run -- the actor caps output at 500 results. For larger datasets, run multiple queries with narrower filters (e.g., split by date range or postcode).
  • API timeout handling -- if a single API page request exceeds 60 seconds, the actor stops fetching and returns whatever results were already collected. This is rare but can happen with very broad queries.
  • No geospatial coordinates -- the output includes addresses and postcodes but not latitude/longitude. Use the Nominatim Geocoder actor to convert postcodes to coordinates.

Responsible use

  • Open Government Licence compliance -- the Price Paid Data is published under the Open Government Licence v3.0. You are free to use it for commercial and non-commercial purposes, but you must acknowledge the source: "Contains HM Land Registry data Crown copyright and database right 2025."
  • Personal data considerations -- while the dataset does not contain names of buyers or sellers, property addresses combined with sale prices could be used to infer information about individuals. Handle this data with appropriate care and in compliance with applicable privacy laws.
  • Fair use of the API -- the Land Registry Linked Data API is a free public service. Avoid running excessively large numbers of concurrent requests. The actor's built-in pagination and result limits help keep usage reasonable.
  • Accuracy disclaimer -- while this data comes from an official government source, it should not be used as the sole basis for financial decisions. Always consult qualified professionals for property valuations, mortgage applications, or investment decisions.
  • Rate limiting -- if you schedule frequent runs, space them appropriately to avoid placing unnecessary load on the government API. Hourly or daily schedules are reasonable; per-minute schedules are not.

FAQ

What geographic areas does this actor cover? The HM Land Registry Price Paid Data covers residential property transactions in England and Wales only. Scotland and Northern Ireland have separate land registries with their own datasets.

How far back does the data go? The dataset includes transactions from January 1995 to the present. New data is added monthly.

Is the data free to use? Yes. The Price Paid Data is published under the Open Government Licence v3.0. There is no API key required and no charge for accessing the data.

Why am I getting no results for my postcode? Make sure you are using a complete postcode with both the outward and inward codes (e.g., SW1A 2AA, not just SW1A). Partial postcodes are not supported by the API.

What is the difference between "Standard" and "Additional" category types? "Standard price paid" covers normal residential sales at full market value. "Additional price paid" includes non-standard transactions such as company purchases, repossessions, and transfers to non-private individuals.

What is the difference between "Freehold" and "Leasehold"? Freehold means the buyer owns the property and the land it sits on outright. Leasehold means the buyer owns the property for a fixed term but not the land, which is owned by a freeholder. Flats are typically leasehold; houses are typically freehold.

What do PAON and SAON mean? PAON stands for Primary Addressable Object Name -- usually the house number or building name. SAON stands for Secondary Addressable Object Name -- usually a flat number, apartment name, or unit within a larger building.

Can I search for commercial property sales? No. The Price Paid Data only includes residential property transactions. Commercial property sales are not recorded in this dataset.

How often is the data updated? HM Land Registry publishes updated data monthly. There is typically a lag of several weeks between the date of sale and when the transaction appears in the dataset.

Can I get more than 500 results? The actor caps output at 500 results per run. To retrieve more data, run multiple queries with narrower filters -- for example, split a large town search into separate date ranges or postcode areas.

What property types are available to filter by? Four types: detached, semi-detached, terraced, and flat-maisonette. Leave the field empty to search all property types.

Does this actor support wildcard or partial matching? No. The Land Registry API requires exact matches for postcodes and performs exact string matching on town and street names. There is no fuzzy or wildcard search.


ActorDescription
UK Companies HouseSearch UK registered companies and directors -- useful for cross-referencing corporate property purchases
UK Food Hygiene RatingsSearch food hygiene ratings for UK businesses -- pair with Land Registry data for area due diligence
Nominatim GeocoderConvert postcodes and addresses to geographic coordinates -- map property sales geographically
UK Charity CommissionSearch registered UK charities -- identify charity-owned properties in specific areas
UK Flood WarningsMonitor Environment Agency flood warnings -- assess flood risk for properties in target postcodes
OpenStreetMap POI SearchFind points of interest by location -- evaluate local amenities around properties