Early Access · March 2026

Accounting as Code

A programmable double-entry accounting engine for UK limited companies and sole traders.

Double-entry enforced by PostgreSQL triggers that reject unbalanced journal entries. Invoicing, bank reconciliation, and VAT returns (Box 1–9) — all through an OpenAPI-described REST API with prefixed IDs, minor units, and scoped API keys. 198 endpoints. Zero floating point.

No third-party tracking. No cookies. Visitor analytics via self-hosted Umami.

Built with

Fastify
React
PostgreSQL
TypeScript

From the creator of "C From Scratch" and the certifiable-* ecosystem .

Terminal — POST /v1/invoices
~ curl -X POST https://api.speybooks.com/v1/invoices \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"contact_id": "cont_8x9s0a",
"amount": 150000,
"currency": "GBP",
"items": ["DevOps Consulting - Jan 2026"]
}'
201 Created 14ms
{
"id": "inv_7k2m9p",
"status": "draft",
"total": 180000,
"tax": { "rate": "VAT_20", "amount": 30000 }
}
~

Accounting infrastructure, not another dashboard.

Core UK accounting primitives exposed via API — double-entry ledger, VAT returns, invoicing, and bank reconciliation.

Live

REST API with Prefixed IDs

Every feature available through a typed REST API. Prefixed IDs like inv_142 and cont_8x so you always know what you're looking at. 198 endpoints across 31 resources.

GET /v1/invoices/inv_142
Live

Scoped API Keys

Create keys with fine-grained permissions. A reporting key that reads invoices shouldn't delete contacts. 17 resource:action scopes.

"scopes": ["invoices:read"]
Live

Immutable Ledger

Debits equal credits. Always. A PostgreSQL trigger rejects unbalanced entries. You cannot bypass it — not through the API, not through a bug.

RAISE EXCEPTION: debits ≠ credits
Live

Developer Shell

A terminal built into every page of the app. 198 endpoints with tab autocomplete, clickable entity IDs, route filtering. Toggle with Ctrl+J.

routes invoice → 14 matches
Live

Auto-Categorisation

A lattice-scored inference engine that evaluates every rule, ranks by specificity, and explains its decisions. No shadowing. Every classification stores rule ID, specificity score, and matched fields.

"reason": "Most specific match"
Live

Row-Level Security

Tenant isolation enforced at the PostgreSQL level across 25+ tables. Even a buggy query cannot return another tenant's data.

SET app.current_org_id = $1
Live

Migration Wizard

Switch from Xero, FreeAgent, or QuickBooks. Self-service with trial balance equality and closing balance verification before activation. Your ledger must match to the penny before go-live.

POST /v1/migrations/:id/execute
Live

Universal Bank Import

Upload any bank's CSV and the ingestion engine infers the schema. Column detection, balance proof, row conservation. Smart Map overrides for edge cases.

POST /v1/bank-imports/upload
Live

Financial Reports

P&L, Balance Sheet, Trial Balance, VAT Return, Aged Debtors, Aged Creditors. All available via API and CSV export with date range filtering.

GET /v1/reports/profit-loss

£15/mo sole trader. £25/mo limited company.

No per-invoice fees. No per-user pricing. One price per entity, with full API access included.

Free trial. Card required to start.

For UK limited companies with directors, dividends, and statutory reporting.

Limited Company

Most common
£25/mo

Cancel anytime

  • Database-enforced double-entry (PostgreSQL trigger)

  • Invoices, quotes & PDF generation

  • Auto-categorisation with evidence trail

  • Full REST API & Developer Shell

  • Scoped API keys, webhooks & metadata

  • VAT returns (Box 1–9, MTD-compatible export) †

  • Universal bank import (any CSV)

  • Migration wizard (Xero, FreeAgent, QBO)

  • Dividend wizard & PDF vouchers †

  • Director Loan Accounts — 7 loan types, automatic double-entry †

  • S455 exposure with connected persons aggregation (CT600) †

  • BiK at HMRC official rate with average balance calculation †

  • DLA year-end snapshots with S455 deadline tracking †

  • Board minutes & year-end snapshots

† SpeyBooks provides tools to record and organise financial data. It does not provide tax, accounting, or legal advice. Features relating to VAT, MTD, S455, BIK, and dividends are calculation aids only. Consult a qualified accountant for compliance requirements.

30-day free trial · Card required to start

Switch between Sole Trader and Limited Company without data migration.

Not ready to switch?

Read the Documentation first