# A UK postcode is not an address

What open postcode data answers, what it cannot, and what a Postcode Address File licence actually buys — with the numbers from the copies installed here.

Date: 2026-09-05

"Just look up the postcode" is the most reasonable-sounding request in address handling, and the one that runs into a wall fastest in the United Kingdom. A postcode is not an address and does not contain a list of addresses you can have. This guide sets out precisely what the open data answers, where the line is, what sits on the other side of it, and how an honest API should behave when you ask for something that is not open.

## What a postcode is

A UK postcode is a routing unit. It identifies a group of delivery points that are convenient to walk or drive together — typically one side of a street, or a single large building, or a single business that receives enough post to need its own code. It is not a place, not a boundary, and not an address.

The scale is published by Royal Mail, which maintains the file behind it: the Postcode Address File holds "over 32 million UK postal delivery addresses" and "1.8 million UK postcodes" (https://www.poweredbypaf.com/, accessed 5 September 2026). Divide one by the other and the average postcode covers roughly eighteen delivery points — but the average is nearly useless, because the distribution is extreme. A residential code might cover twelve houses; a single office block or a large mailroom can have a code entirely to itself.

That same page reports 10,798 changes made to the file in the preceding week. Addresses are not a static reference table; they are a stream.

## What the open data answers

Two open releases carry British postcodes, and both are published under the Open Government Licence v3.0.

- **The ONS Postcode Directory**, published on the ONS Open Geography Portal (https://geoportal.statistics.gov.uk/, accessed 5 September 2026), lists current and terminated postcodes with a centroid and the dates each was introduced and terminated. The August 2026 release installed here holds 2,665,797 postcodes: 1,760,216 live and 905,581 terminated.
- **OS Code-Point Open**, from Ordnance Survey (https://www.ordnancesurvey.co.uk/products/code-point-open, accessed 5 September 2026), carries live codes with coordinates and is about a third smaller, because it does not carry the retired ones.

Those two figures are worth sitting with. More than a third of the postcodes in the historical directory are retired, and a retired postcode is not a typo — it is very often a real address whose code was reorganised years ago and is still sitting in someone's CRM. A checker that refuses it as invalid throws away a real customer. Spaw keeps it, answers `postcode_status: terminated`, and adds 30 points to the risk score so the row surfaces for correction instead of deletion.

Northern Ireland is a separate matter. The ONS directory carries BT postcodes, but reusing them requires a licence from Land & Property Services, so they are excluded from the copy installed here — 63,293 codes. An address with a BT postcode is therefore answered as though no directory were installed for it, rather than as though the postcode did not exist. That distinction is the whole discipline of this product in one example: not knowing and knowing-not are different answers.

## What the open data does not answer

It does not answer which addresses are inside a postcode.

That direction — postcode to list of delivery points — is the Postcode Address File itself, and the file is licensed. Royal Mail publishes licensing terms, pricing and a licensee search precisely because commercial use requires an agreement. The derived product most developers meet is Ordnance Survey's AddressBase family, which is sold through the OS Data Hub rather than released openly; Ordnance Survey has announced that AddressBase and AddressBase Plus reach end of life in Autumn 2027, replaced by OS GB Address and OS Islands Address (https://www.ordnancesurvey.co.uk/products/addressbase, accessed 5 September 2026).

There is no open substitute. Every complete UK address list traces back to that file, so a product that hands you one either holds a licence or is redistributing somebody else's. This is why Spaw's postcode endpoint exists, is documented, and answers `501 ADDRESS_LIST_UNAVAILABLE` while no licensed partner is configured — and charges nothing for saying so. The request and response shapes are fixed now, so nothing in your client changes if an agreement is ever signed. See the [GET /api/v1/address/postcode reference](/docs/api/find-addresses-by-postcode) for the exact contract.

## What a licence buys you

Three things, roughly, and it is worth knowing which one you actually need:

1. **The delivery-point list.** Every address behind a postcode, with the identifiers that let you join addresses across systems. This is what "address autocomplete" is made of, and it is the expensive part.
2. **Deliverability.** Whether post is actually delivered to a given address, plus the operator's own classifications of the delivery point. Spaw's `deliverability`, `is_deliverable`, `is_cmra`, `is_vacant` and `is_residential` fields are shaped for this and answer `deliverability_checked: false` until a partner is configured.
3. **Redistribution rights, or the lack of them.** Licences constrain what you may do with the output. Deriving your own address list from a licensee's answers and selling it is the thing the terms exist to prevent, so a cache of whole partner answers with a bounded lifetime is legitimate where an accumulating Spaw-owned copy of the file would not be.

If what you need is validation rather than autocomplete, you may need none of it.

## What you can answer without a licence

Quite a lot, as it turns out, and it is the part people skip past on the way to asking for the address list.

- **Does this postcode exist?** Yes or no, against the national directory. When the shape is right but the code is absent, Spaw answers `valid: false` with the reason [`postcode_not_found`](/docs/reasons/postcode_not_found), free of charge.
- **Is it live or retired?** `postcode_status`, from the same directory.
- **Where is it, roughly?** The directory's published centroid, reported as `latitude`, `longitude` and `location_source: postcode_centroid`. It is a centroid, not a rooftop, and calling it one would be a lie of precision.
- **Does the address stand up for its own country?** The format, the required lines, the postcode pattern, the town, the house-number position — none of that needs the address list.
- **What kind of delivery point is it?** A box, a private mailbox, general delivery, a parcel locker or a street address, read from the words the operator uses itself.
- **What do the open company registers say about it?** How many companies give the address as their registered office, which is how the mail-drop signal is built.

One honest limit: the comparison between the town on an address and the town published for its postcode is only made where the directory carries a town name. The ONS release installed here (5 September 2026) does not, so in Great Britain `locality_matches_postcode` answers `null` — not evaluated — rather than a guess in either direction.

Try any of it on the [free postal address checker](/tools/address-checker), which runs the same pipeline as the API.

## What to do with it

- **Validate on the postcode, correct on the address.** Reject `postcode_not_found`; review, do not delete, a terminated one.
- **Do not build a postcode-to-address table from lookups.** That is the thing the licence terms are about, and rebuilding a licensed file from a licensee's answers is not a loophole.
- **Do not treat a centroid as a location.** It is fine for routing, region assignment and rough distance; it is not fine for "is this delivery inside the zone" at street granularity.
- **Handle Northern Ireland explicitly.** Null there means the directory was not consulted, not that the postcode is wrong.

## What to do next

- Run a postcode through the [free postal address checker](/tools/address-checker) and see the live, terminated and not-found answers side by side.
- Read the [address verification guide](/docs/address-verification) for every field and its dataset.
- Read [how to read an address-existence answer](/guides/how-to-read-an-address-existence-answer) for the register half of the question.
- See what the endpoint will answer once a licence exists on the [GET /api/v1/address/postcode reference](/docs/api/find-addresses-by-postcode).

Reference: https://spaw.co/guides/a-uk-postcode-is-not-an-address
