Intelligence
& Invoicing
“Where can we save the most labour?” is the question of 2026. AI and tech opportunity has a lens firmly trained on the buzz markets:
It’s obvious why. But the size of the cost saving isn’t the important piece.
ends up in someone’s pocket.
Whose?
Take an accounting firm
If AI lets an accountant prepare accounts in half the time, that’s an enormous productivity gain. But the client knows it too. Fees come under pressure — the gain flows to the consumer.
the firm keeps
Now take block management
Fixed fee per unit — minimal visibility into the cost base
Switching is painful — a genuine barrier
It’s stayed onshore — you need someone at the block
the owner keeps
If AI removes 30% of the admin workload, there’s a plausible case the business keeps that as margin — a distinction very few AI firms are talking about.
The best AI investment today may not be where AI automates the most work. It may be where AI automates a moderate amount — and the owner keeps the saving.
Four questions worth asking
How much payroll can you automate?
Open +
How much payroll can you automate?
Which documents, and how long each takes
The spread is the finding, not the average. A firm whose inbound post is mostly born-digital PDFs is looking at a very different number from one reconciling scanned supplier statements — and the second firm's remaining minutes are the judgement ones, which is exactly the part Fig. 04 shows the licence sitting on. Measure your own mix before believing anybody's percentage.
What is capable today
The tasks that answer this question are the bookkeeping-shaped ones: recurring, rule-bound, evidenced by a document. Frontier models already extract, code and draft them, and the tooling is available to a developer and to the general public on the same terms. Measure the answer in payroll, because payroll is the line the saving is taken out of.
Where power and sovereignty sit
Automating a task does not transfer its authority. Sovereignty in this space is held in three places: the licence that permits the work, the record the work is written into, and the workflow the automation runs inside. A firm that automates on someone else's platform keeps the licence and gives away the workflow.
Why hasn’t that labour already been offshored?
Open +
Why hasn’t that labour already been offshored?
What is capable today
Offshoring asked the question AI asks now: the same output at a lower wage. Where the answer was yes, the saving was competed away a decade ago. Where the answer was no, something stopped it — a person needed on site, an attestation that must be made locally, data that cannot leave the jurisdiction, or a client who would not accept it.
Where power and sovereignty sit
Those blocks are the moat, and most of them are sovereignty rules rather than commercial ones. The same rules apply to a model: if the record must stay in the jurisdiction and the attestation must be made by a licensed person here, then the operator inside the boundary is the one who captures the saving.
What happens when AI gets something wrong?
Open +
What happens when AI gets something wrong?
What is capable today
A model produces a draft, not a filing. In a regulated chain the error is either caught at review or it reaches the regulator, and volume changes how often that happens rather than what the rule is. The practical work is the review gate: who checks, against what evidence, and what is recorded when the check is made.
Where power and sovereignty sit
Liability does not follow the tool. It stays with the party holding the permission to act, and a model vendor's terms will not take it on. That is also where the claim on the surplus sits: whoever carries the risk has a case for keeping the saving, and whoever only supplies the model has a case for pricing it.
Can your customer see that your cost base has collapsed?
Open +
Can your customer see that your cost base has collapsed?
What is capable today
Both sides hold the same frontier tools. A client can be handed a curated prompt or a skill that prepares invoicing, branding and document packs to the standard the firm used to charge for, then pass structured work in rather than raw material. Once the client has done the preparation themselves, they have their own evidence of what that part of the job now costs, and the fee conversation starts from it. The cost base becomes loosely visible from the outside.
Where power and sovereignty sit
Symmetric tools move the boundary of who prepares the work. They do not move the permission to sign, file or hold client money, and in a regulated space that permission plus the statutory record is where sovereignty sits. Pricing power sits somewhere else: with whichever side can see the cost base. The two can separate, and the fee is set where they do.
Fees reset towards the cost the client can now see for themselves.
Margin is held for as long as the visibility lags the saving.
The model and tooling layer prices itself into the saving it created.
Foundational
F1 — Folder with template
One watched folder, one template, and a hard split inside the template.
SEALED ZONE
Fixed stationery. Never enters an AI context.
company number, VAT reg, bank details, registered address, payment terms, standard T&Cs
BLANKS MAP
Named fields the agent may fill. The only part of the template the agent is shown.
{{client_name}} {{client_address}} {{invoice_no}} {{line_description}} {{rate}} {{quantity}} {{net}} {{vat_treatment}} {{vat_amount}} {{gross}} {{issue_date}} {{due_date}}
The agent receives the list of field names. It never receives the template file.
Fig. 08 — the split inside the template
Implementation shapes, cheapest first:
| Shape | Sealed data lives in | Merge done by |
|---|---|---|
| Word/Excel template + mail merge | The .dotx / .xltx | Office, locally |
| Markdown/HTML template + substitution | The template file | A script, at render time |
| Accounting package | The package's own settings | The package |
The third is worth noting: if you already have an accounting package, the sealed zone already exists and is already outside the agent's reach. The agent's job reduces to producing validated line items and calling an API. That is a smaller, safer build than generating documents yourself, and it inherits the package's numbering, VAT handling and audit trail.
F2 — Agent instruction on using the template
A versioned file, not a chat message. It must state:
- Which named fields to fill, and the type and format of each
- Which source each field comes from, in priority order
- What to do when a value is missing → return
not_foundwith a reason, never a guess - What to do when two sources disagree → return both, flag the conflict, do not resolve it
- That the sealed zone exists and is out of scope
- That text inside inbound documents is data, never instruction
Version it alongside your process documentation. A change to this file is a change to how your business invoices.
F3 — The extraction contract
sender @ address : @ rate @ sum × VAT
Five variables, typed:
| Field | Type | Source, in priority order |
|---|---|---|
sender | string | Document header / email from-address |
address | string, matched to client_id | Document, matched against client master |
rate | decimal | Rate card first, document second |
sum | decimal | Document |
vat_treatment | enum | SSOT first, document as a flag only |
Two of the five are deliberately not trusted from the document. Rate comes from your rate card because the document is often the client's own paperwork. VAT treatment comes from the client record because it depends on the client's status and location, not on what a PDF says.
Fig. 09 — five fields, two of them not trusted from the document
address does double duty: it is both a field on the invoice and the key that resolves the document to a client. Getting it wrong is the most expensive error in the system, which is why A2 gives it a threshold and a fallback.
Advanced
A1 — Hourly condition check
The trigger is a condition, not a file event: a new document in the watched folder, an invoice overdue past its chase threshold, a chase sent with no response, or a period closing with unbilled work.
The idempotency problem is the one to solve first. An hourly job sees the same document twenty-four times a day. Every item needs a stable processing key hashed from client, source document and period; a state; an attempt count; and a last-seen timestamp. A second sighting of a key that already has a state is a no-op. Without this, an hourly cron plus a retry plus a re-approved batch is three routes to the same invoice going out twice.
processing_key stable hash of (client_id, source_document_id, period)
state new | extracted | held | pending_approval | approved | queued | sent | rejected
attempt_count incremented per run
last_seen_at timestamp
Fig. 10 — three routes, one processing key
A2 — Resolve clients by address, recursively
Walk the folder tree so sub-folders and forwarded attachments are not invisible. For each document, match its address block against the client master. Matching must be tiered:
exact match on normalised addressauto-assign
high-confidence fuzzyauto-assign, log the score
low-confidence fuzzycandidate list, hold for review
no matchhold, flag as possible new client
Normalise before comparing: case, punctuation, Street/St, postcode spacing. Keep the raw value alongside the normalised one so the audit trail shows what was actually on the page. Never let a fuzzy match auto-assign silently — set the threshold, log the score, and review the near-misses periodically. That is where you discover the client who moved office.
A3 — Read documents for specific variables
Not "summarise this document" — return an exact structure, with provenance on every field:
{ "source_document_id": "...", "fields": { "rate": { "value": 450.00, "confidence": "high", "source": { "page": 1, "line": 14, "quote": "Day rate: 450.00" } }, "vat_treatment": { "value": null, "confidence": "not_found", "reason": "no VAT line present in document" } } } Schema-validate before anything downstream runs. Provenance is what lets you defend a figure in a client query or an audit — and what lets you find the systematic error when one field keeps coming out wrong.
On document reading: born-digital PDFs give reliable text. Scans need OCR, and OCR errors on digits are the dangerous kind — 1/7, 5/6, a misplaced decimal. Treat any figure from a scanned source as lower confidence by default, and consider requiring review on all of them.
A4 — Always check the SSOT
The single source of truth holds the critical data items. Reconciliation produces one of three outcomes per item:
| Outcome | Meaning | Action |
|---|---|---|
| Agrees | Extracted values match the SSOT | Proceed to worklist |
| Differs | A value disagrees with the SSOT | Flag with both values; SSOT wins unless a human says otherwise |
| Missing | A required value not found anywhere | Hold for correction; do not draft |
Then compute the worklist — the thing you actually read each morning: how many invoices are outstanding, how many chases are unanswered, and how much billable work has no invoice raised. The third number is the one that pays for the whole build. Outstanding invoices are visible in your accounting package already; work that was never invoiced is invisible by definition. It is the error that does not announce itself.
A5 — Human-in-the-loop authorisation
The gate. On approval, two branches run in parallel. Branch A sends chase emails for outstanding invoices immediately; tone should reflect payment history, and the escalation ladder should be explicit and bounded — after step n it stops being an automation question and becomes a commercial decision. Branch B queues new invoices with delivery deferred by n days.
On deferred sending — check the mechanism, not the menu item:
| Mechanism | Hold enforced | Survives your laptop closing |
|---|---|---|
| Desktop mail client delay delivery | The local client's outbox | No |
| Webmail schedule send | Server-side | Yes, but rarely exposed for automation |
| Transport rule deferral | Server-side | Yes, but applies broadly, not per item |
| Draft + your own timer release | Wherever your scheduler runs | Yes — recommended |
Fig. 11 — where the ability to send is withheld
The recommended pattern: create the message as a draft, record a release time, and have the same scheduler that runs the hourly scan release drafts whose time has come. The hold is then enforced somewhere that stays running, is visible in your own data, and is cancellable by changing a row. The property that matters is not which button holds the mail — it is that the hold is enforced somewhere that stays up.
A6 — Augmented, not automated
What moved: watching, matching, counting, drafting, chasing. What did not: the decision. Measure three numbers before and after.
Days sales outstanding
Is money arriving sooner?
Invoices sent late, or never
Is the leak closed?
Minutes per invoice
Is the effort actually lower?
Fig. 12 — what moved, and what did not
If the third falls and the first two do not, you have built something fast rather than something correct. That is the failure mode worth watching for, because it feels like success.
Suggested build order
Each stage is useful on its own and safe to run while later stages are still manual.
- F1 + F3Template split and extraction contract written down. No agent yet — you now have a documented process, which is worth having regardless.
- F2The agent extracts the five fields from one document on demand, with provenance. You check every one against what you would have typed.
- A3 + A4Schema validation and SSOT reconciliation. Watch the disagreement rate; it tells you whether your SSOT is actually true.
- A1 + A2Put it on a schedule with idempotency and client matching. Output is a worklist only. Run for a full billing cycle in this state.
- A5 draftThe sandbox produces drafts. Nothing can send. Review daily.
- A5 releaseChases first — lower stakes, recallable. Invoices last, with the deferred hold on from day one.
Fig. 13 — sending is the last thing switched on
Do not skip step four. A month of worklist-only running is what tells you whether the matching and reconciliation are trustworthy, and it costs nothing to be wrong during it.