EPC Search API

Search official UK Energy Performance Certificate (EPC) data for residential and non-domestic properties

REST API
JSON Responses
API Key Authentication
Official EPC Data

Overview

The EPC Search API provides comprehensive access to official UK Energy Performance Certificate data for both domestic (residential) and non-domestic (commercial) properties. Our API integrates with the UK Government's official EPC database to deliver accurate, up-to-date energy performance information.

This API provides:

  • Current and potential EPC ratings (A-G scale) with numeric efficiency scores
  • Comprehensive property details: total floor area, built form, construction age band, tenure
  • Component efficiency analysis (walls, roof, windows, main heating, lighting systems)
  • Energy consumption estimates and annual cost projections
  • Environmental impact indicators including CO2 emissions
  • Certificate metadata with LMK keys, lodgement dates, and validity periods
  • Support for both single property matches and multiple certificate scenarios
  • Complete coverage of England, Wales, and Northern Ireland EPC data

UK EPC Rating Scale:

EPC Ratings

  • A: 92-100 (Most efficient)
  • B: 81-91 (Very efficient)
  • C: 69-80 (Good)
  • D: 55-68 (Average)
  • E: 39-54 (Below average)
  • F: 21-38 (Poor)
  • G: 1-20 (Least efficient)

Key Features

  • Official government EPC database
  • Both domestic and non-domestic properties
  • Current and potential energy ratings
  • Detailed component efficiency breakdowns
  • Energy cost estimates and CO2 emissions
  • Fast response times (<1 second typical)

This API is ideal for:

  • Property portals displaying comprehensive energy performance data
  • Estate agents providing detailed property information to buyers
  • Mortgage lenders assessing property energy efficiency for green mortgages
  • Property investment analysis platforms evaluating long-term costs
  • ESG reporting and sustainability analytics applications
  • Lettings platforms ensuring EPC compliance for rental properties
  • Energy consultancy firms conducting efficiency assessments
  • Government and local authority planning applications

Important Note

EPC data is sourced from the official UK government database. Certificates are valid for 10 years and are required for most property sales and rentals. Always verify certificate validity dates for compliance purposes.

Authentication

All requests to the EPC Search 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/

EPC Search

GET
/epc/search?address={address}&postcode={postcode}&uprn={uprn}

Search official EPC data by postcode or UPRN, with an optional address to narrow postcode matches. Returns either a single matching certificate or multiple certificates when several EPC records exist for the same postcode, UPRN or address (e.g., different flats, updated certificates, or both domestic and non-domestic certificates). If no EPC data is found, the API returns a 404 response and no credit is deducted.

Request Parameters

GET /epc/search

Query parameters for EPC data search by postcode or UPRN, with an optional address filter.

ParameterRequiredTypeDescription
addressOptionalStringFirst line of the property address (e.g., "10 DOWNING STREET"). Alternative parameter name: addressLine1. Omit it to return postcode-level results.
postcodeRequired unless uprn suppliedStringUK postcode (e.g., "SW1A 2AA")
uprnOptionalStringUnique Property Reference Number. Can be supplied instead of postcode for direct EPC lookup. Only one UPRN can be searched per request.

Address Matching: Provide the first line of the address exactly as it appears on official documents. If you only have a postcode, omit the address and the API will return postcode-level matches. If no certificates are found for the supplied postcode/address/UPRN, the request returns EPC_NOT_FOUND and is not charged.

Postcode Format: Accepts postcodes with or without spaces. Both "SW1A2AA" and "SW1A 2AA" are valid.

UPRN Lookup: When you have a UPRN, supply uprn directly. A postcode is not required for UPRN-only EPC searches.

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

All API responses are returned in JSON format. The standard response structure is as follows:

{
  "success": boolean,
  "data": {
    "type": "domestic" | "non-domestic",
    "result": { /* Single EPC certificate data */ },
    "multipleResults": true, /* When multiple properties found */
    "count": number,
    "results": [ /* Array of latest certificate summaries */ ]
  },
  "error": {
    "code": string,
    "message": string
  } // Only present if success is false
}

Single EPC Certificate Response

{
  "success": true,
  "data": {
    "type": "domestic",
    "result": {
      "address": "15 Example Street",
      "address1": "15 Example Street",
      "postcode": "SW1A 1AA",
      "current-energy-rating": "C",
      "current-energy-efficiency": 70,
      "potential-energy-rating": "B",
      "potential-energy-efficiency": 82,
      "property-type": "House",
      "built-form": "Detached",
      "construction-age-band": "England and Wales: 1930-1949",
      "tenure": "Owner-occupied",
      "total-floor-area": "151.0",
      "number-habitable-rooms": "6",
      "number-heated-rooms": "6",
      "energy-consumption-current": 193,
      "energy-consumption-potential": 127,
      "co2-emissions-current": 5.1,
      "co2-emissions-potential": 3.4,
      "environment-impact-current": 65,
      "environment-impact-potential": 77,
      "heating-cost-current": "831",
      "heating-cost-potential": "722",
      "hot-water-cost-current": "84",
      "hot-water-cost-potential": "84",
      "lighting-cost-current": "181",
      "lighting-cost-potential": "100",
      "walls-description": "Cavity wall, filled cavity",
      "walls-energy-eff": "Average",
      "walls-env-eff": "Average",
      "roof-description": "Pitched, 300 mm loft insulation",
      "roof-energy-eff": "Very Good",
      "roof-env-eff": "Very Good",
      "floor-description": "Suspended, no insulation (assumed)",
      "windows-description": "Partial double glazing",
      "windows-energy-eff": "Poor",
      "windows-env-eff": "Poor",
      "glazed-type": "double glazing, unknown install date",
      "mainheat-description": "Boiler and radiators, mains gas",
      "mainheat-energy-eff": "Good",
      "mainheat-env-eff": "Good",
      "hotwater-description": "From main system",
      "hot-water-energy-eff": "Good",
      "hot-water-env-eff": "Good",
      "lighting-description": "Low energy lighting in 18% of fixed outlets",
      "lighting-energy-eff": "Poor",
      "lighting-env-eff": "Poor",
      "mechanical-ventilation": "natural",
      "building-reference-number": "10002861034",
      "uprn": "100050926607",
      "inspection-date": "2022-05-16",
      "lodgement-date": "2022-05-16",
      "lodgement-datetime": "2022-05-16 16:17:53",
      "transaction-type": "marketed sale",
      "lmk-key": "ceb4fa4c0d4ecbd36ed9c623397c82d70675421a809234318d745bffc63d7e23"
    }
  }
}

Multiple EPC Certificates Response

{
  "success": true,
  "data": {
    "type": "domestic",
    "multipleResults": true,
    "count": 2,
    "results": [
      {
        "address": "15 Example Street",
        "address1": "15 Example Street",
        "postcode": "SW1A 1AA",
        "current-energy-rating": "C",
        "current-energy-efficiency": 70,
        "potential-energy-rating": "B",
        "potential-energy-efficiency": 82,
        "property-type": "House",
        "built-form": "Detached",
        "construction-age-band": "England and Wales: 1930-1949",
        "total-floor-area": "151.0",
        "energy-consumption-current": 193,
        "co2-emissions-current": 5.1,
        "heating-cost-current": "831",
        "hot-water-cost-current": "84",
        "lighting-cost-current": "181",
        "lodgement-date": "2022-05-16",
        "lmk-key": "ceb4fa4c0d4ecbd36ed9c623397c82d70675421a809234318d745bffc63d7e23"
      },
      {
        "address": "Flat 15 The Grange, 18, Example Street",
        "address1": "Flat 15 The Grange",
        "postcode": "SW1A 1AA",
        "current-energy-rating": "D",
        "current-energy-efficiency": 55,
        "potential-energy-rating": "D",
        "potential-energy-efficiency": 58,
        "property-type": "House",
        "built-form": "Enclosed End-Terrace",
        "construction-age-band": "England and Wales: before 1900",
        "total-floor-area": "82.72",
        "energy-consumption-current": 363,
        "co2-emissions-current": 5.0,
        "heating-cost-current": "788",
        "hot-water-cost-current": "96",
        "lighting-cost-current": "57",
        "lodgement-date": "2010-05-07",
        "lmk-key": "481565179602010050715463972500538"
      }
    ]
  }
}

Returns multiple EPC certificates only when the lookup matches different properties. Historic certificates for the same property are collapsed to the latest lodged certificate.

Client integrations must handle both data.result and data.results[]. Duplicate and historic same-property rows are collapsed before the response is returned.

Key Response Fields

FieldTypeDescription
typeStringCertificate type: "domestic" or "non-domestic". No-data lookups return 404 EPC_NOT_FOUND and are not charged.
address / address1StringProperty address as registered with EPC
current-energy-ratingStringCurrent EPC rating (A-G scale)
current-energy-efficiencyNumberCurrent energy efficiency score (1-100)
potential-energy-ratingStringPotential EPC rating with improvements
property-typeStringProperty type (House, Flat, Maisonette, etc.)
built-formStringBuilding form (Detached, Semi-detached, Terraced, etc.)
construction-age-bandStringConstruction period (e.g., "England and Wales: 1930-1949")
total-floor-areaStringTotal floor area in square meters
energy-consumption-currentNumberAnnual energy consumption (kWh/m²/year)
co2-emissions-currentNumberCurrent CO2 emissions (tonnes per year)
heating-cost-currentStringAnnual heating costs in GBP
walls/roof/windows-descriptionStringDetailed descriptions of building components
*-energy-eff / *-env-effStringEnergy and environmental efficiency ratings (Poor to Very Good)
lmk-keyStringUnique certificate identifier (Landmark Key)
lodgement-dateStringDate certificate was lodged (YYYY-MM-DD)
multipleResultsBooleanTrue when multiple distinct properties are found for the lookup

Complete Field List: The API returns 40+ detailed fields including component descriptions, efficiency ratings, cost breakdowns, building characteristics, and environmental impact data. All fields from the official EPC database are included when available.

Examples

Example 1: Single EPC Certificate

GET https://propertyinsights.co.uk/api/v1/epc/search?address=10%20DOWNING%20STREET&postcode=SW1A%202AA
X-API-Key: your_api_key_here
{
    "success": true,
    "data": {
        "type": "domestic",
        "result": {
            "address": "10, DOWNING STREET, LONDON, SW1A 2AA",
            "current-energy-rating": "C",
            "current-energy-efficiency": 75,
            "potential-energy-rating": "B",
            "potential-energy-efficiency": 85,
            "total-floor-area": 250,
            "property-type": "House",
            "built-form": "Detached",
            "construction-age-band": "1900-1929",
            "tenure": "Owner-occupied",
            "energy-consumption-current": 180,
            "co2-emissions-current": 3.2,
            "lighting-cost-current": 45,
            "heating-cost-current": 890,
            "hot-water-cost-current": 120,
            "lmk-key": "0000-0000-0000-0000-0000",
            "lodgement-date": "2024-06-10"
        }
    }
}

Returns complete EPC data for a single property with C rating and potential for B rating improvements

Example 2: Multiple EPC Certificates

GET https://propertyinsights.co.uk/api/v1/epc/search?address=BUCKINGHAM%20PALACE&postcode=SW1A%201AA
X-API-Key: your_api_key_here
{
    "success": true,
    "data": {
        "type": "non-domestic",
        "multipleResults": true,
        "count": 3,
        "results": [
            {
                "address": "BUCKINGHAM PALACE, LONDON, SW1A 1AA",
                "current-energy-rating": "D",
                "current-energy-efficiency": 60,
                "potential-energy-rating": "C",
                "potential-energy-efficiency": 70,
                "lmk-key": "0000-1111-2222-3333-4444",
                "lodgement-date": "2023-12-15"
            },
            {
                "address": "BUCKINGHAM PALACE EAST WING, LONDON, SW1A 1AA",
                "current-energy-rating": "C",
                "current-energy-efficiency": 72,
                "potential-energy-rating": "B",
                "potential-energy-efficiency": 82,
                "lmk-key": "1111-2222-3333-4444-5555",
                "lodgement-date": "2024-01-20"
            },
            {
                "address": "BUCKINGHAM PALACE WEST WING, LONDON, SW1A 1AA",
                "current-energy-rating": "E",
                "current-energy-efficiency": 45,
                "potential-energy-rating": "D",
                "potential-energy-efficiency": 58,
                "lmk-key": "2222-3333-4444-5555-6666",
                "lodgement-date": "2023-11-08"
            }
        ]
    }
}

Returns multiple EPC certificates when several exist for the same address (e.g., different wings of a large building)

Example 3: UPRN Lookup

GET https://propertyinsights.co.uk/api/v1/epc/search?uprn=100041196298
X-API-Key: your_api_key_here

Returns EPC data for a specific UPRN without requiring postcode or address parameters

Example 4: cURL Request

curl -X GET \
  'https://propertyinsights.co.uk/api/v1/epc/search?address=10%20DOWNING%20STREET&postcode=SW1A%202AA' \
  -H 'X-API-Key: your_api_key_here'

Example 5: JavaScript (fetch)

const response = await fetch('https://propertyinsights.co.uk/api/v1/epc/search?address=10%20DOWNING%20STREET&postcode=SW1A%202AA', {
  headers: {
    'X-API-Key': process.env.API_KEY
  }
})

const data = await response.json()

if (data.success) {
  if (data.data.multipleResults) {
    console.log(`Found ${data.data.count} EPC certificates`)
    data.data.results.forEach(cert => {
      console.log(`${cert.address}: Rating ${cert['current-energy-rating']}`)
    })
  } else {
    console.log(`Single EPC found: Rating ${data.data.result['current-energy-rating']}`)
  }
}

Error Handling

The API uses standard HTTP response codes and returns detailed error information in JSON format. All errors follow a consistent structure to help you handle them appropriately in your application.

HTTP CodeError CodeDescription
400MISSING_PARAMSPostcode or UPRN parameter is required; address is optional
400TOO_MANY_UPRNSOnly one UPRN can be searched per EPC request
404EPC_NOT_FOUNDNo EPC certificate found for the supplied postcode, address or UPRN
429RATE_LIMITEDToo many requests - rate limit exceeded
502EPC_LOOKUP_FAILEDUpstream EPC database service error
503SERVICE_UNAVAILABLEEPC service temporarily unavailable
401AUTHENTICATION_REQUIREDValid API key is required
402INSUFFICIENT_CREDITSNot enough API credits remaining to perform operation
500DATABASE_ERRORError accessing database - please try again
500INTERNAL_SERVER_ERRORAn unexpected error occurred

Error Response Format

{
  "success": false,
  "error": {
    "code": "EPC_NOT_FOUND",
    "message": "No EPC data found for this address"
  }
}

Rate Limits

API requests are subject to rate limiting based on your subscription plan. The current limits are:

PlanRequests per MinuteRequests per DayRequests per Month
Basic105005,000
Standard302,00030,000
Premium1005,000100,000
EnterpriseCustomCustomCustom

When you exceed your rate limit, the API will return a 429 Too Many Requests response. Each response includes the following headers to help you track your usage:

X-RateLimit-Limit: [requests-per-minute limit]
X-RateLimit-Remaining: [requests remaining in current window]
X-RateLimit-Reset: [timestamp when limit resets]

Performance Note: EPC searches typically complete within 200-500ms, making them suitable for real-time property searches and applications.

Need Help?

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