Charlie Clyde

Writing • Projects • Curriculum Vitae • About

Scroll

§ 01

About

Based in
Guildford, United Kingdom
Status
Looking for opportunities
Focus
AI · Entrepreneurship · Technology
Curriculum vitae
Download PDF

Indefinitely NEET. Almost everything I am working on is on this website. Contact me for more information, or to discuss opportunities.

I thoroughly enjoy the process of an idea growing into an executable plan, and ultimately results.

§ 02

Projects

01

Latch.events (Startup Application)

Founder and Developer

Developing a student-focused events platform for discovering and managing university societies, social events and parties, with an emphasis on secure user verification, payments and location-based functionality.

  • Building the app in TypeScript using React Native, Expo and Supabase for cross-platform deployment.
  • Integrating services such as Stripe, authentication and real-time data while learning secure handling of user, payment and location information.
  • Using Claude Code throughout development to improve AI-assisted coding, agentic workflow automation and rapid product iteration.
The Latch app's Home screen: your societies along the top, then events and socials, then announcements

02

West Midlands Company Categorisation (Public Sector)

Data analysis and modelling

Categorising 205,551 active West Midlands companies to shortlist about 1,500 for a GVA led regional growth programme.

  • Utilise OSINT techniques to categorise and analyse data.
  • Build a probabilistic model (AUC 0.83) to extrapolate for missing entries.
  • Now building a 12-month growth forecast model to determine the final shortlist.

Machine learning · OSINT · Data analysis · Python · Node.js · PowerShell

Research paper · October 2026

Identifying Growth-Programme Targets Among 205,551 West Midlands Companies: Data, Methods and Findings

Using only free official data, 146,095 of 205,551 active West Midlands companies were sized or classified, identifying 12,417 firms with 8–300 staff. The remaining 59,456, mostly companies yet to file accounts, were ranked by their likelihood of having staff.

Abstract

A regional growth company needed about 1,500 West Midlands firms with roughly 10–250 staff to approach with consultancy aimed at raising gross value added (GVA). No public dataset gives headcount for every company, so we built one from the employee note that UK companies must include in their annual accounts.

We read the machine-readable (iXBRL) accounts of every listed company from Companies House bulk files, downloading only the parts needed (about 1–1.5 GB instead of about 31 GB). For the 6,656 companies that file on paper or as PDFs, we retrieved 6,295 scanned documents through the Companies House API and read them with optical character recognition (OCR), rebuilding tables from word positions. For companies that have not yet filed accounts, we matched four free registers (company ownership, the Home Office visa sponsor list, the Care Quality Commission and Food Standards Agency hygiene ratings) and trained a model on 38,454 young West Midlands firms to estimate each one's chance of having 8 or more staff.

Of 205,551 active companies, 146,095 were sized or classified and 12,417 fall in the 8–300 band; 1,737 of these came from scanned accounts. After corrections, 36 of 37 hand-verified scanned figures were right. A regression test of the electronic reader exposed a scale defect in 9,560 figures; correcting it brought 1,751 more firms into the band, and 8 of 8 sampled corrections matched their accounts. The model separates firms well (AUC 0.83; 17.3% predicted against 15.6% actual in its top decile). It expects about 1,729 of the 59,456 unsized firms to have 8 or more staff, and about 268 of them sit in a prioritised list of 2,471 new firms. A growth-forecast model to choose the final 1,500 is specified and pre-registered.

1. Introduction

The aim is a target list of about 1,500 firms with 8–300 staff (10–250 at the core), drawn from all 205,551 active companies registered in the West Midlands. The client is a regional quasi-public growth company that consults with firms to raise gross GVA, so firms are not excluded for serving local markets.

Headcount is the deciding filter, and it is hard to get at scale:

  • Registers don't carry it. Companies House records names, addresses, industry codes and accounts types, but no staff numbers.
  • The figure exists, but in the accounts. Every company must state its average number of employees in the notes to its accounts (Companies Act 2006, s.411). That's a monthly headcount of people on contracts of employment, averaged over the year.
  • The accounts come in three forms: machine-readable files for most firms, scanned paper or PDF documents for about one firm in 30, and nothing yet for companies less than about 21 months old.
  • The no-cost rule. Commercial databases sell estimates, but the brief ruled out anything that costs money.

This paper describes how each form was handled, the problems met and how they were fixed, how accuracy was checked, and what the resulting dataset shows. The selection of the final 1,500 and the growth projections follow in a separate section.

2. Data sources

Every input is free and official, so the whole dataset can be rebuilt and checked by anyone.

SourceWhat it providesScale usedAs at
Companies House accounts data (monthly and daily)Machine-readable accounts, including the average number of employees13 monthly files (≈31 GB) plus 10 daily files; 152,781 filings readSep 2025 – 14 Oct 2026
Companies House historic accounts dataOlder accounts for firms with no recent electronic filing20 monthly files; 10,266 filings readJan 2024 – Aug 2025
Companies House basic company dataAccounts type, industry (SIC) codes, status, incorporation date, registered chargesAll 205,551 listed companies matched1 Oct 2026
Companies House public data API (free key)Each company's filing history and accounts documents6,656 companies; 6,295 scanned PDFsOct 2026
Persons with significant control (PSC) snapshotWho owns each company: people and parent companies16.05 million records; 198,570 listed firms with owners15 Oct 2026
Home Office register of licensed sponsorsEmployers licensed to recruit workers from abroad143,220 employers; 5,396 matched15 Oct 2026
Care Quality Commission care directoryRegistered care services, care-home beds, provider company numbers57,098 active locations; 1,471 companies matched1 Oct 2026
Food Standards Agency hygiene ratingsFood businesses trading from premises24,514 businesses in 7 councils; 7,534 companies matched14 Oct 2026

Three other routes were assessed and rejected:

  • A public web-crawl company dataset turned out to be a 2019 snapshot, older than every new firm.
  • Automated LinkedIn tools break LinkedIn's terms, cost money, and count profiles rather than payroll.
  • Web searches found no headcount for any of 10 sampled new firms.

3. Methodology

Each company went through up to four stages, from the cheapest and most reliable source to the hardest, and only the companies still unresolved moved on to the next stage. One program carries out every stage (section 3.1); section 3.6 shows how its output was verified, and section 3.7 sets out the growth-forecast model built on it.

Three stages size 146,095 companies and rank the rest 1. Electronic accounts and company register In: 205,551 active West Midlands companies Tagged accounts from bulk files, joined to the register Out: 141,138 sized or classified (18,541 dormant) 64,413 unsized; 6,656 have scanned accounts 2. Scanned accounts: API and OCR 6,295 scans retrieved through the Companies House API Read by OCR; tables rebuilt from word positions Out: 4,957 sized, 1,745 of them in the band 59,456 still unsized (57,671 too new to have filed) 3. Ranking the unsized Signals: ownership, visa sponsors, CQC, food premises, charges Model trained on 38,454 young firms, AUC 0.83 Out: 2,149 group-linked, 762 likely 8+, 2,471 new-firm list 12,417 firms with 8–300 staff 10,672 from electronic accounts 1,737 from scanned accounts 8 via the API 36 of 37 hand checks correct
Figure 1. Each stage passes on only the companies it could not size. Both accounts stages feed the 8–300 list; the third ranks the firms that have no figure yet.

3.1 The program

Every stage is carried out by one program, kept in a private Git repository (wm-growth-model) so that any figure in this paper can be rebuilt from free public files. It has two halves: data collectors written in Node.js 24 with Windows PowerShell, and a forecasting package in Python 3.12 (section 3.7).

ComponentLanguageWhat it does
extract_facts.mjs, lib/xbrl_facts.mjs, lib/remote_zip.mjsNode.jsReads Companies House bulk accounts zips remotely and turns each iXBRL or XBRL filing into dated facts (section 3.2)
extract_employees.mjsNode.jsThe original staff-only reader used for the 15 Oct 2026 run, kept as the regression baseline
ch_docs.mjsNode.jsFetches the latest accounts of paper and PDF filers through the Companies House API
ocr_pdf.ps1, ocr_runner.mjs, ocr_extract.mjsPowerShell, Node.jsRenders scanned pages, runs Windows OCR in parallel, and extracts the staff note (section 3.4)
psc.mjs, signals.mjs, free_sources.mjsNode.jsOwnership links, visa-sponsor, CQC and food-premises matching
combine.mjs, rank_noaccounts.mjs, make_zip.mjsNode.jsJoins the register, classifies every company, ranks the unsized ones and writes the CSV outputs
regress_employees.mjs, patch_cache.mjs, rebuild_csvs.sh, compare_outputs.mjsNode.js, BashRegression testing, targeted re-reading and before-and-after comparison of outputs (section 3.6)
model/PythonThe growth-forecast model: panel, labels, models, calibration, backtests and selection (in build)

Five design rules apply throughout:

  • Point in time. Every value is stored with the date it became public, so a test set in the past can only see what was known then.
  • Deterministic. Random choices use fixed seeds. The national sample of companies uses a stable hash of the company number (FNV-1a), so every machine draws the same sample.
  • Resumable. Each bulk file's output is written to a temporary file and renamed only when complete, with a record of its counts. Finished files are skipped on re-runs.
  • Tested. 16 unit tests on synthetic filings run on every change, on a Windows build server. A regression test compares new output with the published results before anything is replaced.
  • No data or personal data in the code. Inputs are re-downloaded or read from the project folder. The API key is held in an environment variable, and officer names are never stored.

3.2 Reading electronic accounts at scale

About three-quarters of UK accounts are filed as inline XBRL (iXBRL): web pages in which every figure is tagged with a concept, a reporting period and a unit. Companies House publishes them in monthly zip archives of 1.6–4.1 GB, and in daily files kept for 60 days.

Remote access. A zip file's index (its central directory) sits at the end of the file. The reader fetches the last 64 KB with an HTTP range request and finds the end-of-directory record. For files over 4 GiB it follows the ZIP64 locator. It then downloads only the index, about 20–50 MB per monthly file.

Each entry's name carries the company number and balance-sheet date, for example Prod224_2512_09564242_20250430.html. Entries are then read in one of two ways:

  • Selected companies. One range request per entry. The 15 Oct run used this, moving about 1–1.5 GB instead of about 31 GB.
  • Whole files. Contiguous 32 MB blocks, cut into entries at the offsets recorded in the index. This mode builds the national history.

Entries are decompressed (DEFLATE) and parsed in parallel worker threads.

Fact model. Each filing is reduced to numeric facts. A fact is a concept, a context, a unit, a value and a stated precision.

  • Context: gives the period, as a start and end date for flows or an instant for balances, plus any dimension members (for example creditors due within one year, a staff category, or group versus company).
  • Unit: separates pounds from other currencies and from pure counts.
  • Plain XBRL: files without inline tagging are read the same way, from their elements' context and unit references.

Value rules. The displayed text is converted by its stated format:

  • digit grouping, with point or comma decimals
  • "zero-dash" and "fixed-zero" marks read as 0
  • worded numbers from "nil" to "twenty"

The value is then the displayed number × 10scale, negated when the sign attribute is "−". Facts marked nil are dropped, and a repeated concept–context pair is kept once.

Staff figure. The legal disclosure is the average number of employees (Companies Act 2006, s.411). It is resolved by seven rules, in order:

  1. Use the concept AverageNumberEmployeesDuringPeriod, or its older UK GAAP equivalents.
  2. The current year is the context ending on the balance-sheet date. The prior year is the latest earlier period end. Both are kept, so every filing gives two years.
  3. An undimensioned total wins. If only dimensioned figures exist and one dimension separates group from company, the consolidated group figure is used. Group and company are never added together. Staff categories are summed within the chosen entity.
  4. A negative scale on a headcount is ignored and the displayed number kept. From about August 2025 some filing software tags headcounts with scale −2, which would turn 14 staff into 0.14 (section 3.6).
  5. A whole number equal to the period's year, give or take one, is rejected as a mis-tagged column heading. The exception is when another staff figure in the same filing is within a factor of two, so a firm of 2,025 with 1,950 the year before is kept.
  6. If no usable tagged figure remains, a text reader looks for the employee sentence ("the average number of employees during the year was 23 (2024: 21)"). It deletes dates, years and note numbers, then takes the first count.
  7. Dormant accounts carry no employee note. They are detected from the dormant flag (EntityDormantTruefalse = true) or a "Dormant Company Accounts" title, and classed as having no staff.

Other facts and fields.

  • Full fact set: kept for filings showing 4 or more staff in either year, for every West Midlands company, and for any filing without a staff figure. Smaller filings keep headline totals only: turnover, net assets, current assets, debtors, cash and fixed assets.
  • Filing-level fields: entity name, registered number, period dates, accounts type, audit status, accounting standard, postcode and town, and which statutory statements are present (for example the s.477 audit exemption).
  • Text flags: a material uncertainty over going concern, a qualified audit opinion, wording about a business combination, and furlough.

Availability date. A filing in a monthly file counts as public from the 1st of the following month, and one in a daily file from the next day. This conservative rule is what lets the forecasting panel replay any past date without seeing later filings (section 3.7).

Coverage and speed.

  • Coverage: thirteen months of filings (Sep 2025 to 14 Oct 2026) gave 152,781 filings for 132,374 companies, with no download errors. A second pass over Jan 2024 – Aug 2025, for companies still unresolved, added about 5,800 figures.
  • Speed: on a 15 W laptop processor with 11 worker threads, a 72 MB daily file of 9,977 filings was parsed in 11–17 seconds with no errors. Stored output averages about 220 bytes per filing, compressed.

3.3 Joining the company register

Each company's latest accounts were joined to the Companies House register snapshot. This adds accounts type, industry codes, incorporation date, status and registered charges, and assigns a result: a size band, dormant, or unknown with a reason. Every figure carries its source and a confidence level.

3.4 Scanned accounts: retrieval and OCR

For the 6,656 companies with no electronic accounts since January 2024, the Companies House API supplied each one's latest accounts: 6,295 scanned PDFs, 123 electronic documents and 238 with no usable document. The scans are images with no text layer, so they were read with the OCR engine built into Windows, which needed no extra software.

  • Finding the right page. The employee note sits 55–95% of the way through a set of accounts, so reading starts at the middle, runs to the end, then works back. It stops once the note is found.
  • Rebuilding tables. OCR returns words with positions but loses table structure, so rows and columns were rebuilt from word coordinates.
  • Reading the figure. The figure is read from a sentence, a "no employees" statement, a table total, the sum of staff categories, or a figure on the heading line. It is scored high, medium or low confidence.
  • Throughput. Up to 13 parallel workers ran at the machine's limit. Any document where the early stop missed the note was re-read in full: 240 documents, 5,152 pages.

3.5 Firms with no published accounts

Companies less than about 21 months old have not yet filed accounts, so no headcount exists for them. Instead they were ranked using free signals and a statistical model, and linked to any established firm under the same ownership (section 7).

3.6 Verification and re-processing

The new reader was tested against the old one before any output changed. The test exposed a scale defect that had dropped 1,751 firms out of the 8–300 band. The affected filings were re-read and every output rebuilt, which moved the band from 10,673 to 12,417 firms.

Unit tests. Sixteen synthetic filings each isolate one case:

  • Periods and values: prior-year figures; scale, sign, zero-dash and nil values; dimensions
  • Staff-figure rules: group versus company; a negative scale on a headcount; dormant accounts; a year heading tagged as staff; a genuine 2,025-staff firm
  • Formats and storage: plain XBRL; untagged text; the size pre-filter; slicing entries out of zip blocks

They contain no real company data and run on every change.

Regression test. The 14 Oct 2026 daily file (9,977 filings) was re-parsed with the new reader. Each of its 382 West Midlands filings was compared with the published figure, and every difference was classified:

OutcomeFilingsWhat the source document shows
Identical figure314—
Negative-scale correction33Tags read "5", "14", "2" with scale −2; the old reader gave 0.05, 0.14, 0.02
Dormant accounts the old reader missed35Titled "Dormant Company Accounts" and flagged dormant; already classed dormant from the register
Unexplained0—

Scope of the defect. The old figures held 9,466 fractional headcounts. They start in filings from about August 2025, which points to a change in one software package. A real 100, 200 or 300 would have shown as a whole 1, 2 or 3, so every such figure from July 2025 on was re-read as well. In all, 75,937 filings across 26 bulk files were re-read, with no errors.

Result. 9,563 figures changed:

  • 9,560 scale corrections: 1,751 firms moved into the band.
  • 5 year headings tagged as staff: 2 were resolved from the note text and 3 have no usable figure.
  • 7 firms left the band:
    • 4 genuinely employ 814 to 1,310 staff, as their accounts notes confirm.
    • 1 has a single employee.
    • 2 give no usable figure.

Check. Eight corrected firms were drawn at random with a fixed seed. All eight matched the employee note in their accounts: 14, 96, 27, 24, 20, 272, 8 and 9 staff.

Rebuild. The original merge steps were re-run on corrected copies of the stored figures: register join, ownership and sponsor signals, the ranking model, the final CSVs and the zip.

  • The original figures and files were kept unchanged.
  • Each corrected firm's row says what was changed and what it read as before.
  • A separate file lists every firm whose figure or result moved.

3.7 The growth-forecast model

The 1,500 firms are chosen by each firm's forecast chance of hitting a size-based growth target over the next 12 months. The design below was fixed before any model results were seen, so it can be tested honestly. It is being built in stages, and an extra component is kept only if it beats simpler rules on years the model never saw.

Success test. Let B be the firm's financial year ending between 16 Oct 2026 and 15 Oct 2027, and T the year after it. Both are annual averages, so comparing T with B measures growth over a window that, across firms, is centred on the next 12 months (±6 months). For any one firm the horizon runs from about a year (October year-ends) to about 2.5 years (September year-ends), and the outcomes are known only by mid-2029.

With n the average staff in B, the target rate is:

  • r(n) = 20% when n < 50
  • r(n) = 20% − 13% × ln(n/49) ÷ ln(250/49) when 50 ≤ n ≤ 250, giving about 16.6% at 75, 14.3% at 100, 11.1% at 150 and 8.8% at 200
  • r(n) = 7% above 250

A firm hits its target if either route is met:

  • Staff route: staff in T ≥ (1 + r) × staff in B, and at least 2 more staff when n < 50.
  • Revenue route: real turnover in T ≥ (1 + r) × real turnover in B. This route applies only where turnover is published for both years and both periods run 50–54 weeks. Turnover is converted to constant prices with the GDP deflator.

The remaining outcomes are classed as follows:

  • Closure: dissolution, liquidation, administration, or a pre-pack into a successor company is a miss.
  • Paper accounts: accounts filed only on paper are read by OCR rather than counted as misses.
  • Late accounts: accounts still missing three months after the deadline count as misses. A sensitivity run excludes them.
  • Acquisitions: growth from buying another company is deducted where it can be detected.

Sensitivity variants are fixed in advance:

  • a rebound-proof target, (1 + r) × the larger of B and the latest reported figure
  • stepped targets of 20, 15, 10 and 7%
  • nominal revenue
  • no +2 rule

Point-in-time panel. The unit is a company in a financial year, drawn from every UK electronic filer from January 2017 to October 2026. Prior-year comparatives extend this back to financial years 2015–16. The national scope matters because the region alone has too few larger firms to learn from: only 77 West Midlands companies have 251–300 staff.

Snapshots are taken as of 15 April and 15 October each year. Each one uses only what was public before its date:

  • filings, by availability date
  • API events, by filing date
  • economic series, by publication date
  • forecasts, as published at the time

For the remaining fields:

  • Feature values: come from each figure's first publication.
  • Labels: come from the target-year filing's own current and comparative figures, so both years share one definition.
  • Register fields: fields that exist only as today's snapshot (status, industry code, address) are never training inputs. Accounts type, audit status and address are taken from each filing.
  • Dissolved firms: included, with their status, closure date and postcode from the Companies House API (which covers dissolutions since 2010), so the panel does not learn from survivors only.
  • Paper filers: added from OCR, because paper filing rises sharply with size: 5% of firms with 8–9 staff, 59% at 100–249 and 78% at 250–300. The sample covers every West Midlands paper filer and a national sample of about 3,000 with 50–400 staff.

Inputs.

FamilyInputs
Size and historyHeadcount; staff trend over 1–5 years; acceleration; volatility; distance below a past peak; years of history; firm age. The trend is smoothed with a one-sided Kalman filter, whose noise variance is estimated from restated comparatives
FinanceReal turnover growth, margins, and pay and revenue per head where published. Net assets; cash and current ratios; gearing; growth in debtors, creditors and fixed assets; intangibles; dividends
Filing signalsMoving up an accounts category, first audit, going-concern wording, late filing, year-end changes, time since the latest accounts
Events since the latest accountsShare allotments, new charges, director appointments, ownership changes, office moves, public contracts, grants
Ownership and managementGroup size, parent location, investor backing, board size and tenure, all rebuilt as of each date from dated officer and owner records
Place and economyIndustry section and division; council area; deprivation; local cluster density; lagged sector and area employment growth; wage-floor exposure; energy intensity; debt × Bank Rate; automotive and tariff exposure

Directors' sex, nationality and age are excluded.

Models. The models compete as a tournament:

  1. Benchmarks: random choice within quota; last year's growth repeated; the 3-year trend; the sector average; a plain logistic regression; the earlier points-based score.
  2. Challenger: a penalised logistic regression with splines on about 30 inputs.
  3. Main model: gradient-boosted trees (LightGBM) fitted directly to the binary label.
    • The gap since the latest accounts is an input.
    • Monotone constraints are used only where the direction is certain.
    • Tuning is nested and time-ordered, on a grid fixed in advance.
    • The model is refitted 20 times on resampled data and averaged.
  4. Add-ons, each kept only if it beats the main model by a pre-registered margin. The nowcast, the events layer and the closure score are tested in v1; the other three only after v1 ships, to limit the comparisons made on six vintages of data:
    • a base-year staff nowcast
    • an API events layer
    • a whole-number headcount model for firms under 50
    • pooled sector × area effects
    • a closure-risk score
    • the paper-filer sample
  5. Calibration: logit p = a + b · logit(score), plus a West Midlands offset and size-band offsets. It is fitted on out-of-time predictions from folds other than the one being scored.
  6. Economy: a scenario shift on the logit for each of about eight sector groups, estimated from how yearly hit rates moved with sector employment growth and shrunk toward one national value. The history is short, so this is a judgement overlay: it moves the headline probability and its range, and never changes the ranking. Base, downside and upside scenarios for 2027 come from the OBR forecast of 28 Oct 2026, the Bank of England, its Decision Maker Panel and the regional PMI.
  7. Reasons: each firm's main reasons come from SHAP values.

Selection.

  1. Exclusions: charities and not-for-profits, dormant firms, and firms that aren't active. The other exclusions are switches.
  2. Groups: one entry per group.
  3. Quotas: places are shared in proportion to the eligible pool across six size bands (8–9, 10–19, 20–49, 50–99, 100–249, 250–300).
  4. Ranking: within each band, firms are ranked by calibrated chance of a hit, in 5-point tiers, then by expected added gross GVA. Each firm must beat its band's base rate, and each council area keeps at least 75% of its share of places (section 9).

Firms with 8–9 staff also need dated evidence of growth: one hard item or two soft ones.

  • Hard items:
    • Sustained growth: up in 2 of the last 3 years, by 2 or more in net, and not a rebound.
    • Young and scaling: 6 years old or less, and never fallen.
    • Money growth: real turnover up 20%, or debtors or current assets up 25% with positive net assets.
  • Soft items: cash raised, a new charge, a new director, or a move to commercial premises.

Gross GVA is operating profit plus staff costs plus depreciation and amortisation, where published. Otherwise it is staff × West Midlands GVA per job for the sector, adjusted for the firm's pay.

Validation.

  • Test dates: the development dates are Oct 2020, Apr 2021, Oct 2021, Apr 2022 and Oct 2022. A lockbox of Apr and Oct 2023 is opened once, at the end.
  • Embargo: training uses only snapshots whose outcomes were known at each test date (about a 36-month embargo). This mirrors the live forecast, which trains on snapshots up to October 2023.
  • Geographic holdout: the model is trained outside the region and tested inside it.

The primary pass marks are:

  1. Hit rate: the shortlist's staff-route hit rate (the primary measure, section 9) beats the best benchmark. On the development origins the pooled 90% block-bootstrap interval must lie above zero and the point estimate must be at least 2 points higher; on the lockbox, treated as one pooled test, the point estimate must be higher.
  2. Calibration slope: between 0.8 and 1.2.
  3. Overall level: within the scenario range.

Secondary checks are reported with Benjamini–Hochberg correction:

  • Calibration by size band, sector, area, firm age, filing format and turnover publication
  • Accuracy: AUC (published studies reach 0.62–0.72), Brier and ranked-probability skill, and interval coverage
  • Robustness: stability; removing one data source at a time; drift; and a time-travel rebuild of October 2023 inputs

If the model fails, the best simple rule that passes is used, and the report says so.

4. Challenges and solutions

Most of the work went into problems that only showed up once real filings were read. Each fix was tested on the documents that exposed it before being applied to the whole set.

AreaChallengeSolutionEffect
Scale205,551 companies, far too many to look up one by oneRead the whole register's bulk accounts files insteadEvery listed company covered
ScaleMonthly files of 2–4 GB (about 31 GB in total)Read each zip's index remotely and fetch only the needed entriesAbout 1–1.5 GB transferred
CoverageThirteen months of filings missed firms whose latest accounts came earlierSecond pass over Jan 2024 – Aug 2025 for unresolved firms onlyAbout 5,800 more figures
CoverageThe register snapshot lagged recent filingsAdded daily files; dormant accounts filed in October override the registerAbout 225 firms correctly reclassed as dormant
Formats6,656 firms file on paper or as PDFsFetched each one's latest accounts through the free API, within its 600-requests-per-5-minutes limit6,295 scans retrieved, 0 errors
FormatsThe public website's "accounts" filter returned other forms (10 of 20 in a pilot)Used the API's accounts category and accounts form type insteadCorrect documents every time
FormatsEvery paper filing is an image-only scanOCR built into Windows, so nothing to installAll 6,295 read
SpeedOCR takes about 2.4 seconds a pageStarted reading mid-document and stopped at the note; up to 13 parallel workers; full re-reads only where neededThe whole PDF stage took about 4.5–5 hours instead of days
OCRLook-alike characters: l, I and | for 1; O for 0; "IO" for 10; "ml" for nil; "vas" for wasLook-alike rules in the number readerFigures recovered instead of lost
OCROCR separates table labels from their numbersRebuilt rows and columns from word positionsTables readable
ParsingDate headings ("28 December", "52 weeks ended") read as staff numbersSkip date and period rowsExample: 474 staff, first read as 52
ParsingPage numbers and legal boilerplate ("section 1072 of the Companies Act") read as figuresBoilerplate filter; ignore numbers inside long prose linesExample: 0 staff, first read as 1,072
ParsingGroup accounts saying "the Company has no employees" beside the group's staff tablePrefer the group figure, which describes the businessExamples: 145, 219 and 583 staff, first read as 0
Parsing"No employees whose pay exceeded £60,000" mistaken for "no employees"Treat pay-band sentences separatelyFalse zeros removed
ParsingFrom about August 2025 some software tags headcounts with a scale of −2, so the original reader turned 14 staff into 0.14Ignore a negative scale on headcounts; re-read every fractional figure, and every 1, 2 or 3 from July 2025 on (75,937 filings)9,560 figures corrected; 1,751 firms restored to the 8–300 band
ParsingA few filings tag the year heading ("2025") as the headcountReject a whole number equal to the period's year unless another staff figure in the filing supports it; fall back to the note textExample: 1 employee, first read as 2,025 (20.25 before the scale fix)
MatchingFood-premises matches picked up other businesses at the same address (a pharmacy inside a supermarket)Excluded chain names, limited address matches to food sectorsMatched firms fell from 8,932 to 7,534
MatchingShared ownership could chain unrelated firms into giant groupsIgnored owners of more than 25 companies (formation agents, nominees); direct links onlyLargest group: 14 firms
Data integrity4 of the 33 ownership files arrived corruptedChecked each file's integrity and downloaded againComplete ownership data
HardwareProcessor at 100% and memory short at peakWorker count sized to the machine; kept awake through the runStable to completion

5. Validation

Accuracy was checked by eye against the source documents at every stage. After the final corrections, 36 of 37 verified figures (97%) match the accounts, up from 26 of 31 before them.

CheckSampleResult
Electronic accounts parser, first test300 filings285 gave a figure; the other 15 were dormant or had no employee note
Current-year vs prior-year figure3 filings read in fullCurrent-year figure picked every time
New electronic reader against the published figures382 West Midlands filings in the 14 Oct 2026 daily file314 identical; 33 scale corrections and 35 missed dormant filings, both confirmed in the documents; 0 unexplained
Scale correction8 corrected firms drawn at random8 of 8 match the employee note in their accounts
OCR pilot, before the full run20 scanned accounts18 correct; the other 2 had no employee note. Table figures confirmed against page images
Spot check after the full run15 scans, 5 per confidence level, checked against page imagesHigh 4/5, medium 5/5, low 1/5. The errors led to the five parsing fixes in section 4
Re-check after the fixes37 documents verified by eye36 correct; the remaining one is flagged low confidence for manual review
Low-confidence OCR figuresAll 6,295 scansFell from 115 to 47; all are on a manual check list
Ranking model7,772 firms held back from trainingAUC 0.83. In the top decile, 17.3% predicted vs 15.6% actual (rerun after the scale correction)
Visa sponsor matches12 sampledMatches confirmed by town were correct; name-only matches marked medium confidence
CQC and food-premises matches5–10 per match typeName-and-postcode matches correct; same-premises matches tightened after a false match

Two safeguards apply to the output itself:

  • Every figure carries its source and confidence, so a reader can tell a tagged electronic figure from one read off a scan.
  • Estimates for unsized firms sit in separate columns and files, never mixed with reported counts.

6. Results

12,417 companies fall in the 8–300 band, about 6% of the active register. 146,095 companies (71%) were sized or classified; most of the rest are too new to have filed accounts.

6% of active firms, 12,417, fall in the 8–300 band Where all 205,551 active West Midlands companies landed (corrected 15 Oct 2026) Under 8 staff New company, no accounts yet Dormant 8–300 staff (target band) Scanned accounts, no staff note Over 300 staff Other unresolved Under 8 staff: 114,645 companies (55.8%) New company, no accounts yet: 57,671 companies (28.1%) Dormant: 18,541 companies (9.0%) 8–300 staff (target band): 12,417 companies (6.0%) Scanned accounts, no staff note: 1,431 companies (0.7%) Over 300 staff: 492 companies (0.2%) Other unresolved: 354 companies (0.2%) 114,645 · 56% 57,671 · 28% 18,541 · 9% 12,417 · 6% 1,431 · 0.7% 492 · 0.2% 354 · 0.2%
Figure 2. Over half the register has fewer than 8 staff, and over a quarter is too new to have filed; the target band is a small, specific slice.

Within the band, 10,017 sit in the core 10–250 range, 2,323 have 8–9 staff and 77 have 251–300. These counts include the 1,751 firms restored by the scale correction (section 3.6).

Where the staff figures came from:

Source of the figureAll firms with a figureFirms in the 8–300 band
Electronic accounts (tagged figure)122,59210,672
Scanned accounts read by OCR4,8641,737
Electronic accounts fetched through the API938
Electronic accounts (figure read from text)50

The scanned accounts matter more than their number suggests. They make up 4% of figures but 14% of the band, largely because PDF filers lean towards fuller accounts formats (full, group, medium, small and subsidiary accounts make up 3,885 of the 6,656). Of the 1,737 in-band figures read from scans, 1,224 are high confidence, 491 medium and 22 low.

7. Firms without published accounts

59,456 companies have no staff figure. 57,671 of them are simply too new: first accounts are due 21 months after incorporation, and as of 1 October 2026 none of these had filed any. The rest are 1,431 scanned accounts with no employee note, 238 with no accounts document, 87 electronic accounts that omit the figure, and 29 unresolved.

They can't be counted, but they can be ranked. Of 38,454 West Midlands firms set up in 2022–24 that have since filed accounts, 3.3% have 8 or more staff. That rate varies sharply by sector: about 15% for restaurants and takeaways and for care homes, 8–11% for home care, cleaning and recruitment, and under 2% in 22 of the 52 sectors with at least 50 young firms.

7.1 Signals

Each company was matched against free signals that point to real staff:

  • Ownership: the same person, matched on name and birth month and year, or a parent company that already runs an established firm with staff.
  • Visa sponsor licence: the firm is licensed to employ overseas workers.
  • Care Quality Commission registration: care homes (with bed numbers) and home-care services, matched by exact company number.
  • Food premises: a food business with a hygiene rating trading under the company's name or at its address.
  • Other: registered charges (usually bank lending), a commercial-premises address versus an address shared by many companies, and company type.

7.2 Model

A logistic regression with 73 features was trained on the 38,454 young firms to estimate each unsized company's chance of having 8 or more staff.

  • Separation: on 7,772 firms held back from training it scores an AUC of 0.83, where 0.5 would be guessing.
  • Calibration: its probabilities are honest. The top decile it picks has a 15.6% actual rate against 17.3% predicted, about five times the base rate.

7.3 What it finds

GroupCompaniesWhat to do
Linked by ownership to an established firm with 8+ staff2,149 (1,455 groups)Approach through the established firm
Very likely to have 8+ staff (40% chance or more)99Check by hand, then approach
Likely (15–40%)663Check by hand
Possible (5–15%)7,223Wait for first accounts
Unlikely (under 5%)49,322Wait for first accounts

Summing the probabilities, the model expects about 1,729 of the 59,456 to have 8 or more staff. Most of them can't be singled out yet; they are spread thinly across thousands of low-probability firms.

A prioritised supplementary list of 2,471 new firms (1,953 of them ownership-linked) should hold about 268 with 8 or more staff. That's a hit rate of about 11%, against 2.7% for new firms overall.

The new firms are not the core of the target list, but ignoring them would systematically miss the newest businesses. About 10,800 of them must file first accounts by March 2027, and a monthly re-run will replace these estimates with real counts as they do.

8. Limitations

The figures are as good as the accounts behind them, and eight limits apply:

  • Headcount is not workforce. The legal figure counts people on contracts of employment, averaged monthly, with part-timers counting as one. It excludes subcontractors, agency staff and workers employed by a sister company. Firms in construction, care and hospitality may therefore operate larger than they report.
  • Accounts lag reality. The latest accounts are usually 6–21 months old, so a fast-growing firm may already have moved past its reported band.
  • Scanned figures carry some risk. 47 low-confidence figures (22 of them in the band) are flagged for manual checking. Medium-confidence figures were mostly correct in testing but weren't all verified by hand. About 1,400 scanned accounts contain no employee note at all: mostly small charities, clubs and slimmed-down micro-entity accounts.
  • Estimates for unsized firms are probabilities, not counts. The model learned from firms that survived long enough to file accounts, and its signals are measured today. Its expected totals are therefore an upper bound.
  • Electronic tags can be wrong. The reader catches the tagging errors found so far, a misapplied scale and a year heading in place of the count (section 3.2). A filing that simply states a wrong number is kept as filed: one firm reports 2,026 staff against 2 the year before. The forecasting panel's plausibility checks are designed to catch jumps of this kind.
  • The forecast is odds over a long horizon. Each firm's probability covers growth 1 to 2.5 years out, and the first outcomes are known in 2028–29. Published research on spotting high-growth firms in advance reaches AUC of about 0.62–0.72, so a shortlist can roughly double or treble the base hit rate but cannot promise that any one firm will grow.
  • The rules change during the target years. Companies House reform makes turnover observable for small firms from 2027, so the either-route probability is an estimate and the staff-route probability is the measure that survives the change (section 9).
  • Growth by acquisition can look organic. Small-company accounts don't disclose business combinations, so some 20%+ jumps in the 50–300 band are purchases or staff moved between group companies. Detected cases are flagged; undetected ones remain.

9. Design review and decisions

A review of the forecast design on 16 October 2026, before any model code was written, found 17 weaknesses. Four could have broken the result; each is now built into the design in section 3.7 and in the model configuration. The four decisions the review left open were taken the same day and are recorded here so they can be revisited.

Decisions taken on 16 October 2026

QuestionDecisionReason
Which measure is primary?The staff-route hit rate, P(staff hit). The either-route measure, P(hit), is reported as a flagged estimate.Companies House reform (software-only filing and a profit-and-loss account for small and micro companies, both reported for 1 April 2027, the P&L part still described as a proposal) makes turnover observable for most small firms part-way through the target years. No training year had that, so an either-route probability would be mis-calibrated by design.
Does acquisitive growth count?No. Jobs and turnover gained by buying a company are deducted where the acquired firm is a UK filer; otherwise the case is left out of scoring. Acquisitions found only through filing events are flagged and counted, not deducted.The programme supports organic growth, and buying a West Midlands firm relabels regional GVA rather than adding to it.
GVA tie-break or equality duty?Keep the expected-GVA tie-break within probability tiers, and give every council area at least 75% of its pool-proportional places.The client's aim is gross GVA. The floor stops the tie-break emptying deprived areas and low-pay sectors from the list; the cost in expected hits is reported.
Which reform dates to plan on?1 April 2027 for both software-only filing and small-company P&L filing, as a planning assumption.The earliest reported dates are the worst case for calibration. The modelling choice above is the same whichever date holds. The dates have not yet been checked against the Companies House announcement.

What the review changed

FindingChange
The label measures growth 1 to 2.5 years out, not the next 12 months, and outcomes land in 2029The horizon is stated in the success test and shown per firm; an interim check of the base-year nowcast is due in October 2027
Headcount noise at 8 to 19 staff is as large as the targetNoise is also measured from firms with two independent readings of one year (a scanned filing and an electronic one); the 8 to 9 evidence rule is the main defence
Acquisitions are invisible in small-company accountsFiling events act as detectors; see the decision above
Six usable training vintages, about one at the first test originAccounts are collected from 2010 for all sizes; only three of the six add-ons are tested in v1
The two lockbox origins share target yearsThey are pooled into one test; the pass mark is a higher point estimate, and development needs +2 points
Sector economic sensitivity rests on about six observationsAbout eight sector groups, shrunk toward one national value; the overlay never changes the ranking
Sizes read from scanned accounts at medium or low confidenceSuch firms go to the reserves, not the top 1,500
Odd-length periods on the staff routeThe 50 to 54 week rule applies to both routes
Sector code taken from the current register leaks the futureSector history comes from dated confirmation statements
No hiring, premises or insolvency signalsCharges satisfied, Gazette notices and sector history join the first API pass; careers pages, EPC certificates and planning applications are piloted on 200 firms
TimelineAn accounts-only v1 ships if the schedule slips; that is decided in advance

Status. The success test, the no-leakage rule and the selection logic are now code (model/labels.py, model/asof.py, model/select.py), with tests that pin the rate curve, the +2 rule, the 49/50 boundary, deflation, closure and late outcomes, the leakage canary, quota apportionment, one entry per group and the area floor. Since then the rest of the pipeline has been written and tested on synthetic data: the filing-events and accounts-history collectors, the OCR reader for both years and the money items, the economic data collector with publication dates on every value, the panel that joins them per firm per as-of date, and the model stage (benchmarks, the transparent challenger, the LightGBM main model, calibration, the tournament with its pass marks, reasons, the forecast and the selection). Nothing has yet run on real data: the first step is a 100-firm pilot of the collectors, then full collection, then pre-registration of the pass marks before any backtest.

Sources

1 / 1

§ 03

Experience

03

Legends Advocates

Administrative and executive support

  • Assisted with business registration and initial company setup.
  • Handled branding and digital operations.
  • Incorporation · Technical Support

02

Tandem Catering

Catering and event operations

  • Worked private and commercial events from set-up through to service and close-down.
  • Coordinated on site with the team to keep service running to time and to standard.
  • Teamwork · Communication

01

On-Demand Clothing Imports

Sole operator

A small e-commerce venture run end to end.

  • Ran the full order cycle — sourcing directly with suppliers in China, coordination, and fulfilment.
  • Handled marketing campaigns on platforms including Google and Meta.

Sourcing · Marketing · Customer service

Full curriculum vitae, as PDF

§ 04

Education

01

Royal Grammar School, Guildford

GCSEs: 2024 / A Levels: 2026

  • Honorary Academic Scholar.
  • School Prefect.
  • Founder and President of the Finance Society.
  • GCSE Results: 9 A*s (9,8), 2 As (7).
  • A levels: Economics (A) · Geography (A) · Mathematics (C).

§ 05

Leadership and Community

01

Finance Society

Founder and President

Founded the school's Finance Society and led it as President, setting up a forum for students interested in markets, economics and business.

  • Built the society from nothing — formed it, ran it, and kept it running.
  • Organised and led sessions for members throughout the year.

02

Primary Maths Project

Volunteer

  • Delivered maths lessons to Year 5 pupils, working through problem-solving and explaining concepts to younger students.

03

Guildford Action

Volunteer

  • Helped organise and run a local charitable event.

§ 06

Writing

  1. Sep 2026 Being Good Is No Longer Good Enough Opinion

§ 07

Travel

Places I have been, and roughly when. Meeting people whose backgrounds look nothing like mine has taught me more than most things have.

Hover a marked country to see when I was there.

§ 08

Contact

The quickest way to reach me is email. I read everything, and I reply to most things.

[email protected]
Curriculum vitae
Download PDF
Reply time
A few days, usually