In short
n8n system that turns the UK company register into four buying-signal triggers: first accounts just filed, accounts due soon, newly incorporated, and overdue. A 5.69 million company snapshot sits in a database kept current with the daily accounts files, so each trigger is a query rather than an API crawl. Every candidate is then re-checked on the live register, filtered by SIC code and director count, and scored 0 to 100 with written reasons. In the live test, 317 companies were checked and 296 qualified, with dormant accounts and strike-off notices flagged.
Project description
Sales teams selling to newly formed and newly filing UK companies are working from lists that are already out of date. This build turns the Companies House register itself into a trigger feed. A monthly snapshot of 5.69 million companies sits in a database, kept current with the daily accounts files, so every trigger is a database query rather than an API crawl. Candidates are filtered by SIC cohort and director count, re-checked on the live register one at a time, and scored with written reasons before anyone picks up the phone.
Tools & Deliverables
- Four triggers built and run live: first accounts JUST FILED, accounts DUE SOON, NEWLY INCORPORATED and OVERDUE, each with its own day windows
- Companies House monthly snapshot loaded into a local database, plus daily accounts bulk files read through HTTP range requests so only the index is downloaded
- n8n workflows for intake, verification, live register checks and export, with data tables holding companies, events, config and scoring weights
- SIC cohort and director-count filtering, with single-director companies reported separately because they behave differently in outreach
- 0 to 100 scoring with the reasons written next to every score, plus red flags for dormant accounts and compulsory strike-off notices
- CSV export with summary counts, an aggregate-only public results page, and named data delivered privately rather than published
The problem
- Bought lead lists are stale on arrival. By the time a list of "new companies" is compiled, sold and imported, the moment that made those companies worth calling has usually passed.
- The best signal is not published as a feed. A company filing its first set of accounts is a strong buying signal for accountants, brokers and B2B services, but nothing hands you that event ready made.
- Crawling the whole register is not a plan. Checking millions of companies through page requests is slow, fragile and unfair use of a public service. The volume has to be solved before the automation is designed.
- SIC codes alone over-select. Filtering on industry code returns dormant shells, holding companies and businesses with ten directors alongside the genuine prospects.
- A score with no reason is unusable. A sales team will not work a list that says 78 out of 100 without telling them why, and they cannot argue with it when it is wrong.
- Director data is personal data. The moment a build touches names, phone numbers and emails, how that data is stored, shown and shared stops being a technical detail.
Approach
The volume problem is solved first, and everything else follows from it. The monthly Companies House snapshot, 5.69 million companies, is loaded into a local database, and the daily accounts bulk files keep it current. Those daily files are read through HTTP range requests against the zip index, so only the file listing is pulled rather than the whole archive, and the filenames themselves carry the company number and filing date. With that in place, each of the four triggers is a database query that runs in seconds: first accounts filed in the last 7, 14 or 30 days, accounts due in the next 7 to 90 days, companies incorporated in three age bands, and accounts already overdue. At test time that was 7,494 first accounts just filed, 19,411 due within 90 days and 3,976 overdue across the whole register.
The snapshot decides who is worth looking at, and the live register decides who is worth calling. Candidates are posted into n8n, where the verification workflow takes them one company at a time, checks each one on the live register, reads the current directors and filing history, and writes back a 0 to 100 score with the reasons attached. Filters cut the list to the target SIC cohorts and to companies with one or two directors, with single-director companies kept in their own group because a sole director is a different conversation from a two-director board. Red flags are surfaced rather than hidden: dormant first accounts and compulsory strike-off notices both change whether a company is worth a call at all. Checks are deliberately paced, one company at a time with pauses, because the register is a public service and hammering it is both rude and a good way to get blocked.
Solution
In the live test, 317 companies were checked against the register and 296 qualified. 79 percent had a single director, which changed how the client planned to approach them. 15 percent of the just-filed first accounts turned out to be dormant filings, which is exactly the kind of company that looks perfect in a SIC filter and wastes a call. Of the overdue cohort, 11 out of 41 already carried compulsory strike-off notices, so they were separated rather than dialled. Each row carries its trigger, its score, the reasons behind the score and the red flags, so the list can be worked or argued with.
Personal data was handled as a design decision rather than an afterthought. Director identities were used for matching, but contact details were withheld from the shared artefacts. The public results page shows aggregate counts only, with no names, and the named CSV was delivered privately to the client instead of being published. The recording itself has director details blurred. That separation costs nothing to build in at the start and is very hard to retrofit once a list has been passed around.
FAQ
How do you detect that a company has "just filed" its first accounts?
By diffing the register against itself. The monthly snapshot gives a baseline, and the daily accounts bulk files show what has been filed since. Reading the zip index by HTTP range request means the filing date and company number are available without downloading whole archives.
Why a database instead of calling the API for each company?
Because the register is millions of companies and a trigger has to answer in seconds. The snapshot answers "who might be interesting" as a query. The live check then answers "is this still true" for the short list only, which is a few hundred lookups rather than millions.
How do you stop the data being stale?
Nothing reaches the output on snapshot data alone. Every candidate is re-checked on the live register immediately before it is scored, so the directors, filing history and status are current at the moment of delivery.
How is the personal data handled?
Identity is used for matching, contact details are withheld from anything shared or published, aggregate figures only on any public page, and named data delivered privately. The demo recording has director details blurred.
Can the output feed a CRM or an email sequence?
Yes. The natural next step is pushing qualified companies into a CRM such as Pipedrive with a task created for the call trigger, and routing the slower nurture cohort into an email tool, with suppression rules so nobody is enriched or contacted twice.






