Beancount.io LogoBeancount.io

Designing a Chart of Accounts That Actually Tells You Something

12 min readMike ThriftMike Thrift
Designing a Chart of Accounts That Actually Tells You Something

Open most small business chart of accounts files and you'll find the same thing: 247 accounts, a dozen of which have balances, half of which were created at midnight by a tired bookkeeper who couldn't find the right category. The P&L stretches to four pages. The owner can't tell whether the business is making money. Nobody has touched the structure in six years because the thought of fixing it is exhausting.

A chart of accounts (COA) is supposed to be the answer to a simple question: where did our money come from, and where did it go? When it stops answering that question, financial statements become wallpaper — a thing you print out for the bank and ignore the rest of the year. The fix is not more accounts. The fix is fewer accounts arranged with intent.

This guide walks through how to design a COA that produces financial statements you actually read: how to number it, when to use sub-accounts versus dimensions, what to do about departments and locations, and how to spot the bloat that turns useful reports into noise.

What a Chart of Accounts Is Really For

The chart of accounts is the index of your general ledger. Every transaction your business records — every invoice, every paycheck, every bank fee — lands in one of its accounts. The accounts then roll up into the five categories that make a financial statement:

  • Assets (1000s) — what the business owns: cash, receivables, equipment, prepaid expenses.
  • Liabilities (2000s) — what the business owes: payables, credit cards, loans, deferred revenue.
  • Equity (3000s) — the owner's claim on the business: capital contributions, retained earnings, distributions.
  • Revenue (4000s) — what customers pay you.
  • Expenses (5000s, 6000s, 7000s) — what it costs to earn that revenue. Cost of goods sold is usually 5000s; operating expenses are 6000s; non-operating items like interest expense often sit in 7000s.

That five-bucket structure is universal. A coffee shop, a SaaS startup, a private foundation, and a freight broker all use the same five categories. What varies is the granularity inside each bucket — and that is where most charts of accounts go off the rails.

Numbering: Leave Room to Grow

The numbering convention is more important than it looks. A good scheme lets a reader glance at any transaction line and know its category without thinking. A bad scheme forces every accountant to memorize a custom map.

The most common convention is a four-digit system: the first digit signals the type, and the remaining three give you 999 slots within that type. Three-digit systems work for very small businesses, but four digits cost you nothing and prevent the renumbering project that hits every growing company. Five-digit systems are useful when you want a leading digit for the company or entity in a multi-entity group.

Here is the move that saves you every time: leave gaps. Number your accounts in increments of 10 or 20.

1000  Cash
1010  Checking — Operating
1020  Checking — Payroll
1030  Savings
1040  Money Market

Six months later, when you open a new high-yield account, you can drop it in at 1015 without renumbering anything downstream. Software like QuickBooks lets you sort by account number, so the new account slots into the right place automatically. Sequential numbering (1000, 1001, 1002) seems tidy, but it forces you to either renumber the chart every time you add an account or live with a sort order that no longer reflects how you think about the business.

A working numbering map for a small business looks like this:

  • 1000–1099 Cash and equivalents
  • 1100–1199 Accounts receivable and allowances
  • 1200–1299 Inventory
  • 1300–1499 Prepaid expenses, deposits, other current assets
  • 1500–1799 Fixed assets and accumulated depreciation
  • 1800–1999 Intangibles, long-term assets
  • 2000–2099 Accounts payable
  • 2100–2199 Accrued liabilities (payroll, taxes, interest)
  • 2200–2399 Credit cards
  • 2400–2499 Short-term loans and current portion of long-term debt
  • 2500–2999 Long-term debt, deferred revenue
  • 3000–3999 Equity (member contributions, retained earnings, distributions)
  • 4000–4999 Revenue
  • 5000–5999 Cost of goods sold
  • 6000–6999 Operating expenses
  • 7000–7999 Other income and expense (interest, gain on sale, tax)

This is a starting point, not gospel. The key is that every range has a clear meaning and there is space inside each range to add an account without dislodging the next category.

Start Small. Almost Embarrassingly Small.

The single biggest mistake new business owners make is opening their books with 80 accounts they pulled from a template. They never use 60 of them. The 60 unused accounts are not free — they make every transaction harder to code, every reconciliation slower to clear, and every report longer to read.

A solo consultant probably needs about 20 accounts to run the business: one cash account, one credit card, accounts receivable, a couple of revenue lines, payroll if there is any, and the dozen recurring operating categories (rent, software, contractors, travel, meals, professional fees, marketing, taxes, bank fees). That is the whole chart. Add accounts as the business does things that genuinely need a new category — not in anticipation of someday doing them.

The test for whether an account earns its place is simple: will I make a different decision because this account exists separately? If yes, keep it. If no, fold it into a parent.

"Office supplies" is an account. "Pens" is not an account.

Sub-Accounts: Use Them, but Cap the Depth

Sub-accounts are useful when you need to see both the detail and the rollup. The classic example is travel:

6400  Travel
6410   Travel — Airfare
6420   Travel — Lodging
6430   Travel — Ground Transport
6440   Travel — Meals

On the P&L, you can show all four sub-accounts to see the mix, or collapse to a single "Travel" line for the bank. The parent–child relationship gives you both views from one set of journal entries.

The rule of thumb that keeps sub-accounts honest: no more than three levels of hierarchy. Beyond three levels you are building a database, not a chart of accounts. If you find yourself wanting four or five levels, the thing you actually want is not a deeper chart — it is dimensions.

When to Use Dimensions Instead of More Accounts

Here is where most small businesses dig themselves into a hole.

You run three locations. You have five product lines. You serve two customer segments. So you create:

6010  Rent — Location A
6011  Rent — Location B
6012  Rent — Location C
6110  Marketing — Product Line 1
6111  Marketing — Product Line 2
...

By the time you cross-multiply locations, product lines, and customer segments into your account structure, you have an unmanageable matrix and a 600-account chart. Every new location triggers a wave of new accounts. Every account has to be remembered, used consistently, and trained into every new hire.

The cleaner pattern is dimensional accounting: keep the chart small and tag each transaction with attributes like location, project, department, or customer. Most modern accounting platforms support this through classes, tags, projects, locations, or custom segments. Plain-text accounting tools like Beancount handle it natively with metadata and named tags on every posting.

A dimensional approach turns:

6010 Rent — Location A
6011 Rent — Location B
6012 Rent — Location C

into:

6010 Rent  [location: A]
6010 Rent  [location: B]
6010 Rent  [location: C]

One account. Three reports. When you open location D, you do nothing to the chart — you just start tagging new transactions with location: D. The chart of accounts stays clean. The reporting gets richer.

The split between accounts and dimensions follows a simple principle: the chart of accounts answers what kind of thing happened. Dimensions answer where, for whom, and on what. Rent is rent regardless of the location. Salary is salary regardless of the department. The "kind of thing" goes in the account. The "context" goes in the dimensions.

Industry Patterns to Borrow

Although every business eventually customizes its COA, certain patterns repeat by industry, and copying them is cheaper than reinventing them.

Retail and E-Commerce

Inventory dominates. You want sub-accounts under inventory for raw goods, in-transit, finished goods, and returns. COGS needs to separate merchandise cost from freight-in, payment processing fees, and shrinkage. Shipping revenue and shipping expense usually each get their own account because the gross/net distinction matters to margin analysis.

Service and Consulting

Inventory shrinks to nothing. Revenue gets segmented by service type — fixed fee, hourly, retainer — so you can see which engagement model actually pays. Contractor costs and professional licenses usually warrant their own accounts because they are large, variable, and decision-relevant.

SaaS and Subscription

You will live with deferred revenue, accrued revenue, and deferred contract costs on the balance sheet because of ASC 606. Revenue accounts split between subscription revenue, implementation/one-time revenue, and usage-based revenue. On the expense side, hosting/infrastructure usually deserves a separate operating expense line, not buried in "software."

Nonprofit

Net assets replace equity, and the chart splits between unrestricted, temporarily restricted, and permanently restricted. Expenses must be reportable by function — program, management, fundraising — for the Form 990 and audited financials. Most nonprofits handle the functional split with a department or class dimension rather than triplicating every expense account.

Pick the closest pattern, simplify it, and customize from there.

The Bloat Test: A Year-End Cleanup Ritual

Charts of accounts decay the same way drawers do. Someone codes a Costco run to a new "Office Snacks" account at 11 p.m. Six months later, "Snacks," "Pantry," and "Kitchen Supplies" are all live and nobody remembers which is canonical. The drift is gradual and invisible until you try to budget against a category that exists in three places.

Run this cleanup ritual every January, or quarterly if your bookkeeper rotates:

  1. Pull a trial balance. Any account with a zero balance for the entire year is a candidate for retirement.
  2. Pull a P&L with all accounts shown, sorted by amount. Anything under a meaningful threshold — for a small business, often anything under $1,000 — is a candidate for merging into a parent.
  3. Look for duplicates. "Software Subscriptions," "SaaS Tools," and "Online Services" probably want to be one account. Pick one and merge the others into it.
  4. Review sub-account depth. Anywhere you have gone past three levels, ask whether the deepest level is really an account or whether it should be a dimension/tag/class.
  5. Document the chart. A one-line description on each account is the difference between a chart that survives the next bookkeeper and one that gets rebuilt every time someone new comes in.

Accountants charge by the hour. A clean chart cuts close costs every month, and it cuts audit and tax preparation costs every year.

Why Bookkeeping Discipline Matters More Than the Chart Itself

Even a perfectly designed chart of accounts is only as good as the bookkeeping behind it. Inconsistent coding turns the cleanest five-page chart into a mess: marketing expenses split between three accounts because nobody trained the new hire, owner draws coded as distributions one month and salary the next, COGS items coded to operating expenses because the bookkeeper guessed. Reports start lying.

The discipline that keeps a chart of accounts useful is unglamorous: a written coding guide so every bookkeeper interprets the chart the same way, a monthly close that catches drift before it compounds, and version-controlled records so you can trace why an account was added, renamed, or retired. Businesses that treat their books as a living document rather than a year-end tax exercise get usable reports out of the same chart that produces noise for everyone else.

Plain-Text Accounting Makes the Discipline Easier

A lot of the chart-of-accounts problems above are really tooling problems. Drop-down menus with 247 entries are easy to misclick. Templates packed with prepopulated accounts encourage bloat. Software that hides the COA behind a UI makes it hard to see the structure as a whole.

Plain-text accounting flips this. The chart of accounts is just a list of account names in a file you can read top to bottom in 30 seconds. Hierarchy comes from colons in the name: Expenses:Travel:Airfare is automatically a sub-account of Expenses:Travel, which rolls up to Expenses. Dimensions are tags on individual postings, not hard-coded segments. Every change to the chart shows up in a git diff, with a commit message explaining why. A year-end cleanup is a pull request, not a stressful weekend in QuickBooks.

If you can read your chart of accounts in one screen, you can keep it honest. If you cannot, the structure has already gotten away from you.

Keep Your Books Honest from Day One

A chart of accounts is a small artifact with outsized leverage. Get it right and your monthly close, your tax filing, your budget conversation with the bank, and your decisions about where to spend the next dollar all get easier. Get it wrong and every one of those processes gets harder forever.

Beancount.io provides plain-text accounting that makes a clean, intentional chart of accounts the default rather than the exception — transparent, version-controlled, and AI-ready. Get started for free and see why developers and finance teams are switching to plain-text accounting that they can actually read.