Sold Prices API

Recent property sold prices with summary statistics, filtering by location, property type, bedrooms and price range

REST API
JSON Responses
API Key Authentication
1 Credit Per API Call

Overview

The Sold Prices API returns recent property sold prices near a given UK postcode with comprehensive filtering options. Results include individual property sales with address, price, date, property type, and size data, plus summary statistics including average and median prices.

Data included in the response:

  • Individual sold prices — address, price, date, property type, bedrooms, square footage, price per sq ft/m², tenure, and distance from search postcode
  • Summary statistics — total results, average price, median price, price range (min/max), and average days on market

This API is ideal for:

  • Property valuation tools needing comparable sold prices
  • Market analysis dashboards showing local price trends
  • Estate agents providing evidence-based price recommendations
  • Mortgage lenders verifying property values
  • Property investors researching local markets

Authentication

All requests to the Sold Prices API require authentication using an API key. You can obtain your API key from your PropertyInsights dashboard after subscribing to an API plan.

Include your API key in the request header as follows:

X-API-Key: your_api_key_here

Security Warning

Never expose your API key in client-side code. Always make API calls from your server-side application to protect your credentials.

Endpoints

Base URL

https://propertyinsights.co.uk/api/v1/

Get Sold Prices

GET
/property/sold-prices

Returns recent sold prices near the specified postcode with optional filtering by property type, bedrooms, price range, and date.

Request Parameters

ParameterRequiredTypeDescription
postcodeRequiredStringUK postcode (e.g., "SW1A 1AA")
radiusOptionalFloatSearch radius in miles (default: 0.5)
bedroomsOptionalIntegerFilter by number of bedrooms
propertyTypeOptionalStringFilter by type: Detached, Semi-detached, Terraced, or Flat
limitOptionalIntegerMaximum results to return (default: 20, max: 100)
minPriceOptionalIntegerMinimum sold price filter in GBP
maxPriceOptionalIntegerMaximum sold price filter in GBP
sinceOptionalStringISO date — only include sales after this date (e.g., "2024-01-01")

Results are sorted by transaction date (most recent first). The default search window covers the last 3 years of sales. Use the since parameter to narrow the time range.

Billing details in the response

Successful chargeable JSON responses include a top-level billing object. The endpoint examples on this page focus on the endpoint-specific data, so this repeated block may not be shown in every example.

"billing": {
  "mode": "prepaid",
  "creditsCharged": 1,
  "creditsRemaining": 1999,
  "creditsRefreshAt": "2026-08-14T09:30:00.000Z"
}
Field or headerMeaning
billing.creditsCharged
X-Credits-Charged
Credits charged by this call. Failed and non-chargeable calls return 0 in the header.
billing.creditsRemaining
X-Credits-Remaining
The credit balance after the call.
billing.creditsRefreshAt
X-Credits-Refresh-At
The next monthly credit refresh as an ISO 8601 timestamp. Trial and non-renewing balances return null and omit the header.

All authenticated API-key calls expose the billing headers, including validation errors and zero-credit status or management requests. Only successful chargeable JSON responses add the billing object to the response body.

Response Format

The response is returned in JSON format with the following structure:

{
  "success": true,
  "data": {
    "soldPrices": [ ... ],
    "summary": {
      "totalResults": 45,
      "returned": 20,
      "averagePrice": 325000,
      "medianPrice": 310000,
      "priceRange": { "min": 180000, "max": 550000 },
      "averageDaysOnMarket": null
    }
  }
}

soldPrices (array)

Each item in the array represents a single property sale.

{
  "address": "12 High Street",
  "postcode": "SW1A 2AB",
  "price": 320000,
  "date": "2025-11-15",
  "propertyType": "Semi-detached",
  "bedrooms": 3,
  "bathrooms": null,
  "squareFeet": 1050,
  "pricePerSqM": 2830,
  "pricePerSqFt": 305,
  "tenure": "Freehold",
  "distance": 0.2,
  "coordinates": {
    "lat": null,
    "lng": null
  }
}

Examples

Basic Request

GET https://propertyinsights.co.uk/api/v1/property/sold-prices?postcode=SW1A%202AA

Filtered Request

GET https://propertyinsights.co.uk/api/v1/property/sold-prices?postcode=SW1A%202AA&bedrooms=3&propertyType=Semi-detached&minPrice=200000&maxPrice=400000&limit=50

cURL Example

curl -X GET \
  "https://propertyinsights.co.uk/api/v1/property/sold-prices?postcode=SW1A%202AA&radius=1&limit=10" \
  -H "x-api-key: YOUR_API_KEY"

Error Handling

The API uses standard HTTP status codes to indicate the success or failure of requests.

CodeError CodeDescription
400MISSING_POSTCODEPostcode parameter is required
401UNAUTHORIZEDAPI key is missing or invalid
402INSUFFICIENT_CREDITSInsufficient API credits to process this request
500INTERNAL_ERRORAn error occurred while fetching sold prices

Error Response Example

{
  "success": false,
  "error": {
    "code": "MISSING_POSTCODE",
    "message": "Postcode parameter is required"
  }
}

Need Help?

If you need assistance with implementation or have questions about the API, our support team is here to help.