Crypto is easy to buy and painful to declare. Every trade, swap, and transfer is a taxable event somewhere, and the German tax system is not known for going easy on novel asset classes. Chainreport is the platform we built to make that tractable: connect your wallets and exchanges, and get a defensible tax report with a single click. You can sign up here for free.
The problem: compliance that punishes activity
The more you actually use crypto, the worse the reporting burden gets. Hundreds of transactions across several wallets and exchanges, each with its own format and its own idea of a timestamp, have to be reconciled into something a tax office will accept. Doing that by hand is error-prone and miserable; doing it wrong is expensive.
The system: connect, normalize, report
Chainreport pulls trades from connected wallets and exchanges through their APIs, normalizes them into a single ledger, and gives users one coherent view of holdings and transactions. From there, generating the actual tax report is a click. The hard engineering is not the tax math — it is making heterogeneous, third-party data arrive completely and reliably.
Most of the work in a tax product isn’t the tax. It’s getting external data to show up, in order, every time.
Engineering for rate limits
The frontend is a Next.js React application, which gives an optimized, performant React experience while leaving room to grow — there are few reasons left to start a new app on Create React App instead. The backend is a Node and GraphQL server, a combination I have long favored.
The interesting constraints live at the edges. Exchange and price APIs are aggressively rate-limited, so we put a Redis caching layer in front of coin-price lookups and previous requests, and a queue service to schedule calls against those limits without dropping data. That is what lets a report covering thousands of transactions resolve quickly instead of hammering an upstream API into refusing us.
Where it’s headed
The next steps are a move to a serverless architecture for better scalability and a calmer operational story, and a frontend redesign to match. The goal stays the same: take one of the more dreaded parts of owning crypto and make it a click.
