Skip to content

Can you look up UK addresses from a postcode for free?

published · September 5, 2026 · updated · October 14, 2026

Not the addresses: every full UK list derives from Royal Mail’s licensed PAF. Free: whether a postcode exists, its status, centroid, places, district streets.

Not the addresses themselves. Every complete list of UK delivery addresses derives from Royal Mail's Postcode Address File, and using it needs a licence. What is free and open is most of what people actually need from a postcode: whether it exists, whether it is live or retired, roughly where it is, which places it is written with, and which streets run through its postcode district. This guide sets out precisely where that 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.

"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, because a UK postcode is not an address and does not contain a list of addresses you can have.

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

Three open releases carry British postcodes and streets, and all three 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.
  • OS Open Names, also from Ordnance Survey, carries "place names, roads numbers and postcodes for Great Britain" and is "updated every three months" (https://www.ordnancesurvey.co.uk/products/os-open-names, accessed 22 September 2026). It files every named and numbered road under a postcode district — the SW1A of SW1A 2AA — and names the populated place, borough, county and region each postcode is written with. Spaw has installed it since 16 September 2026.

The first 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 in the August 2026 release — and Open Names carries no Northern Irish roads. The honest answer for a BT postcode is "not evaluated": not knowing and knowing-not are different answers, and that distinction is the whole discipline of this product. An address with a BT postcode is therefore answered with postcode_status null, as though no directory were installed for it, rather than as though the postcode did not exist. It carries no centroid and no town or county comparison, and it is never refused as postcode_not_found.

Two more kinds of British code are answered the same way, because the directory never lists them: the British Forces Post Office's numbers (BFPO 15) with their BF1 postcodes, and the non-geographic BX codes some government departments receive post on, such as HMRC's BX9 1AS. The August 2026 release carries no row under either area, so a missing code there says nothing about whether it exists.

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 for the delivery-point list. 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.

What Spaw's postcode endpoint answers for Great Britain is therefore the open half. GET /api/v1/address/postcode/{postcode} lists the streets Open Names files under the postcode's district, in Open Names spelling, with no house numbers. It costs 1 credit; asking again for the same postcode within seven days is free. A district Open Names files no street under is not answered with an empty list. Open Names files each road under one district, though a long road runs through several, so it cannot vouch that it lists every street at a postcode and its silence is not evidence that nothing is there: the endpoint answers 501 ADDRESS_LIST_UNAVAILABLE instead, free, with a message saying the listing does not cover the postcode.

One answer carries at most 100 streets, in alphabetical order, and most British districts hold more: in the listing installed here on 22 September 2026, 2,250 of the 2,752 districts carried more than 100 street names, and the median district carried 291. GET /api/v1/address/streets answers a district's whole list in one call, at the same credit and under the same seven-day repeat. The district is wider than the postcode — a street listed there may not reach the code you asked about, and a long road filed under a neighbouring district will not appear — so treat the answer as the streets of the area, not the streets of the postcode.

The full delivery-point list still needs a licence derived from the Postcode Address File; no licensed partner for it is enabled, and the request and response shapes are fixed now so nothing in your client changes if one ever is. 501 ADDRESS_LIST_UNAVAILABLE is what the endpoint answers, free, for a country that has neither a licensed list nor an open street listing. It answers the same, free, for a British code Open Names does not cover — a Northern Irish BT postcode, a forces BFPO number or BF1 postcode, or a non-geographic BX code — and, as above, for a district Open Names lists no street under; the message says why. See the GET /api/v1/address/postcode reference 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, free of charge. A code the directory does not cover — BT, BFPO, BF1 or BX — answers postcode_status: null instead.
  • 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 town belong to it? British postcodes now carry the places Open Names writes them with, so locality_matches_postcode answers for the postcodes Open Names lists rather than staying null. Most terminated codes are not among them, and those still answer null. The check is lenient on purpose: the populated place, the borough, the county and the region all confirm, a town the directory lists elsewhere in the postcode area reads as a near match with no weight, and only a town found nowhere in the area carries the locality_mismatch weight of 30. What a street match means in Great Britain has the detail.
  • Which streets are in its district, and is this one of them? A written street Open Names files under the postcode's district answers match_level: street; exists stays null, because a register of streets can say nothing about a building. Every district also has a public page in the British postcode district directory, with its places, its live and terminated postcode counts and its streets.
  • Does the address stand up for its own country? The format, the required lines, the postcode pattern, 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.

Try any of it on the free postal 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.
  • Use the district's streets as a pick-list, not as proof. They tell you which street names belong to the area; they do not tell you that a house number exists on one of them.
  • 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. A BT postcode is not in the directory installed here, so it answers postcode_status: null. Null there means the directory was not consulted, not that the postcode is wrong.

What to do next

Related

markdown version: /guides/a-uk-postcode-is-not-an-address.md

Verify addresses the same way

The Spaw API runs every check described here on each lookup, with an SMTP handshake that never sends mail. 10 free lookups a month, no card required.

Get your API key

More guides