What each task can realistically become
The feeds that exist
Companies House Streaming API Build this first
This is the single highest-value thing on the page. Every serious problem in this portfolio was a change nobody saw: a strike-off gazetted, a director resigned, a deadline passed. One client was monitored by nothing at all for months. A streaming listener turns that from a periodic manual sweep into a same-day alert, and it costs nothing but the build.
Companies House Public Data API Build alongside
The streaming API tells you something changed; this tells you what the position is now. Together they replace the manual verification that currently opens every runbook — and they make the intake diff automatic rather than a spreadsheet paste.
Companies House Filing API Needs the partner
Do not build against this before the authority question is settled. Filing still needs the company's authentication code as well as presenter credentials, so this is the piece that depends on the central credential store below.
HMRC APIs — Agent Authorisation and VAT (MTD) Agent credentials required
The Agent Authorisation API creates and tracks authorisation requests; the VAT MTD API files returns. Both sit behind agent credentials that the partner firm holds, not us. The sandbox is the useful part today — the integration can be built and proven before the authority is in place, so nothing waits on paperwork.
Registry Trust — CCJ and judgment data Commercial, paid
They offer monitoring, not just search — notification when a judgment is registered against a company on the list. That is a genuine early-warning signal about a client in trouble, and it arrives long before anything shows at Companies House. Price it before committing: it is the only paid feed here and the value depends entirely on the cost per company.
The central credential store
Build it as a vault, not a list. Access per company rather than per folder, every read logged with who and when and why, credentials never rendered into a page that can be printed or forwarded, and issued to the partner for a filing window rather than held by them permanently. The current pack shows codes in plain HTML, which is fine for one trusted operator and not fine the moment a second party can reach it.
The biggest block — portal and social
Portal setup is 44 hours and social is 55 — together 99 of the 207, nearly half the estate. Both are the same procedure repeated 44 times, which is exactly what automation is for. But they automate very differently, and the difference is not about effort.
Portal install Genuinely automatable
projects.create + projects.updateContentscript.projectsThe API creates an empty script project and pushes files into it. That is the whole of steps two
and three of the install runbook — create the project, paste the bundle — which is the largest manual block
and the one most likely to be got wrong by hand. Each client's Config.gs is already written and
already client-specific, so there is nothing to compose at run time: read the config, create, push, run
setup.
What stays manual: signing in as the right Google account, and the Business Profile step where Google requires its own verification. Realistically this takes the install from 60 minutes to about 10 — call it 44 hours down to roughly 8.
Social account creation Do not automate this
The friction is deliberate. CAPTCHAs and phone verification exist precisely to stop programmatic signup — so any automation here is an attempt to defeat a control the platform put there on purpose. That is not a technical hurdle to engineer around, it is the platform saying no.
And the downside is asymmetric. A batch of accounts created programmatically from one address tends to be detected together and removed together. We would be trading 55 hours of admin for the risk of losing 44 clients' brand handles at once — including the ones already filled in, linked and handed over. An account nobody can get back into is worse than one that was never created.
What the social hour actually contains Automate the other half
Creation is only part of the 75 minutes. Split it and the automatable portion is real:
| Step | Minutes | Automatable? |
|---|---|---|
| Check handle availability across five platforms | 10 | Yes — a lookup, no account needed |
| Create the five accounts | 30 | No — see above |
| Fill profiles — logo, banner, about, links | 20 | Partly — Meta and YouTube have APIs once the account exists |
| Generate and queue the first posts | 10 | Yes — already generated from the service list |
| Record handles and recovery routes | 5 | Yes — write back to the client record |
So roughly 25 of the 75 minutes is automatable without touching account creation — the handle check, the content, and the write-back. That is 55 hours down to about 37, which is worth having and is nothing like the portal saving.
The order to build it
Stop being surprised
- Register for a Companies House API key — free, same day.
- Poll the Public Data API for all companies nightly. Store the response verbatim, not a summary of it.
- Diff each response against the last. Raise an alert on any change to status, officers, or a due date.
- Feed the diff into the existing intake logic, which already knows how to show what moved and what it does to the task list.
- Add the Streaming API once the nightly poll is proven, to move from next-day to same-hour.
Why first: it needs no credentials beyond a free key, it touches nothing that can be broken, and it removes the failure mode that has actually cost this business money.
Make our own data self-correcting
- Auto-resolve the director mismatches — of them — by comparing our record against the officers endpoint and flagging, never silently overwriting.
- Same for the nominee reconciliation and the unattributed documents.
- Recompute deadlines from the API rather than from our own dates, so a filed statement updates everything downstream automatically.
- Publish the whole thing to
api/*.jsonon a schedule, so the pack is always current without anyone running a build.
Flag, do not overwrite. The rule that has protected this estate is recording both values when they disagree. An automated reconciler that silently picks one is worse than the manual process it replaces.
Make filing possible without handing over the keys
- Move every authentication code out of
_data.jsand the HTML into a store with per-company access control. - Log every read — who, when, which company, for what filing.
- Issue to the partner for a filing window, then revoke. Never a permanent copy.
- Only then connect the Companies House Filing API, with the partner's presenter credentials.
Prepare everything, submit with one click
- Pre-fill confirmation statements from live API data — outstanding today.
- Draft every chase and objection letter from the runbook template with the live position merged in.
- Build the HMRC integration against the sandbox while the agent authority is being arranged.
- Keep a human on the submit button. Nothing in the "they must be present" tasks is ever automated, whatever the API allows.
Client reporting off the live feed
- Generate each client's status pack from the API rather than from stored files, so it cannot go stale.
- Add the CCJ monitoring feed if the pricing works — an early-warning signal that arrives before Companies House shows anything.
- Push deadlines into each client's portal calendar, which already exists and is currently populated by hand.
What is never automated
Every automated output should land at Submitted, never at Done. The check before Done is the only quality control in the system, and it matters more once a machine is producing the work, not less.