Replacing getAddress.io? Free drop-in replacement →
Our Data / Market Activity

Market Activity

Every step of every UK property's journey through the market. Not just the final sale price — the full timeline from listing to completion, including the ones that never completed. 30 years of data, UPRN-linked.

The full property journey

Land Registry only records completions. We record everything — including the ones that went under offer and then fell through. Each event is timestamped and priced.

14 Maple Avenue, Bristol BS8 3AJ
Most recent listing cycle · UPRN: 100023336956
property_sale_events
Added event_type: "Added"
12 Jan 2024 · Savills Bristol
£595,000
Reduced event_type: "Reduced"
28 Feb 2024 · 47 days on market
£575,000 −3.4%
Under Offer event_type: "Under Offer"
15 Mar 2024 · 63 days on market
Sold STC event_type: "Sold STC"
22 Mar 2024 · offer accepted
£568,000
Completed event_type: "Completed"
14 Jun 2024 · Land Registry confirmed
£568,000
Total journey: 154 days from listing to completion · 3.4% price reduction before sale

Event types

Every state change is tracked with a timestamp and price where applicable.

Added
Property first listed — initial asking price and listing date
Reduced
Asking price lowered — new price and reduction percentage
Under Offer
Offer received — property reserved pending survey
Sold STC
Sale agreed subject to contract — accepted offer price
Withdrawn
Listing removed without completing — deal fell through
Completed
Sale completed and registered at Land Registry
Let
Property let agreed (rental market)
Sale Cancelled
Sale cancelled after Sold STC — chain collapsed
30 years of history
Events going back to 1995. Land Registry only records completions — we capture every listing event including withdrawals and cancellations that never appear in official data.
GET /api/property_sale_events/?uprn={uprn}

Pass any UPRN to get the full listing event timeline. Filter by event_type to isolate specific state changes.

Get a free key →
Request cURL
curl "https://api.homedata.co.uk/api/property_sale_events/
  ?uprn=100023336956" \
  -H "Authorization: Api-Key YOUR_KEY"
Response JSON
{
  "count": 5,
  "results": [
    {
      "id": 84912,
      "event_type": "Added",
      "date": "2024-01-12",
      "price": 595000,
      "source": "Home.co.uk",
      "listing": 4821
    },
    {
      "id": 84913,
      "event_type": "Reduced",
      "date": "2024-02-28",
      "price": 575000,
      "source": "Home.co.uk",
      "listing": 4821
    },
    {
      "id": 84914,
      "event_type": "Sold STC",
      "date": "2024-03-22",
      "price": 568000,
      "source": "Home.co.uk",
      "listing": 4821
    }
  ]
}

What this data unlocks

Deal flow intelligence

Track properties going under offer and watch for Withdrawn events — the signal that a deal fell through. Portfolio managers and investors use this to spot buying opportunities before they're re-listed.

AVM velocity signals

Time-to-offer, price reduction frequency, and listing churn are leading indicators of market velocity. Weight your AVM models with current market conditions rather than historic completions alone.

Cross-cycle property tracking

Events are UPRN-linked, so you can trace the same physical address across decades of listing cycles. See how many times a property has been listed, at what prices, and how long it typically takes to sell.

Why not just use Land Registry?

Data point Land Registry Homedata
Completed sales ✓ Yes (3–6 month lag) ✓ Yes (real-time)
Properties that were listed but never sold ✗ No ✓ Yes
Price reductions during listing ✗ No ✓ Yes
Time between listing and offer accepted ✗ No ✓ Yes
Withdrawn listings / failed deals ✗ No ✓ Yes
History depth 1990s–present 1995–present (30 years)
UPRN-linked for cross-cycle tracking ✗ No ✓ Yes

Field reference

Field Type Description
id integer Unique event identifier
event_type string State change type: Added, Reduced, Under Offer, Sold STC, Withdrawn, Completed, Let, Sale Cancelled
date date When this event occurred (YYYY-MM-DD)
price integer Price at this event in pence (divide by 100 for pounds). 0 for events without a price change.
source string Always "Home.co.uk" (30 years of continuous data collection), or "Land registry" for completed sales sourced from HM Land Registry.
listing integer PropertyListing ID — groups events belonging to the same listing cycle. Use with /api/property_sales/ to get full sale context.
sale integer | null PropertySale ID if this event is associated with a confirmed sale. Null for listings that did not complete.

Code examples

Python — full listing timeline requests
import requests

API_KEY = "your_api_key"
UPRN = "100023336956"

resp = requests.get(
    "https://api.homedata.co.uk/api/property_sale_events/",
    params={"uprn": UPRN},
    headers={"Authorization": f"Api-Key {API_KEY}"}
)

events = resp.json()["results"]
for event in events:
    price = f"£{event['price']:,}" if event['price'] else "—"
    print(f"{event['date']}  {event['event_type']:<15}  {price}")
JavaScript — filter by event type fetch
const API_KEY = 'your_api_key';
const UPRN = '100023336956';

// Get only Withdrawn events (fallen-through deals)
const res = await fetch(
  `https://api.homedata.co.uk/api/property_sale_events/` +
  `?uprn=${UPRN}&event_type=Withdrawn`,
  { headers: { 'Authorization': `Api-Key ${API_KEY}` } }
);

const { results } = await res.json();
console.log(`${results.length} withdrawn listings found`);
cURL — get Sold STC events curl
curl "https://api.homedata.co.uk/api/property_sale_events/
  ?uprn=100023336956
  &event_type=Sold+STC" \
  -H "Authorization: Api-Key YOUR_KEY"
Python — detect fallen-through deals deal flow signal
import requests

API_KEY = "your_api_key"

def get_withdrawn_listings(uprn: str) -> list:
    """Properties that went Sold STC then Withdrawn"""
    resp = requests.get(
        "https://api.homedata.co.uk/api/property_sale_events/",
        params={"uprn": uprn},
        headers={"Authorization": f"Api-Key {API_KEY}"}
    )
    events = resp.json()["results"]
    types = [e["event_type"] for e in events]
    # Deal fell through: Sold STC followed by Withdrawn
    if "Sold STC" in types and "Withdrawn" in types:
        return [e for e in events if e["event_type"] == "Withdrawn"]
    return []

Start tracking market activity

Free tier includes 100 API calls. No credit card required. The market activity endpoint is available on all plans.

30 years of history UPRN-linked cross-cycle tracking Withdrawn listings included 1 API call per request