Companies House
We prepare the filing. A person at your practice sends it.
Live company data pulled from the registrar. Your own statutory register kept alongside it, and never overwritten by a sync. Twelve forms assembled to the edge of submission, each with the deadline and the section of the Companies Act that sets it — and a sealed package with a hash on it.
There is no code path in this product that transmits a filing. That is the point, not the caveat.
How the data moves
What comes in
The registrar's own record for each company — profile, officers, persons with significant control and recent filing history — fetched when you ask for it and held as a mirror of what has already been filed.
What sits alongside it
Your practice's statutory registers, which a sync never touches. Every prepared form and every confirmation statement reads its people from there, not from the public copy.
What goes out
A form with its checks run, its statutory deadline computed from the effective date and its missing fields named — sealed into a hashed package for somebody at your practice to submit.
12
forms prepared
Each with its statutory deadline and the section of the Companies Act 2006 the deadline comes from.
0
filings transmitted
The live provider's every method raises the same error, and none of them opens a socket.
SHA-256
hash on every sealed package
Computed over the form's contents with the preparation time excluded, so re-preparing the same filing proves it is the same filing.
The boundary, stated first
Everything stops one step short of the registrar.
Compliance Cockpit assembles the form, checks it, computes its deadline and seals it into a package. The last step belongs to a person: a director, a secretary or somebody your practice has authorised takes the package to Companies House and accepts responsibility for it. There are three reasons that boundary is where it is, and none of them is that we ran out of time.
Filing is the irreversible step
A register entry can be corrected by a further entry. A form accepted by Companies House is public within the hour and is undone only by another filing — sometimes only by a court order. Software that sends it on your behalf takes on that liability quietly, and your practice is the one that keeps it.
The official schemas are not public
Companies House software filing runs over an XML Gateway whose form schemas are released to holders of a presenter account. Inventing a plausible envelope produces filings that are rejected at best and — where a field name is accepted with the wrong meaning — silently wrong at worst.
It is checkable in a minute
A reviewer at your firm can verify the claim rather than take it: search the code for a network call on the filing path and there is not one. A constant records that live filing is unsupported and a test pins it, so if that ever changes it changes deliberately and visibly.
This is why the output is defensible. When a client, an auditor or a court asks who submitted the form and on what basis, the answer is a named person at your practice, holding a hashed package that states exactly what was approved, which fields came from the register and which a human supplied.
The read API
The registrar’s own record, fetched when you ask for it.
A company on your portfolio always started at Companies House. Creation is Companies House-only — there is no manual fallback that lets somebody type a company into existence and have it look identical to one that was verified.
- Search by name or by number, look at what came back, then import. Numbers are normalised before a request is made — 1234567 becomes 01234567 — and anything that is not eight digits, or two letters and six digits, is refused without troubling the API.
- One import fetches four endpoints together: the company profile, up to a hundred officers, up to a hundred persons with significant control, and the twenty-five most recent filing-history items.
- From the profile come the name, number, status, type, date of incorporation, registered office, SIC codes and the next due dates for accounts and the confirmation statement — which become deadlines on the portfolio rather than dates on a screen somebody has to remember to look at.
- Officers and PSCs arrive exactly as Companies House publishes them: a partial date of birth, month and year only, and a service address. The residential address is suppressed at source, so this product never receives it.
- For a corporate PSC the registrar publishes the entity's own registration number. That is the link the ownership look-through climbs to reach the next company in the chain rather than stopping at a name.
- When a lookup fails it says which failure it was — not connected, invalid number, no such company, rate limited, temporarily unavailable — because the thing to do about each one is different.
The filings themselves, as evidence
After a sync, the share-relevant documents behind the filing history — CS01, SH01, IN01 and the older annual returns — are acquired in the background as evidence for the ownership reconstruction. A failure there never fails the import, and the acquisition is idempotent, so a re-sync does not download the same document twice. Downloads are restricted to the Companies House document host, and the short-lived redirect it issues is followed without forwarding your credentials to it.
And what the registrar did not give you
The read API returns no register of members, no share transfers, no allotment history, no statement of capital history, no identity verification status and no proof of address. A coverage report puts that list in front of you at onboarding, item by item, beside what actually was imported — so nothing is quietly assumed to be covered because a sync said it succeeded.
Mirror and register
The mirror is what has been filed. The register is what is true.
Every sync deletes the stored officers, PSCs and filing history for that company and writes the freshly fetched set in their place, in one transaction. That is correct for a mirror — it is a copy of the public record, and a copy that keeps stale rows is worse than no copy at all.
It would be catastrophic for a statutory register, which is exactly why the statutory register lives somewhere else. Your registers of directors and of persons with significant control are separate records with their own history and their own approvals, and a Companies House sync never touches them.
- Both the twelve forms and the confirmation statement read people from your local statutory register, never from the mirror. There is no silent fall back to the public copy when a local record looks thin — a gap is named instead.
- Each sync compares the state it just fetched against the state it held: a name, a status, a registered office, an officer appointed or resigned, a PSC added, ceased, or with a changed nature of control.
- Every change carries what was compared, where the fact came from and a confidence — high where the registrar states it outright, medium where it is inferred from a row that has simply disappeared from the list.
- Changes land as alerts on the monitoring feed you already have rather than in a second inbox, and an identical unread alert is not raised twice.
- Where a sync moves something a confirmation statement review already covered, the review is flagged as possibly stale and given the list of what changed. It is never overwritten: a person's review decisions are not the sync's to revise.

Filing preparation
Twelve forms, each with its deadline and the section it comes from.
An approved corporate action assembles the form it would be reported on. The deadline is computed from the date the change took effect, under the section of the Companies Act 2006 that sets it — so the date on the screen is one you can defend rather than one somebody typed.
| Form | What it reports | Deadline | Statute |
|---|---|---|---|
| SH01Return of allotment of shares | Shares allotted, with the statement of capital as it stands afterwards. | One month | s.555 |
| SH02Consolidation, sub-division, redemption or re-conversion | A change to the number and nominal value of a class of shares. | One month | s.619 |
| SH03Return of purchase of own shares | A company's purchase of its own shares. | 28 days | s.707 |
| AP01Appointment of director | An individual appointed as a director. | 14 days | s.167 |
| TM01Termination of appointment of director | A director's appointment has ended. | 14 days | s.167 |
| AP03Appointment of secretary | An individual appointed as company secretary. | 14 days | s.276 |
| TM02Termination of appointment of secretary | A secretary's appointment has ended. | 14 days | s.276 |
| PSC01Notice of individual person with significant control | An individual PSC and the conditions of control they meet. | 14 days | s.790VA |
| PSC07Notice of ceasing to be a person with significant control | A person has ceased to be registrable. | 14 days | s.790VA |
| NM01Change of company name by resolution | A new registered name following a members' resolution. | 15 days | s.30 |
| AD01Change of registered office address | The company's registered office moves. | No fixed period | takes effect on registration, s.87(2) |
| AA01Change of accounting reference date | An accounting period shortened or extended. | No fixed period | must arrive before the accounts deadline for the period it changes |
One month is not thirty days
Section 555 gives one month for a return of allotment, and one month from 31 January is 28 February — 29 in a leap year — not 2 March. Thirty-day arithmetic reports two days of headroom that do not exist, on exactly the filing where a client pays the penalty. Months here are calendar months, clamped to the end of the target month, computed in UTC so a legal date does not shift for a user east of Greenwich.
Two forms have no countdown
A registered office changes by the giving of notice and takes effect on registration, so an AD01 has nothing to be late for and the product refuses to invent a date to count down to. An AA01 has no fixed period either, but it has a hard cut-off: arrive after the accounts filing deadline for the period being changed and it has no effect at all. Both say so, because silence would read as “no deadline”.
Which parts still need a person
Every field on every form is marked as one your records supply or one only a human can, because the second list is the work and software that hides it just hands you a form with plausible blanks. The authorised signatory. The statement that an appointee consented to act. The split of a single held name into forenames and surname, which no rule does safely. The consideration where shares were not allotted for cash.
What it checks before it will package anything
An error means the form is wrong and it blocks; it cannot be waved through in the interface. A warning means a person needs to look at something and it never blocks. Blur the two and the product either becomes unusable or lets a wrong filing through.
- On an SH01, the statement of capital must be the capital AFTER the allotment. Filling it from the live register while the allotment is still a proposal produces figures that look entirely plausible and are wrong by exactly the shares being reported — so the mismatch is caught and named.
- On an SH02, a sub-division or consolidation must move the share count and the nominal value inversely, leaving total nominal capital unchanged. An arithmetic slip that doubles a company's capital on a public form is caught before it becomes one.
- On a PSC01, only the registrar's own condition codes are accepted. Free text is rejected at Companies House, so it is rejected here first, where it costs nothing.
- On an AP01, a director must be at least sixteen on the date of appointment under section 157 — and where the service address matches the residential address, the form warns you that submitting it publishes the director's home.
- On an AD01, a PO Box on its own is not an appropriate registered office address under the 2023 Act, and an address with no recognisable UK postcode is queried rather than sent.
- Every class on a statement of capital must carry its prescribed particulars of rights, and a company must have at least one issued share. Both block.
The validator is pure: it reads no clock and no database, and it takes the whole prepared filing rather than loose arguments — so it can be run again months later against the stored preparation and give exactly the same verdict.
The package
What a person actually takes to Companies House.
The package is provider-neutral by design: a complete, ordered statement of what would be sent, in the form’s own field names. It is deliberately not an invented XML envelope, because a fabricated envelope is worse than none — it looks finished.
What is in it
The form code and title, the company number and name, the date the change took legal effect, every field the form declares and nothing else, and the list of which of those a person supplied rather than the register. A key that no field declares is dropped rather than carried along.
Then a SHA-256 content hash over all of it, with the preparation timestamp excluded — so re-preparing the same filing produces the same hash, and a re-run is visibly identical rather than merely similar.
It refuses twice
It will not seal a form that still has a blocking error. And it will not seal a projection: if the approved action has not yet been applied to your register, every figure on the form describes a proposal, and a form describing a proposal says something untrue about the company.
Both refusals sit inside the sealing step rather than in the screen that calls it, so no route, job or future adapter can reach a package by a path that skipped them.
Who may do which part
Anyone doing operational work may prepare a pack, deliberately. Knowing on the day a director is appointed that the AP01 will need a date of birth nobody has recorded is worth far more than discovering it a fortnight later.
Sealing the package is a manager decision, because the package is the artefact that leaves the building — it names a signatory and carries a hash that later stands as evidence of what was approved.
A rehearsal that records rather than sends
A sandbox provider accepts a package and hands back a receipt, so a practice can walk the whole lifecycle before it matters. Nothing leaves the process: the function that does it is called record rather than submit, and the audit entry states in as many words that live filing is unsupported. Hand it the same package twice and it returns the first receipt instead of recording a second submission — because a retry after a timeout is precisely the case where a careless system produces two identical forms on the public record, and two identical SH01s take a letter to the registrar to undo.
A lifecycle that cannot loop
Prepared, then queued, then accepted or rejected. A rejection returns to prepared and never straight back to the queue: a rejection means something in the pack was wrong, re-queueing the same bytes sends the same wrong pack again, and the corrected pack is a different package with a different hash. Every sealed package is audited with its form, its hash, its effective date and the fields a person supplied — because who signed it is the first question anybody asks about a filing pack.
A separate module
The confirmation statement is prepared somewhere else, and for good reason.
The CS01 is not one of the twelve. It is not the by-product of a single corporate action — it is an annual review of everything the company has told the registrar — so it has its own module, its own review record and its own gates.
- Eight sections are reviewed one at a time: registered office, directors and officers, PSCs, SIC codes, share capital and shareholders, statement of capital, trading status, and the due date. Each is marked confirmed, changes needed, or not reviewed, with notes and a follow-up task against it.
- A section left unreviewed blocks the payload. A section marked changes needed blocks it too, unless somebody overrides it and writes down why.
- Nothing builds without a lawful purpose confirmation, a valid registered email address, at least one SIC code, and at least one current director in your local statutory register — never the Companies House mirror.
- A director missing a date of birth or a residential address is a warning, not a silent gap. An empty PSC list is a warning that asks you to confirm the company genuinely has none.
- Review states run draft, in review, ready to file, and then filed or abandoned. Marking one ready to file is a manager decision and takes three explicit confirmations — including, in as many words, that this is not yet live Companies House filing.
- The built payload can be frozen as an immutable, hash-pinned version: append-only, owner or admin only, built only from a submission already in the ready state, and an identical rebuild is a no-op rather than a second version.
Structural checks are not schema conformance
The pre-flight gate verifies that a built CS01 has the required fields, shapes and types. It does not and cannot assert conformance to the official Companies House CS01 schema, which is released only under a presenter account — and the product says so on the face of it. Passing the check does not mean a filing would be accepted, and pretending otherwise would be the most expensive kind of reassurance.
Some changes have no form at all
A share transfer produces no Companies House form. It is not separately notified; it is reported on the company’s next confirmation statement. Ask the product to prepare a filing for one and it tells you that, rather than offering a form that does not exist. How the register records it instead.
Limits, named on the form
Where it stops, it says so on the filing itself.
A gap the software names is a gap your practice can act on. A gap it hides is one you find out about from the registrar, or from a client. These warnings are attached to the preparation, not buried in a manual.
SH06 on a buyback — flagged, not packaged
Every SH03 carries a warning that a separate SH06 may also be due: where the purchased shares are cancelled, notice of the cancellation is a form in its own right. The warning says plainly that this system does not prepare it. Naming the gap is worth more than a form we have not built, and far more than a practice discovering the requirement afterwards.
Stamp duty on a purchase over £1,000
The SH03 goes to HMRC Stamp Office and is stamped before Companies House ever sees it. The warning names the consideration and the half-percent figure, because an unstamped SH03 comes straight back and that is the most common reason it does. Nothing here can stamp a form.
The 18-month limit on an accounting period
Give the first day of the period being changed and the limit is checked. Leave it out and the product says the check has not been made — rather than guessing a start date and reporting a confident wrong answer. It says the same about the once-in-five-years rule for an extension, which it cannot see from the records it holds.
A registered office that has moved
The change takes effect when the registrar registers it, not when the board resolves — and for fourteen days after registration documents may still be validly served at the old address. The warning tells you not to close the old post arrangements early.
A company that has changed its name
The name changes on the date of the certificate, not the date of the resolution. The warning says so, and says not to change the stationery, the invoices or the website until the certificate arrives.
A form dated in the future
Prepare it today if it helps. The product flags that the form describes something that has not happened yet, and tells you not to send it before the date it carries.
Bring us a filing you are about to make.
Half an hour, no slides. We will pull one of your companies from Companies House, run a corporate action through validation and approval, and print the package — including the page listing the fields it says only a person at your practice can fill in.