技術ログ

Companies House bulk data: 72,576 UK companies no postcode filter can match

公開: 2026-09-13 · 著者: GRAMSHIFT

A filtered count that comes back a little short looks exactly like a correct one

Companies House bulk data: 72,576 UK companies no postcode filter can match

Start with the number, because it is the reason this article exists. We read every row of the Companies House Free Company Data Product for 2026-09-01 — all seven files, 5,689,367 live companies — and looked for companies whose registered address, as the file gives it, contains no UK postcode anywhere and is not an address outside the UK. Our count, formatted by hand:

companies read                                              5,689,367
every address field empty                                      62,702
some address, country UK or blank, no postcode in any field     9,874
-----------------------------------------------------------------------
no postcode anywhere in the address                            72,576   (1.28%)

for comparison, not counted above:
postcode column empty, country outside the UK                  18,183
postcode column empty, but a postcode written in another field    481

72,576 live companies that a filter on the file's postcode column can never return. If you are building a local lead list, sizing a market by district, or checking whether every company in EC1V has been contacted, any of these companies that actually sit in that district are absent from your answer, and nothing in the file tells you so. The query does not fail. It simply counts fewer companies than exist.

The two lines under the total matter as much as the total. 18,183 rows have an empty postcode column because the address is abroad (the largest groups are the British Virgin Islands with 4,414 and the United States with 2,317), and leaving those out of a UK district search is correct. 481 rows have an empty postcode column but a UK postcode written into another address line, so a full-text search over the whole address would still find them.

Every figure below was counted on 2026-09-13 (Japan time) from the 2026-09-01 snapshot as downloaded from download.companieshouse.gov.uk: seven zip parts whose files were last modified on 7 September 2026. The snapshot is monthly, so these counts describe that file, not the live register on any later day.

Nine company types arrive with no address at all

The largest part of the gap is not random. For nine company types, not a single row in the file has any registered office address — no care-of line, no PO box, no street, no post town, no county, no country and no postcode:

Company type (as written in CompanyCategory)CompaniesWith any address
Charitable Incorporated Organisation40,4160
Registered Society10,8110
Scottish Charitable Incorporated Organisation7,9230
Royal Charter Company9090
Investment Company with Variable Capital6370
Industrial and Provident Society1590
Investment Company with Variable Capital(Umbrella)670
Investment Company with Variable Capital (Securities)80
Protected Cell Company30
Total60,9330

Two details in that table are worth copying exactly. First, the three Investment Company with Variable Capital types are written three different ways, including one with no space before the bracket. A type filter built from a tidied-up list will miss some of them. Second, the size: 40,416 Charitable Incorporated Organisations is 0.71% of the whole file, and they are exactly the organisations a charity-sector or local-community search is looking for.

We are not going to guess why these types carry no address in the bulk file. What matters for a pipeline is the consequence: for these nine types, an address-based filter is not a weak signal. It is a guaranteed zero.

The gap does not stop at those nine types

If the nine types were the whole story, you could special-case them and move on. They are not. Three more company types have some rows with every address field empty:

Company typeAll address fields emptyCompanies of that type
Other company type93115,508
Limited Partnership81361,003
Private Limited Company255,261,979

That is another 1,769 companies, bringing the rows with no address at all to 62,702 (62,692 of them give the United Kingdom as their country of origin). On top of those, 9,874 companies have at least one address field filled in, a UK or blank country, and no postcode in any address field. They have a street or a town, but nothing a postcode filter can match.

So the two filters people reach for first miss different sets. A post town filter misses at least the 62,702 rows with no address at all. A filter on the postcode column misses the 72,576 above. Neither number is large as a share of 5.7 million, which is exactly why it goes unnoticed: a district query that comes back a little short looks entirely plausible.

The honest way to handle it is to report the gap next to the result, together with the alternative: search the nine address-less company types by name, SIC code, company type or incorporation date instead.

231,523 companies with no industry, and 16,091 still on SIC 2003

The next filter people use is industry. The file carries up to four SICCode.SicText_n columns, written as code plus description, for example 62020 - Information technology consultancy activities. Two things in the full count change how that filter behaves:

  • 231,523 companies (4.07%) have None Supplied and no other SIC entry. A SIC filter cannot return them. That is more than three times the postcode gap above.
  • 16,091 companies still carry a four-digit SIC 2003 code (the pattern dddd - description) and no five-digit SIC 2007 code at all. Those codes come from a different classification, so a filter written against SIC 2007 codes should not treat them as the same numbers.

And one company in the file has five SIC entries, although the file's own layout has four SIC columns. That single row has more fields than the header, so a parser that assigns columns by position shifts every later column of that row by one — including the company URI. It is one row out of 5,689,367, which is precisely the kind of row that survives testing on a sample.

Only live companies, and only up to last month

Two boundaries of the product are stated on the Companies House download page, which describes the file as "basic company data of live companies on the register", but they are easy to forget when the file is sitting on a disk:

  • It holds live companies only. In the 2026-09-01 file, DissolutionDate is empty on all 5,689,367 rows. A dissolved company is not in the file, so "not found" for a company number means "not live in this snapshot" (or not a valid number), not "never existed".
  • It is compiled to the end of the previous month, in Companies House's own words "compiled up to the end of the previous month". The newest IncorporationDate in the 2026-09-01 file is 31 August 2026, and the files were last modified on 7 September. A company incorporated on 1 September appears in the next monthly file at the earliest.

Neither is a defect. Both become defects when the file is used as if it were the live register, for example to confirm that a counterparty is still trading today.

The header row has spaces inside the column names

The last trap is the one that breaks code before any of the above can matter. Each of the seven parts starts with a header row, the seven header rows are identical character for character, and they hold 55 column names, and 14 of those names begin with a space:

CompanyName, CompanyNumber,RegAddress.CareOf,RegAddress.POBox,RegAddress.AddressLine1, RegAddress.AddressLine2,...

The affected names are " CompanyNumber", " RegAddress.AddressLine2", " ConfStmtLastMadeUpDate", " PreviousName_2.CONDATE" and all ten " PreviousName_n.CompanyName" columns. A CSV reader that keeps header names as written will give you a column called " CompanyNumber", and a lookup by CompanyNumber will not find it. Trim header names before using them.

Because every part repeats the header, concatenating the seven files byte for byte also leaves six header rows in the middle of the data. And 948 records could not be split with the simple "quoted field, comma, quoted field" pattern: they needed a quote-aware parser. A reader that splits on "," will mangle those rows without raising an error.

What to check before you trust a filtered count

None of this needs a clever workaround. It needs a few questions asked of the file before an answer derived from it is reported:

  • Which rows can this filter never match? For postcode filters, the 72,576 companies with no postcode anywhere in a non-overseas address. For town filters, at least the 62,702 with no address. For SIC filters, the 231,523 with only None Supplied.
  • Are the category values copied exactly? Company types such as the three Investment Company with Variable Capital spellings only match when written as the file writes them.
  • Did the header survive? Trim column names, drop repeated header rows, and parse with a reader that handles quotes.
  • Which month is this? Carry the snapshot date into every row you produce, so nobody mistakes it for today's register.

These checks are built into the Companies House tool we publish — Companies House Scraper reads this same monthly file, searches by company number, SIC code, postcode, town, company type and incorporation date, explains an empty search in a free row (including, when a postcode or town filter is combined with one of the nine address-less company types, that the file holds no address for that type), marks None Supplied companies, puts the snapshot date on every row, and reports a company number that is not in the snapshot as not found instead of silently skipping it.

Published by GRAMSHIFT. All counts above were made on 2026-09-13 (Japan time) by reading every row of the Companies House Free Company Data Product snapshot dated 2026-09-01 (seven parts, last modified 7 September 2026). Source: Companies House. Contains public sector information licensed under the Open Government Licence v3.0; this article is not affiliated with Companies House. On the use of AI: the counting scripts (which reuse the file-reading code of our own tool) and this article were written by Claude, an AI model, working for GRAMSHIFT; every figure in the text was compared against the scripts' saved output before publishing.

よくある質問