Easy Tax Digital
Making Tax Digital filing software for sole traders and landlords, engineered against the live HMRC API surface, with launch deferred on commercial grounds.
easytaxdigital.com · not currently serving a public product
HMRC API surfaces integrated
9+
Obligations, quarterly updates, annual summary, calculations, losses, declarations and OAuth. Counted from the API client in the repository.
Django applications in the codebase
21
Counted from the apps directory. Includes payroll, invoicing, timesheets and bank import alongside the core filing path.
Automated tests in the suite
183
Counted from test functions in the repository, covering the filing path, fraud prevention headers and OAuth token handling.
Each figure above is read from a system we operate, and the note says which one. Where a figure would flatter us but cannot be evidenced, it is not here.
Why it exists
Making Tax Digital for Income Tax moves a large population of sole traders and landlords from one annual return to quarterly digital filing through recognised software. That is a compulsory change to a mandatory obligation, which is usually a good place to build a product.
We built one.
The hard part
Filing to HMRC is not a REST integration with a tax flavour. The obligations layer alone has real complexity: periods that vary by business, obligations that change status when HMRC recalculates, and a submission model where the client must reconcile what it thinks it owes against what HMRC’s calculation engine returns.
The genuinely awkward requirement is fraud prevention headers. HMRC mandates a set of around twenty headers on every API call, describing the device, the connection, the user’s screen, the local timestamps and the vendor’s own version string. Getting them wrong does not fail loudly. It fails at recognition, months later.
That forced an architecture where header assembly is a first-class concern rather than a utility function: server-side collection for the connection and vendor facts, a client-side collector for device and screen facts, and middleware that composes them and refuses to call HMRC with an incomplete set.
Around that sits the ordinary regulated-SaaS work. OAuth tokens refreshed on a schedule before expiry rather than on failure. Field-level encryption at rest for those tokens. Background jobs for obligation sync and deadline reminders. Bank statement and receipt ingestion, because the quarterly submission is only as good as the bookkeeping behind it.
Why launch was deferred
The software works. The commercial case for taking it to market did not.
Two things drove that decision. The first is distribution: the accountants and bookkeepers who actually choose filing software have incumbent relationships, and winning them is a sales motion this group was not resourced to run. The second is the standard the product would have to hold once live. Filing software is not a directory or a marketing site. If it is wrong, a customer is late or misreported to HMRC, and that liability sits with us.
We took the view that shipping regulated tax software without committing to support it properly was the worse of the two options. The platform is therefore built, documented and held, with production recognition deliberately not pursued.
What we would do differently
We built breadth before recognition. Payroll, invoicing and timesheets are in the codebase alongside the filing path, and none of them mattered until the core submission could actually reach HMRC in production. The right sequence was the narrowest possible filing product through recognition first, then everything else.
We also validated the regulation and not the customer. The obligation is real and the deadline is real, and we let that stand in for demand. Being certain that people must buy something is not the same as being certain they will buy it from you, and the distance between those two is where this product stopped.
It is on the site because it is part of the record. A portfolio that only shows the things that worked is a sales page, not a portfolio.
Start with what is in the way.
Most of this work is shaped by the obstacle rather than the ambition. A deal that keeps stalling at the same stage, a process nobody owns, a product that will not sell, a decision that has been open for months. Tell us yours and we will say honestly whether we are the right people for it.