Detox Your Small‑Business Finances — the Beancount Way
Turn one messy ledger into a calm, cash‑confident business in 30 days—using plain‑text accounting.
TL;DR
- Separate, simplify, and lock your books with a lean chart of accounts, consistent imports, and automated balance checks.
- Surface what matters—COGS, overhead, cash runway—via quick
bean-queryreports. - Cut the noise (unused subscriptions, duplicate tools) and codify good habits (weekly reconcile, monthly close, receipts attached).
- Make tax season boring by keeping statements, receipts, and balances verifiable in one place.
Why a “Detox”?
Financial clutter in a small business isn't just messy—it's expensive. It hides wasteful spending, obscures your true profitability, and turns tax season into a frantic scavenger hunt. A financial detox is a focused, 30-day reset: you identify what moves (and leaks) money, remove the complexity, and then institutionalize simple, repeatable routines to keep it clean.
Beancount is the perfect tool for this because it’s transparent, scriptable, and verifiable. Unlike black-box software, a plain-text ledger means every number is explainable. Every check and balance can be automated with directives and queries, creating a self-auditing system that forces clarity. This guide will walk you through a four-week plan to achieve just that.
Week 0 — Set Your Baseline
Before you can clean up, you need a solid foundation. This week is about defining the structure of your financial world.
Create a Lean Chart of Accounts
Your chart of accounts is the skeleton of your financial system. The goal here is minimalism. Don't create an account for every possible expense you might have. Start with the essentials you use today; you can always add more later. A cluttered chart of accounts encourages miscategorization and makes high-level analysis difficult.
Here’s a simple, effective starting point:
; Core entities
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Assets:Bank:Savings USD
2025-01-01 open Liabilities:CreditCard:Business USD
2025-01-01 open Income:Sales
2025-01-01 open Expenses:COGS
2025-01-01 open Expenses:Overhead:Rent
2025-01-01 open Expenses:Overhead:Utilities
2025-01-01 open Expenses:SaaS
2025-01-01 open Equity:Opening-Balances
Lock Balances You Can Verify
The most powerful feature in plain-text accounting is the ability to assert reality. A balance directive tells Beancount: "On this date, this account had exactly this much money." If it doesn't, Beancount will raise an error. This is your primary safety net.
When starting out, use pad in combination with balance to initialize your accounts from a bank statement. The pad directive creates a transaction that forces the account to the correct starting balance, booking the difference to an equity account.
; Initialize from statements
2025-01-01 pad Assets:Bank:Checking Equity:Opening-Balances
2025-01-01 balance Assets:Bank:Checking 12345.67 USD
A word of caution: Use pad sparingly. It's for getting started cleanly, not for papering over recurring reconciliation mistakes.
Week 1 — Separate and Simplify Flows
With a structure in place, it's time to clarify how money moves through your business.
Keep Business ≠ Personal
This is the golden rule of small-business finance. Co-mingling funds is a recipe for confusion and tax-time headaches.
- Maintain one dedicated business bank account and one business credit card.
- Mirror this separation in your ledger:
Assets:Bank:Business:Checking,Liabilities:CreditCard:Business. - If you pay yourself, book it as a distribution to
Equity:Owner-Draws. Never categorize personal expenses directly from business accounts.
Standardize Vendor Categories
Do you pay for AWS, Google Cloud, and Vercel? Don't create three separate accounts. Map them all to a single, logical category like Expenses:Cloud. Avoid creating micro-accounts you won't actually analyze. The goal is to see patterns, not to track every single vendor with its own account.
Week 2 — Automate Inputs and Receipts
Manual data entry is slow, error-prone, and unsustainable. This week is about building a machine to feed your ledger reliably.
Build a No-Drama Import Path
Beancount's import framework lets you teach it how to read CSV or OFX files from your bank and automatically generate transactions. Invest the time to set this up once, and you'll save hundreds of hours down the line. Keep your importer rules in version control (like Git) so your system is repeatable and backed up.
- Start with Beancount’s official Importing External Data guide.
- For a more interactive workflow, consider a tool like beancount-import, which provides a web UI for semi-automatic matching.
- Many users rely on the built-in
ingestor newerbeangulpframeworks to build their custom importers. Pick one and stick with it for consistency.
Attach Documents Where They Belong
A transaction without a receipt is an unsubstantiated claim. Beancount and its web interface, Fava, make it trivial to link source documents to entries, creating an unshakeable audit trail.
You have two great options:
- Documents Folder + Directive: Store all your receipts and statements in a dedicated folder. Then, link a file to a transaction using the
documentdirective. - Drag-and-Drop in Fava: Simply drag a PDF or image file onto a transaction in the Fava UI. Fava automatically stores the file and inserts the correct
documentdirective into your ledger file for you.
; In your main ledger file, tell Fava where your documents live
option "documents" "/home/acme/docs"
; Link a receipt to a specific transaction posting
2025-08-07 * "Figma" "Monthly Subscription"
Assets:CreditCard:Business -12.00 USD
Expenses:SaaS 12.00 USD
document: "receipts/figma-2025-08-07.pdf"
Week 3 — See the Truth (Fast Queries You’ll Reuse)
Your ledger is now clean and fed with data. It's time to ask it important questions. Fire up the bean-query command-line tool to get instant answers.
1) Where’s My Cash?
Get a quick snapshot of your liquid assets.
bean-query business.beancount 'BALANCES FROM year = 2025 AND (account ~ "Assets:Bank" OR account ~ "Liabilities:CreditCard")'
This gives you an immediate, real-time view of your cash position without logging into multiple bank portals.
2) What Am I Spending On Overhead vs. COGS?
Understand where your money is really going. Are you spending more on non-essential overhead or on the costs directly tied to delivering your product (Cost of Goods Sold)?
SELECT
account,
units(sum(position))
WHERE
account ~ "^Expenses:(Overhead|COGS)" AND year = 2025
GROUP BY
account
ORDER BY
account
This query separates your core operational costs from your administrative burden, a critical insight for profitability.
3) Which Subscriptions Look “Zombie”?
Find recurring, small-dollar expenses that often fly under the radar. These "zombie" subscriptions can bleed your cash flow dry.
SELECT
payee,
COUNT(*) AS num_transactions,
SUM(number) AS total_spent
WHERE
account ~ "^Expenses:SaaS" AND date >= '2025-01-01'
GROUP BY
payee
ORDER BY
num_transactions DESC,
total_spent DESC
This query instantly reveals vendors you pay frequently. If you see one you don't recognize or no longer need, it's time to cancel.