AI at Work

What I've Learned · Oct 4, 2026 · Updated Oct 30, 2026 · 8 min read

AI Bookkeeping With Claude: 15 Months, Then QuickBooks

ai-bookkeeping-small-business.jpg
_ □ ×
ai-bookkeeping-small-business.md
_ □ ×

AI can do the categorizing part of bookkeeping well. We built our own bookkeeper on Claude Code, and it sorted 559 bank transactions across 15 months of statements into our chart of accounts with zero left uncategorized. In August we retired it anyway and moved to QuickBooks Online Plus with a live bank feed. The hard part of keeping books turned out to be getting transactions in every day and keeping one set of books a teammate can close each month. A product we were about to pay for already did both.

Can AI do bookkeeping? We gave it a year of books

In February I had eleven months of 2025 bank statements sitting as PDFs and an accountant to send them to. On February 13 I built what the repo still calls Claude Accountant. The git history for that day is seven commits long.

The workflow was four slash commands, plus a fifth that only reported progress. /finance:import read the statement PDFs straight into a JSON file. /finance:categorize walked through anything it didn’t recognize and asked me where it belonged, then saved my answer as a vendor rule so the next import would know. /finance:export wrote QuickBooks-compatible CSVs. /finance:summary gave a P&L by category.

The piece I’d keep in any version of this is a hook, a shell command Claude Code runs on its own after certain actions. Every time Claude wrote to the transactions file, a script added up income and expenses for each month and checked them against the statement’s own totals and its starting and ending balances. If a number was off by more than a cent, the edit got flagged right away. A language model reading PDFs will eventually misread one, and a balance check on every edit is how you find out the same minute instead of at tax time.

That afternoon it imported 223 transactions from 2025, categorized all of them, and exported full-year and quarterly CSVs for the accountant. A year of catch-up bookkeeping took one day, and every month reconciled to the statement.

What 15 months taught it

We kept feeding it. By the last import it held 559 transactions from February 2025 through April 2026, and 52 commits in the repo had touched the finance folder. All 15 monthly statements still reconciled to the cent against their own totals and balances.

The rules file is where the learning lived. It started with 76 vendor rules. By April it had 143, and by May it had 151. Each one was a small decision I’d made once and never had to make again. That’s the honest version of “the AI learns your business”: it learned because every correction got written to a file, which is the only kind of learning I’ve seen actually stick (we built three loops that were supposed to learn on their own, and none of them collected anything).

Two small things went wrong along the way. When we rewrote the parser, three rules stopped matching because they had a stray asterisk in the vendor text. And the README still says 73 rules today. It was three off on day one, and nobody touched that line again. The file is right. The docs drifted, and Claude reads both.

Why we switched to the boring tool

The volume changed. In mid-2025 we had 11 to 18 transactions a month. In March 2026 we had 126. The first three months of 2026 brought 244 transactions, more than the 223 from all of 2025.

Bank transactions per quarter, Feb 2025 to Apr 2026Feb to Mar 2025: 0Feb to Mar 20250Apr to Jun 2025: 38Apr to Jun 202538Jul to Sep 2025: 46Jul to Sep 202546Oct to Dec 2025: 139Oct to Dec 2025139Jan to Mar 2026: 244Jan to Mar 2026244Apr 2026 (one month): 92Apr 2026 (one month)92
A process that waits for someone to download PDFs is fine at a dozen transactions a month and a backlog at a hundred.
Show the data
PeriodTransactions
Feb to Mar 20250
Apr to Jun 202538
Jul to Sep 202546
Oct to Dec 2025139
Jan to Mar 2026244
Apr 2026 (one month)92
Total559, none uncategorized

And the pipeline only ran when someone sat down with PDFs. The last import, on May 11, brought in January through April in one batch. For months at a time, our books were only as current as the last time someone downloaded statements.

Then we wanted things a CSV can’t give you. We wanted margin per client, a runway number that updates without anyone touching it, and a monthly close that a teammate can run without opening a terminal. In June we decided on QuickBooks Online Plus as the ledger, with one class per client, and Fathom on top as the KPI layer. Fathom pulls from QuickBooks once every 24 hours on its own.

Our tool’s whole output was a CSV for someone else’s ledger. Once that ledger was connected to the bank directly, our pipeline became a second copy of the books that had to agree with the first. Two sets of books that need to match is a chore with no end, and the second set was the one only I could operate.

The best thing the pipeline left behind was its rules. QuickBooks bank rules match the description or bank text of a transaction and set its category, which is exactly what our rules file did. A company file can hold up to 2,000 of them, so ours used under a tenth of the room. On June 30 we exported all 151 of ours as QuickBooks bank rules. Everything the AI had learned moved into the product in one CSV.

The README got a retirement banner in late August, and the commit that formally retired the pipeline landed on August 31.

The tradeoff is real. Our pipeline had zero uncategorized transactions. The done criterion we set for the QuickBooks backfill was under 5% uncategorized. We accepted a looser number in exchange for a ledger that fills itself every day, and that was the right trade.

What still runs

Two pieces of the finance package still run.

One is cash reconciliation. Our client receipts and contractor payments are tracked in Notion, and the bank doesn’t know anything about Notion. A command compares the two, writes a report and proposes fixes that a person approves. No product we pay for does that, because no product knows how our Notion is set up.

The other is a set of commands that pull the P&L and transactions out of QuickBooks through its API, so the rest of the company brain can answer finance questions with real numbers instead of a stale export. So far they’ve only been pointed at Intuit’s sandbox company, the fake one developers test against. Switching to our real books is a setting and a fresh sign-in, and we haven’t flipped it yet. Fathom already reads the real books every 24 hours, so the gap hasn’t been urgent.

QuickBooks also has its own Claude connector now, from Intuit, and it can do a lot more than read. What it can touch, and how we’d scope it, is in Is It Safe to Connect Claude to QuickBooks?. If your books are in Xero, its read-only connector carries different risks.

The custom code moved up a level. It used to do the bookkeeping. Now it sits on top of the bookkeeping product and connects it to the systems that product has never heard of.

Will AI replace your bookkeeper?

We went the other way. In September, a month after the pipeline retired, we brought on a part-time bookkeeper, with her own QuickBooks login. Her onboarding kit gave her five known problems on day one, including marketplace payouts recorded as refunds, contractor payments flipping between two accounts and $4,000 to $8,000 a month sitting in Uncategorized.

That list is the answer. Our AI was very good at a narrow job: putting a transaction where a person had already decided that kind of transaction goes. The rules file grew every time it asked me where something belonged and I answered. A bookkeeper’s job is the questions nobody has answered yet, like whether a payout is revenue or a refund, and a rules file can’t answer those until someone has decided them once.

Where custom AI earns its keep

The rule I took from this applies well past bookkeeping. If the work happens inside one product you already pay for, and the data already lives there, use the product’s feature, even when it’s worse at the clever part. QuickBooks categorizes less perfectly than our pipeline did. It also gets the transactions on its own, keeps one copy of the books and lets someone besides me run the close. A homegrown tool would have to rebuild all of that before it could compete.

Where custom AI has paid off for us:

  • One-time catch-up jobs. A year of PDF statements in an afternoon. You run it, check it and throw it away.
  • The seams between products. Bank versus Notion, QuickBooks versus the company brain. No vendor builds the bridge between your specific tools.
  • Work no product sells. If you search for the tool and nothing comes up, that’s a real signal.

Finance is one of several areas where we run commands like these. The rest of our Claude Code use cases cover sales, marketing, strategy and project management.

Before any of that, ask the question I now ask before building anything: should this exist at all? Plenty of what gets called automation is a report nobody reads.

For an AI accountant for small business, my answer is to get a bank feed and bank rules running first. Then use AI for the backlog, the reconciliation across systems and the questions you want to ask your numbers.

If you’re sorting your own list

Most small business owners I talk to have a list of things they want AI to handle. Some of those need custom work. A lot of them are a setting in a product they already pay for. Bring the list to a free 30-minute call and we’ll sort which is which. If you’d rather sort it yourself first, the setup planner asks six questions and gives you a plan without asking for an email. Before you drop statements into a chat, read whether it’s safe to upload them.

Keep Reading