UK Land Registry Scraper — Price Paid & House Price Index avatar

UK Land Registry Scraper — Price Paid & House Price Index

Pricing

from $1.50 / 1,000 results

Go to Apify Store
UK Land Registry Scraper — Price Paid & House Price Index

UK Land Registry Scraper — Price Paid & House Price Index

Scrape HM Land Registry Price Paid Data and UK House Price Index by postcode, town, district or region. Extract sale price, date, address, property type, tenure and new-build flag. No API key, no login.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract 31 million real property sales and monthly House Price Index data straight from HM Land Registry open data for England & Wales — no API key, no login, just clean structured records you can pipe into a spreadsheet or your data warehouse.

What does this scraper do?

This actor pulls official property data from HM Land Registry (England & Wales) using their Linked-Data REST API as the engine. It talks directly to the indexed endpoints — landregistry.data.gov.uk/data/ppi/transaction-record.json for individual sales and /data/ukhpi/region/{slug}/month.json for regional averages — so responses are fast, cleanly paginated, and returned as normalized JSON records rather than scraped HTML.

You get two modes. "Price Paid Data" returns individual property transactions: the price, address, property type, tenure, and completion date for real sales. "House Price Index" returns monthly regional averages and index values, broken down by property type, buyer type, and funding method.

The whole thing is keyless — HM Land Registry publishes this as open data under the Open Government Licence, so there is no key to buy, no account to create, and no rate-limit token to manage. Coverage runs from 1995 to the present, spanning roughly 31 million residential sales across England & Wales.

Who is it for?

  • Estate agents & valuers who need comparable sold-price evidence for a street, postcode, or town.
  • Property investors hunting for undervalued areas, yield hotspots, and price momentum before they commit capital.
  • PropTech & data teams building AVMs, dashboards, or lead-gen tools that need a reliable, structured feed of UK transactions.
  • Mortgage & valuation analysts who validate loan-to-value ratios and track regional price movements for risk models.
  • Researchers & journalists studying housing affordability, market cycles, and regional inequality with authoritative source data.

Use cases

  • Build a sold-price comparables table for any postcode to support a valuation or a purchase offer.
  • Track average price and annual change across regions to spot markets that are heating up or cooling down.
  • Feed a property investment model with real transaction history to estimate yields and capital growth.
  • Populate an AVM or pricing dashboard with millions of clean, dated sales records.
  • Produce housing market reports and data journalism backed by official government figures.

Why use this scraper?

  • Keyless & no login — nothing to register, no credentials to rotate. Run it and get data.
  • Official open data — sourced from HM Land Registry under the Open Government Licence, not a third-party aggregator.
  • Two datasets in one actor — individual Price Paid transactions and monthly House Price Index, switchable with a single mode field.
  • Rich filters — narrow by postcode, town, district, county, date range, price band, property type, tenure, new-build, and transaction category.
  • Real numbers — prices come back as proper numeric values (180000), dates as ISO strings, and booleans as booleans, ready to sort and aggregate.
  • Export & pay-per-result — download to CSV, JSON, or Excel, push to any integration, and only pay for the rows you actually get.

What data can you extract?

Depending on the mode you choose, the actor returns one of two record shapes. Every field below is included in the output.

Price Paid mode — output fields

FieldTypeDescription
transactionIdstringHM Land Registry unique transaction identifier
pricePaidnumberSale price in £
transactionDatestringCompletion date, ISO YYYY-MM-DD
transactionDateRawstringRaw date value as returned by the API
propertyTypestringDetached / Semi-detached / Terraced / Flat-Maisonette / Other
newBuildbooleantrue if the property was newly built at the time of sale
estateTypestringFreehold / Leasehold
transactionCategorystringStandard / Additional price paid transaction
recordStatusstringAdd / Change / Delete (Land Registry record lifecycle)
paonstringPrimary Addressable Object Name (house number/name)
saonstringSecondary Addressable Object Name (flat/unit)
streetstringStreet name
localitystringLocality
townstringTown or city
districtstringLocal authority district
countystringCounty
postcodestringFull postcode
addressstringComposed, human-readable address
transactionUrlstringLink to the source record on landregistry.data.gov.uk
scrapedAtstringISO timestamp of when the record was fetched

House Price Index mode — output fields

FieldTypeDescription
regionstringRegion name
regionSlugstringRegion slug used in the API
refMonthstringReference month YYYY-MM
refPeriodStartstringISO start date of the reference period
averagePricenumberAverage price for the region in £
housePriceIndexnumberHouse Price Index (Jan 2015 = 100)
percentageAnnualChangenumberYear-on-year percentage change
percentageChangenumberMonth-on-month percentage change
salesVolumenumberNumber of sales in the month
averagePriceDetachednumberAverage price, detached properties (£)
averagePriceSemiDetachednumberAverage price, semi-detached properties (£)
averagePriceTerracednumberAverage price, terraced properties (£)
averagePriceFlatMaisonettenumberAverage price, flats/maisonettes (£)
averagePriceNewBuildnumberAverage price, new-build properties (£)
averagePriceExistingPropertynumberAverage price, existing (resold) properties (£)
averagePriceCashnumberAverage price, cash purchases (£)
averagePriceMortgagenumberAverage price, mortgage purchases (£)
averagePriceFirstTimeBuyernumberAverage price, first-time buyers (£)
averagePriceFormerOwnerOccupiernumberAverage price, former owner-occupiers (£)
housePriceIndexDetachednumberHPI for detached properties
housePriceIndexSemiDetachednumberHPI for semi-detached properties
housePriceIndexTerracednumberHPI for terraced properties
housePriceIndexFlatMaisonettenumberHPI for flats/maisonettes
scrapedAtstringISO timestamp of when the record was fetched

Here is a real Price Paid record exactly as the actor returns it:

{
"transactionId": "5340B1C5-3EC5-8052-E063-4804A8C06EE4",
"pricePaid": 180000,
"transactionDate": "2026-05-27",
"propertyType": "semi-detached",
"newBuild": false,
"estateType": "Freehold",
"transactionCategory": "Standard price paid transaction",
"recordStatus": "Add",
"paon": "32",
"street": "CARDINAL AVENUE",
"town": "PLYMOUTH",
"district": "CITY OF PLYMOUTH",
"county": "CITY OF PLYMOUTH",
"postcode": "PL5 1UW",
"address": "32, CARDINAL AVENUE, PLYMOUTH, PL5 1UW",
"transactionUrl": "https://landregistry.data.gov.uk/data/ppi/transaction/5340B1C5-3EC5-8052-E063-4804A8C06EE4/current",
"scrapedAt": "2026-07-26T09:16:34Z"
}

How to use

Running the actor takes three steps: pick your mode, tell it what to search, and start. Here are the two most common recipes.

Option A — Price Paid by town or postcode

Use this when you want individual sales. Set searchBy to the address field you want to match on, then put your values in queries.

  1. Set mode to price-paid.
  2. Set searchBy to town (or postcode, district, county).
  3. Add your values to queries, e.g. ["PLYMOUTH", "EXETER"].
  4. Optionally filter by dateFrom, minPrice, propertyType, etc.
  5. Set maxResults and click Start.
{
"mode": "price-paid",
"searchBy": "town",
"queries": ["PLYMOUTH", "EXETER"],
"dateFrom": "2026-01-01",
"minPrice": 150000,
"propertyType": "semi-detached",
"estateType": "freehold",
"sort": "newest",
"maxResults": 500
}

Option B — House Price Index by region

Use this when you want monthly averages and trends rather than individual sales. Switch the mode and provide region slugs.

  1. Set mode to house-price-index.
  2. Add region slugs to regions, e.g. ["england", "london", "south-west", "city-of-plymouth"].
  3. Optionally bound the period with dateFrom and dateTo.
  4. Click Start.
{
"mode": "house-price-index",
"regions": ["england", "london", "south-west", "city-of-plymouth", "united-kingdom"],
"dateFrom": "2020-01-01",
"dateTo": "2026-06-30",
"maxResults": 500
}

Input parameters

ParameterTypeDefaultDescription
modeselect (price-paid, house-price-index)price-paidWhich dataset to scrape: individual sales or monthly regional index.
searchByselect (postcode, town, district, county)townWhich address field your queries are matched against (Price Paid mode).
queriesarray of stringsValues matching searchBy, e.g. ["PLYMOUTH","EXETER"] or ["PL6 6AA"]. Empty → demos with PLYMOUTH.
dateFromstring (YYYY-MM-DD)Only include records on or after this date.
dateTostring (YYYY-MM-DD)Only include records on or before this date.
minPriceinteger (£)Minimum sale price.
maxPriceinteger (£)Maximum sale price.
propertyTypeselect (any, detached, semi-detached, terraced, flat-maisonette, other)anyFilter by property type.
estateTypeselect (any, freehold, leasehold)anyFilter by tenure.
newBuildOnlybooleanfalseReturn only newly built properties.
categoryTypeselect (any, standard, additional)anystandard = ordinary residential sales; additional = repossessions, buy-to-let, and other non-private transfers.
sortselect (newest, oldest, price-desc, price-asc)newestOrder of returned records.
regionsarray of stringsRegion slugs for HPI mode, e.g. ["england","london","south-west","city-of-plymouth","united-kingdom"].
maxResultsinteger500Maximum number of records to return.
proxyConfigurationproxyOptional. Proxy settings; not required for this actor.

A full input using every relevant field:

{
"mode": "price-paid",
"searchBy": "postcode",
"queries": ["PL5 1UW", "PL6 6AA"],
"dateFrom": "2024-01-01",
"dateTo": "2026-06-30",
"minPrice": 100000,
"maxPrice": 400000,
"propertyType": "any",
"estateType": "freehold",
"newBuildOnly": false,
"categoryType": "standard",
"sort": "price-desc",
"maxResults": 1000
}

Output example

{
"transactionId": "5340B1C5-3EC5-8052-E063-4804A8C06EE4",
"pricePaid": 180000,
"transactionDate": "2026-05-27",
"propertyType": "semi-detached",
"newBuild": false,
"estateType": "Freehold",
"transactionCategory": "Standard price paid transaction",
"recordStatus": "Add",
"paon": "32",
"street": "CARDINAL AVENUE",
"town": "PLYMOUTH",
"district": "CITY OF PLYMOUTH",
"county": "CITY OF PLYMOUTH",
"postcode": "PL5 1UW",
"address": "32, CARDINAL AVENUE, PLYMOUTH, PL5 1UW",
"transactionUrl": "https://landregistry.data.gov.uk/data/ppi/transaction/5340B1C5-3EC5-8052-E063-4804A8C06EE4/current",
"scrapedAt": "2026-07-26T09:16:34Z"
}

Tips for best results

  • Scope by town or postcode for the fastest runs — narrow queries hit the indexed endpoints hardest and return quickest.
  • Postcode is the fastest search of all; if you know the postcode, use searchBy: postcode.
  • Use dateFrom to pull only recent sales instead of the entire history back to 1995.
  • Mind the registration lag — sales from the last 2–8 weeks may not appear yet, because the date shown is the completion date and records take time to register.
  • Use House Price Index mode for trends — if you want direction and averages rather than individual comparables, HPI is the right tool.
  • Sort deliberatelynewest for the latest comparables, price-desc to surface the top of the market, oldest for historical baselines.
  • Raise maxResults when you need a full dataset for a busy town; lower it for quick spot checks.
  • Filter tenure and property type to keep outputs relevant — e.g. estateType: leasehold for flats.
  • Use categoryType: standard to exclude repossessions and non-private transfers that can skew averages.
  • Combine with other datasets — join Price Paid comparables with HPI trends, or enrich with listings and company data (see Related scrapers) for a fuller market picture.

Integrations

Once you have your data, connect this actor to the tools you already use:

  • Google Sheets — push transactions straight into a spreadsheet for sharing and analysis.
  • Slack — get notified when a run finishes or new sales appear in a watched postcode.
  • Zapier — trigger thousands of downstream apps from each run.
  • Make — build no-code automation flows around the dataset.
  • Webhooks — POST results to your own backend the moment a run completes.
  • Schedule — run the actor daily, weekly, or monthly to keep your data fresh automatically.

API usage

You can run the actor programmatically with the Apify API. Replace YOUR_API_TOKEN with your token.

cURL

curl -X POST "https://api.apify.com/v2/acts/logiover~uk-land-registry-scraper/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "price-paid",
"searchBy": "town",
"queries": ["PLYMOUTH"],
"dateFrom": "2026-01-01",
"maxResults": 500
}'

Node.js (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const input = {
mode: 'price-paid',
searchBy: 'town',
queries: ['PLYMOUTH'],
dateFrom: '2026-01-01',
maxResults: 500,
};
const run = await client.actor('logiover/uk-land-registry-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run_input = {
"mode": "price-paid",
"searchBy": "town",
"queries": ["PLYMOUTH"],
"dateFrom": "2026-01-01",
"maxResults": 500,
}
run = client.actor("logiover/uk-land-registry-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Use with AI agents (MCP)

This actor works as a tool for AI agents through the Apify MCP (Model Context Protocol) server, so an LLM-powered assistant can fetch UK property data on demand as part of a larger workflow. Point your MCP-compatible client at the Apify MCP server, expose logiover/uk-land-registry-scraper, and let the agent call it directly.

Example prompt: "Get the 20 most recent semi-detached freehold sales in Plymouth over £150,000, then summarise the average price and the price range."

FAQ

Is it keyless?

Yes. HM Land Registry publishes Price Paid and House Price Index data as open data, so there is no API key, no login, and no account to set up. You just run the actor.

What area does it cover?

England & Wales. The data comes from HM Land Registry, which records residential property transactions across those two nations from 1995 to the present — roughly 31 million sales.

What's the difference between Price Paid and House Price Index?

Price Paid mode returns individual property sales (price, address, type, tenure, date). House Price Index mode returns monthly regional averages and index values broken down by property type, buyer type, and funding method. Use mode to switch between them.

Why are some recent sales missing?

There is a registration lag. The transaction date is the completion date, and it takes time for a sale to be lodged and registered. As a result, sales from roughly the last 2–8 weeks may be incomplete or absent. Rerun later and they will appear.

Can I get postcode-level data?

Yes. Set searchBy to postcode and pass full postcodes in queries, e.g. ["PL5 1UW"]. Postcode is also the fastest way to search.

How many rows can I get per run?

As many as you set with maxResults (default 500). Because the underlying API is indexed and paginates cleanly, you can raise this to pull large datasets for a busy town or wide date range.

Are prices real numbers?

Yes. pricePaid and all the HPI averages come back as proper numeric values (e.g. 180000), not strings, so you can sort, filter, and aggregate them directly.

How do I export the data?

From the run's dataset you can download to CSV, JSON, or Excel, or push it live to Google Sheets, a webhook, or any of the integrations listed above.

Yes. This is public open government data released under the Open Government Licence. See the "Is it legal?" section below for detail.

How often is the data updated?

HM Land Registry updates its Price Paid and House Price Index datasets on a regular monthly cycle. Because of registration timing, the most recent weeks fill in gradually, so scheduling a recurring run keeps your copy current.

Yes — see the Related scrapers section at the end for UK company data and property listing scrapers that pair well with this one.

Yes. HM Land Registry Price Paid Data and the UK House Price Index are public, open government datasets published for anyone to use. They are made available under the Open Government Licence (OGL), which permits copying, publishing, distributing, and adapting the data — including for commercial purposes — provided the source is acknowledged. This actor simply reads that officially published open data through HM Land Registry's own Linked-Data REST API; it does not access private records, bypass authentication, or scrape gated content. You should attribute HM Land Registry as the source and follow the terms of the Open Government Licence in your own use.

Pair this actor with other logiover scrapers to build a complete property and market intelligence stack:

  • UK Companies House Scraper — enrich transactions with the companies behind corporate buyers and landlords.
  • Zoopla Scraper — combine sold-price history with current listings and asking prices.
  • Rightmove-style Property Scraper — track live UK listings alongside registered sales.
  • Bayut Scraper — extend your property coverage into the UAE market.