Spiris called a month early. I switched to Accounted the same afternoon.
Blog post #105

AI-generated illustration.
Spiris called me about a month before my free period ran out. A friendly call, the kind you get when a trial is about to turn into a paid subscription: 299 kr a month, twelve months binding, starting 18 November. I had nothing to complain about. The bookkeeping for Aelg AB was in order, the Lunar bank feed worked, and their MCP server (still in beta) let Claude read and write vouchers. I was a satisfied customer.
Then two people, independently of each other, told me the same thing: Accounted is much more agentic. Open source, built for AI agents from the start, with a free plan that includes the MCP server.
That was enough to run a test. By the end of the afternoon I had cancelled Spiris.
What changed since last log
- Aelg AB’s bookkeeping now lives in Accounted. Spiris is cancelled, with access until 18 November. The confirmation mail is filed with the rest of the paperwork.
What shipped
- The company, set up right from the start. Accounted’s onboarding pulled the registration date from Bolagsverket and offered a shortened first fiscal year, 11 May to 31 December. Then it asked the two questions that matter for a small company: how often you report VAT (once a year) and how you keep the books (cash method). Both match the decision Skatteverket sent me in May. Claude had checked the source code beforehand and warned that the accounting method locks the moment the year has posted vouchers, so this was the one step where a wrong click would have meant starting over.
- The ledger moved over without a single click in Spiris. The migration wants a SIE4 file. Instead of finding the export menu, Claude read all 13 vouchers through the Spiris MCP, wrote the SIE file itself and compared the balances it implied with what Spiris reported. Eleven accounts, all matching to the öre. The import in Accounted then showed 13 vouchers, a result of −9,085.88 kr and 288.80 kr of VAT to reclaim. Same numbers as in Spiris.
- Lunar connected live. The bank step went through Enable Banking with BankID, and the feed picked up the balance and six transactions that aren’t booked yet. Accounted also has a dedicated parser for Lunar’s CSV export, which matters for the open question below.
- Skatteverket connected as a representative, so the tax account can be reconciled from inside the app.
- Claude connected over MCP. 142 tools. Reading settings, trial balance, vouchers and bank rows worked straight away. For writing, I had Claude stage a one-krona test voucher. It landed as a pending operation that I approve or reject in the app, with a warning that no receipt was attached. Nothing is booked until I say so.
What’s working
- Every write waits for a human. This is the design decision that made the switch feel safe. The agent proposes, I decide. In Spiris the write tools post directly to the ledger.
- Code I can read. When the documentation didn’t say whether the cash method was supported, Claude read the repository instead. The answer was in a database migration and a file called booking-mode.
- The bank feed caught what I had missed. Six unbooked rows, including two subscription charges I hadn’t noted anywhere. The old setup would have found them eventually. This one found them in the first hour.
What’s unclear or broken
- The open question: can I stay on the free plan? Open costs 0 kr and includes manual bookkeeping, SIE import and export, bank file import, VAT boxes, year-end and the annual report, plus the MCP. Auto costs 199 kr a month and adds the live bank feed, AI categorisation and a few other things. My live Lunar connection is an Auto feature, so I’m probably on a 30-day trial right now, and nothing in the API tells me which plan I’m on. If the feed disappears, the fallback is a Lunar CSV every month, which the free plan supports. The AI categorisation I don’t need, because Claude does that part over MCP. So the honest answer is: Open should be enough, and I’ll know for sure in a month.
- Two settings to fix. The EU-trade flag came out false, although the company buys services from Ireland and goods from Denmark. That can move the VAT deadline. And the share capital field is empty.
- The local MCP server needs a second login. The connector added through claude.ai works and shows up in Claude Code as well, so this is a nuisance, not a blocker.
Decisions made
- Cash method, yearly VAT, shortened first year. Chosen in onboarding, before a single voucher was imported.
- Permissions in the connector. Read tools are always allowed. Write tools ask every time while I’m still learning the system. A handful stay on “ask” permanently: submitting the VAT return, sending invoices, running year-end, locking periods, undoing a SIE import.
- Cancel the same day. There was no reason to run two systems in parallel. The numbers matched, the cancellation went through the self-service page, and the confirmation arrived within the hour.
Tooling & process
- Claude did the migration, I did the clicking. Account creation, consent screens and the cancellation itself are mine. Reading, building the SIE file, reconciling and staging the test voucher were Claude’s.
- One Claude session for the evaluation, started from the bookkeeping session. It wrote a report into the bookkeeping folder with what worked, what’s missing and the steps to cancel, so the main session can pick up the six unbooked rows next.
— Stefan