Skip to main content

16 posts tagged with "bookkeeping"

View all tags

Navigating Receivables in Beancount

· 3 min read
Mike Thrift
Mike Thrift
Marketing Manager

In the labyrinth of personal finance management, Beancount emerges as a beacon of clarity and precision for plain-text bookkeeping. Particularly when it comes to managing receivables—money expected from others—Beancount offers a structured approach to keep your financial records in impeccable order. This blog will guide you through the intricacies of tracking receivables, processing refunds, and managing unresolved transactions with Beancount. Whether you're returning a purchase, lending money, or awaiting a refund, this post is your roadmap to financial clarity.

Understanding Receivables in Beancount:

2024-02-17-navigating-receivables-beancount-guide

Receivables represent money that is owed to you. This could be from a variety of scenarios, such as after a shopping return awaiting a refund or when you lend money to someone. For instance, consider you've returned a watch strap to an online store like Amazon.com and are awaiting a refund. In Beancount, this transaction is recorded as money moving from your credit card liability to your assets as receivables:

2023-10-31 * "Amazon.com" "[Return] Watch Strap"
Liabilities:CreditCard:Chase -12.00 USD
Assets:Receivables

Managing Refunds:

Once the refund is processed and you receive the money, another transaction is recorded to offset the balance in Receivables. This ensures that your accounts reflect the money back in your possession:

2023-11-01 * "Amazon.com" "[Refund] Watch Strap"
Liabilities:CreditCard:Chase 12.00 USD
Assets:Receivables

Complete Transaction Cycle:

A complete in-and-out transaction involving receivables is combining both transactions above and showcased as follows, demonstrating a balanced account post-refund:

2023-10-31 * "Amazon.com" "[Return] Watch Strap"
Liabilities:CreditCard:Chase -12.00 USD
Assets:Receivables

2023-11-01 * "Amazon.com" "[Refund] Watch Strap"
Liabilities:CreditCard:Chase 12.00 USD
Assets:Receivables

Handling Unresolved Transactions:

For transactions where the refund or repayment has not yet been received, Beancount employs the #UNRESOLVED tag. This tag helps in identifying and tracking amounts that are still pending. For example:

2023-10-31 * "John Doe" "Lending Money" #UNRESOLVED
Liabilities:CreditCard:Chase -100.00 USD
Assets:Receivables

By focusing on transactions tagged as #UNRESOLVED, you can quickly ascertain which amounts are yet to be settled.

Maintaining a Zero Balance:

In a proper ledger, the sum of all transactions under the Assets:Receivables account, excluding those tagged with #UNRESOLVED, should ideally return to zero. This ensures that all expected funds have been accounted for, maintaining the integrity of your financial records.

For example, a valid ledger might look like this, with an unresolved transaction clearly marked, awaiting closure:

2023-10-31 * "Amazon.com" "[Return] Watch Strap"
Liabilities:CreditCard:Chase -12.00 USD
Assets:Receivables

2023-11-01 * "Amazon.com" "[Refund] Watch Strap"
Liabilities:CreditCard:Chase 12.00 USD
Assets:Receivables

2023-10-31 * "John Doe" "Lending Money" #UNRESOLVED
Liabilities:CreditCard:Chase -100.00 USD
Assets:Receivables

An invalid ledger is one where a transaction causes the Receivables account not to zero out, necessitating the #UNRESOLVED tag for correction.

Conclusion

Navigating receivables in Beancount doesn't have to be daunting. With a clear understanding of how to record transactions, manage refunds, and keep an eye on unresolved transactions, you can maintain accurate and reliable financial records. Embracing the structured approach of Beancount for receivables management not only simplifies your financial tracking but also brings peace of mind, knowing that every dime is accounted for. So, why not leverage the power of Beancount to make your financial management as smooth

DIY vs. Hiring a Bookkeeper: A Beancount Playbook for Cost-Conscious Founders

· 6 min read
Mike Thrift
Mike Thrift
Marketing Manager

As a founder, you wear every hat—CEO, salesperson, product manager, and, yes, bookkeeper. But as your business grows, the hours spent reconciling transactions start to feel less like savvy bootstrapping and more like a costly distraction. So, when is the right time to hand off the books?

The answer isn't about giving up control; it's about making a data-driven decision. Here’s how to use your Beancount ledger to decide whether to continue DIY-ing or hire a professional.

2023-09-03-diy-vs-hiring-a-bookkeeper-a-beancount-playbook-for-cost-conscious-founders

TL;DR: If you bill your time at 85/hourandspendjustfourhoursamonthonbookkeeping,thatworkiscostingyou85/hour and spend just four hours a month on bookkeeping, that work is costing you 340 in lost revenue. A typical remote bookkeeper starts around $249/month—plus they free you up to actually grow the business.

1. Put a Price on Your Own Time

The most important metric in this decision is your own opportunity cost. Every hour you spend categorizing expenses is an hour you’re not spending on sales, product development, or strategy.

The math is simple:

  1. Track how many hours you spend on bookkeeping tasks each month (reconciling, coding, fixing errors).
  2. Multiply those hours by your effective billable rate.
  3. Compare that figure to the monthly fee of an external bookkeeper (a typical starting rate is around $249/month).

If the cost of your time is higher, you have an obvious delegation win. You can even track this directly in Beancount.

; Track the opportunity cost of your time
2025-07-31 * "July bookkeeping time"
Expenses:Admin:BookkeepingTime 4.00 H ; Your custom unit for hours
Equity:OwnerTime -340.00 USD
; metadata: rate:85

Here, H is a custom currency for "Hours." You can book the time directly and use a script or a price directive to assign its dollar value, making the cost of your own labor an explicit part of your financial reports.

2. Count the Hidden Costs of DIY

The cost of your time isn't the only factor. DIY bookkeeping carries risks that can be far more expensive than a monthly retainer.

  • Tax Slip-ups: Messy books are a nightmare for tax preparers. A CPA may charge anywhere from 150150–400 per hour just to clean up your records before they can even start on the tax return.
  • Missed Deductions & IRS Fines: Small, unintentional errors—like misclassifying an expense or forgetting to record a cash transaction—can compound over time, leading to penalties, interest, and a higher tax bill.
  • Founder Burnout: The mental drag of late-night reconciling is real. It drains focus and energy that should be dedicated to high-leverage activities like sales and product innovation.

Beancount Mitigation: You can reduce errors by adding a Git pre-commit hook that refuses to commit changes if bean-check fails or if transactions lack a category tag. This enforces discipline, even when you're tired.

3. Three Ways a Bookkeeper (or Beancount Discipline) Saves Money

Whether you hire a pro or simply level up your own process, good bookkeeping pays for itself.

  1. Cleaner Tax Filing: Organized, accurate books mean fewer CPA hours spent on cleanup, which directly translates to a lower bill.
  2. Real-time Cash Insight: Knowing your exact cash position helps you avoid costly overdraft fees and the need for last-minute, high-interest financing.
  3. Stress Buffer: Stable, predictable financial operations reduce founder stress, leading to better decision-making and a healthier business culture.

4. When You Shouldn’t Hire Yet

Hiring a bookkeeper isn't always the right move. In some cases, DIY is still the smarter financial choice.

  • You're pre-revenue or have razor-thin cash flow. At this stage, every dollar should go toward sales and customer acquisition. Focus on getting revenue in the door first.
  • Your finances are simple. If you have one bank account, one Stripe feed, and fewer than ~60 transactions a month, you can likely manage everything in Beancount and Fava in less than an hour a week.

5. The Hybrid Option: Your “Bookkeeper-Ready” Beancount Ledger

The best solution is often a hybrid one. Use Beancount to do the heavy lifting yourself, but keep your books so clean that a professional can jump in for high-value tasks.

  • Automate Ingestion: Set up bean-extract to run nightly, pulling in new transactions automatically.
  • Standardize Your Chart of Accounts: Use conventional account names (Expenses:Software, Assets:Bank:Checking) so any pro can understand your ledger instantly.
  • Attach Source Documents: For every expense over $75, use link: metadata to attach a PDF of the receipt or invoice.
  • Follow a Monthly Close Checklist:
    1. Reconcile all bank and credit card accounts.
    2. Run bean-check to ensure there are no errors.
    3. Export PDF statements with bean-report balance_sheet and bean-report income_statement.
  • Perform a Quarterly Hand-off: Give your bookkeeper or CPA a Git tag or a simple archive (books-Q3-2025.tar.gz). They can verify your work, add complex adjusting entries (like accruals and depreciation), and prepare tax packets.

This model keeps your costs low because the professional is only touching clean, reviewed data, while you still get the benefit of pro-level financial statements.

6. Quick Decision Matrix

SituationHire a ProStick with Beancount (DIY)
>60 Tx/month, >$20k MRR
You bill $100+/hr but spend 3+ hrs/mo on books
In a cash crunch, <$5k MRR
You genuinely love spreadsheets & automation

7. Next Steps

  1. Log your time. For your next bookkeeping session, track every minute you spend on it.
  2. Run the numbers. Multiply that time by your billable rate and compare it to the market rates above.
  3. Choose your path. Either tighten up your Beancount workflow using the hybrid model or start interviewing bookkeepers who are comfortable working from a plain-text ledger.

Either way, intentional bookkeeping is always cheaper than winging it. With Beancount as your immutable source of truth, you’ll know exactly when professional help pays for itself—and when it doesn’t.

Business vs Personal Bookkeeping: Drawing a Clear Line with Beancount

· 6 min read
Mike Thrift
Mike Thrift
Marketing Manager

A thriving company and a healthy wallet share one trait: boundaries.

For any business owner, from a solo freelancer to a growing startup founder, one of the most critical financial disciplines is the strict separation of business and personal finances. Mingling funds—using your business account for groceries or paying a business vendor from your personal checking—creates a messy, opaque financial picture. This not only invites scrutiny from tax authorities but also robs you of clear insights into your company's actual performance.

2023-08-12-business-vs-personal-bookkeeping-with-beancount

Fortunately, a plain-text accounting system like Beancount provides the perfect framework for enforcing these essential boundaries right in your ledger.

Why Separation Matters

Failing to separate your finances isn't just a bad habit; it carries significant risks and masks valuable business intelligence.

  • IRS Clarity: The IRS isn't just suggesting you keep separate bank accounts; they strongly urge it. When business and personal funds are commingled, it becomes difficult to prove which expenses are legitimate business deductions. This ambiguity can lead to questions and complications you're better off avoiding.
  • Audit Risk: Mixing transactions is a major red flag for auditors. If your books are a tangled mess of personal and business activity, you risk having valid deductions disallowed or even facing penalties. A clean, separate ledger demonstrates professionalism and makes any potential audit smoother and less stressful.
  • Cleaner Insights: How can you know your true profit margin if your business's cash flow is clouded by personal spending? A stand-alone business ledger gives you an unfiltered view of your company's financial health. You can accurately track revenue, analyze expenses, and calculate tax liabilities without the "noise" of your personal financial life.

Key Differences at a Glance

The purpose, rules, and structure of business and personal bookkeeping are fundamentally different. Understanding these contrasts is key to maintaining accurate records.

AreaBusiness BooksPersonal Books
PurposeTrack income, expenses, assets, and liabilities for tax and growth decisionsManage household budgeting and savings goals
Tax RulesMust follow Schedule C, 1120‑S, or 1065; strict deductibility standardsFew formal requirements beyond basic recordkeeping
AccountsEquity, payables, receivables, sales tax, payrollChecking, savings, investments, loans
Owner PaySalary (W‑2) or owner’s draw through equityN/A—personal withdrawals fund living costs

A Four‑Step Beancount Blueprint

Beancount makes it simple to erect a firm wall between your two financial worlds. Here’s a practical workflow to get it right.

• 1 — Open Dedicated Accounts

Before you even write your first Beancount entry, open a dedicated business checking account and business credit card. This physical separation is the foundation of clean bookkeeping. Once that's done, mirror this structure in your Beancount ledger.

2025-07-23 open Assets:Bank:Business   USD
2025-07-23 open Assets:Bank:Personal USD

This simple setup ensures that every transaction can be clearly assigned to either your business or personal finances from the moment it occurs.

• 2 — Record Owner Contributions & Draws

As an owner, you will move money between your personal funds and the business. These are not income or expenses. Instead, they are tracked through an Equity account.

  • Contribution: When you put your own money into the business to get it started or cover a shortfall.
  • Draw: When you take money out of the business for personal use (this is how many sole proprietors "pay" themselves).
; Capital injection to start the business
2025-07-23 * "Owner contribution"
Assets:Bank:Business 10,000.00 USD
Equity:Owner:Contrib

; Taking money out for personal living expenses
2025-08-05 * "Owner draw for rent"
Equity:Owner:Draw 2,500.00 USD
Assets:Bank:Business

By recording these as equity transactions, you ensure they don't incorrectly inflate your business expenses or reduce your reported profit.

• 3 — Handle Mixed Receipts Quickly

Mistakes happen. You might accidentally use your business card to pay for a personal dinner. The key is to correct it immediately in your ledger. Don't delete the transaction; reclassify it as an owner's draw.

2025-08-07 * "Personal groceries on biz card"
Equity:Owner:Draw 72.35 USD
Assets:Bank:Business

This entry correctly reflects that business funds were used for a personal expense, treating it as money you've taken out of the company. This prevents you from accidentally claiming a non-deductible personal expense on your taxes.

• 4 — Reconcile & Review on a Schedule

Consistency is your best defense against messy books. Set aside time weekly or monthly to reconcile your business accounts. Use Beancount's tools to ensure your ledger matches your bank statements and to review your company's performance.

# Check your business bank balance against your statement
bean-balance books.bean "Assets:Bank:Business"

# Generate an income statement to review profitability
bean-report books.bean income_statement -e 2025-08-31

This regular review habit satisfies IRS record-keeping requirements and keeps you informed about the financial health of your business.

Tax Considerations

  • Estimated Taxes: To avoid a painful tax bill, treat your future taxes as an ongoing business expense. Create liability accounts (Liabilities:Tax:Federal, Liabilities:Tax:State) and regularly move a set percentage of every deposit into them. When quarterly payments are due, the cash is already waiting.
  • Non‑deductible Personal Costs: Remember the IRS rule: business expenses must be both "ordinary and necessary" for your work. Your personal meals, commuting costs, and non-business subscriptions do not qualify and must be kept entirely out of your business's profit and loss statement.

Quick‑Start Checklist

  • Open business-only bank and credit accounts.
  • Build a Beancount chart of accounts with Assets:Bank:Business, Equity:Owner:Contrib, and Equity:Owner:Draw.
  • Decide on your accounting basis (cash or accrual) and note it in your Beancount options.
  • Tag any accidental personal charges on business cards as Equity:Owner:Draw immediately.
  • Reconcile weekly; back up your .bean file to a private Git remote.
  • Review your income statement, balance sheet, and cash-flow reports every month.

Bottom line: Separate money, separate ledgers. Beancount makes the wall between your business and personal finances explicit—and version-controlled—so your business stays audit-ready while your latte habit remains nobody’s business but yours. Happy bean-keeping!

Deconstructing a Beancount Ledger: A Case Study for Business Accounting

· 3 min read
Mike Thrift
Mike Thrift
Marketing Manager

In today's blog post, we will be breaking down a Beancount ledger for businesses, which will help you understand the intricacies of this plain text double-entry accounting system.

Deconstructing a Beancount Ledger: A Case Study for Business Accounting

Let's start with the code first:

2023-05-22-business-template

1970-01-01 open Assets:Bank:Mercury
1970-01-01 open Assets:Crypto

1970-01-01 open Equity:Bank:Chase

1970-01-01 open Income:Stripe
1970-01-01 open Income:Crypto:ETH

1970-01-01 open Expenses:COGS
1970-01-01 open Expenses:COGS:Contabo
1970-01-01 open Expenses:COGS:AmazonWebServices

1970-01-01 open Expenses:BusinessExpenses
1970-01-01 open Expenses:BusinessExpenses:ChatGPT

2023-05-14 * "CONTABO.COM" "Mercury Checking ••1234"
Expenses:COGS:Contabo 17.49 USD
Assets:Bank:Mercury -17.49 USD

2023-05-11 * "Amazon Web Services" "Mercury Checking ••1234"
Expenses:COGS:AmazonWebServices 14490.33 USD
Assets:Bank:Mercury -14490.33 USD

2023-03-01 * "STRIPE" "Mercury Checking ••1234"
Income:Stripe -21230.75 USD
Assets:Bank:Mercury 21230.75 USD

2023-05-18 * "customer_182734" "0x5190E84918FD67706A9DFDb337d5744dF4EE5f3f"
Assets:Crypto -19 ETH {1,856.20 USD}
Income:Crypto:ETH 19 ETH @@ 35267.8 USD

Understanding the Code

  1. Opening Accounts: The code starts by opening a series of accounts on 1970-01-01. These include a mix of asset accounts (Assets:Bank:Mercury and Assets:Crypto), an equity account (Equity:Bank:Chase), income accounts (Income:Stripe and Income:Crypto:ETH), and expense accounts (Expenses:COGS, Expenses:COGS:AmazonWebServices, Expenses:BusinessExpenses, and Expenses:BusinessExpenses:ChatGPT).

  2. Transactions: It then progresses to record a series of transactions between 2023-03-01 and 2023-05-18.

    • The transaction on 2023-05-14 represents a payment of $17.49 to CONTABO.COM from Mercury Checking ••1234. This is recorded as an expense (Expenses:COGS:Contabo) and a corresponding deduction from the Assets:Bank:Mercury account.

    • Similarly, the transaction on 2023-05-11 represents a payment of $14490.33 to Amazon Web Services from the same bank account. This is logged under Expenses:COGS:AmazonWebServices.

    • The transaction on 2023-03-01 shows income from STRIPE being deposited into Mercury Checking ••1234, totaling $21230.75. This is recorded as income (Income:Stripe) and an addition to the bank account (Assets:Bank:Mercury).

    • The last transaction on 2023-05-18 represents a crypto transaction involving 19 ETH from a customer. This is tracked under Assets:Crypto and Income:Crypto:ETH. The {1,856.20 USD} shows the price of ETH at the time of transaction, while the @@ 35267.8 USD specifies the total value of the 19 ETH transaction.

In all transactions, the principle of double-entry accounting is maintained, ensuring that the equation Assets = Liabilities + Equity always holds true.

Final Thoughts

This Beancount ledger provides a straightforward yet robust system for tracking financial transactions. As seen in the final transaction, Beancount is flexible enough to account for non-traditional assets like cryptocurrency, which is a testament to its utility in our increasingly digital financial landscape.

We hope this breakdown helps you better understand the structure and capabilities of Beancount, whether you're a seasoned accountant or a beginner trying to keep track of your personal finances. Stay tuned for our next blog post, where we'll delve further into advanced Beancount operations.

Introduction to Beancount.io

· 5 min read
Mike Thrift
Mike Thrift
Marketing Manager

Why Modern Bookkeeping Matters

Still managing your investments with spreadsheets? While spreadsheets are versatile, they can become cumbersome and error-prone as your investment portfolio grows. Enter Beancount.io – a sophisticated yet user-friendly investment tracking platform designed specifically for managing stock and cryptocurrency portfolios. Built with engineers and financial minimalists in mind, Beancount.io combines powerful features with an intuitive interface to streamline your investment tracking experience.

2019-09-07-introduction-to-beancount

Expenses

Income Statement

Balance Sheet

Double-entry Bookkeeping: The Foundation of Accuracy

Beancount.io is built on the principles of double-entry accounting – a time-tested methodology used by financial institutions worldwide. This system ensures mathematical accuracy through a simple yet powerful concept: every financial transaction must balance perfectly.

In double-entry bookkeeping, each transaction requires at least two entries – a debit (+) and a credit (-) – across different accounts. This built-in verification system makes it virtually impossible to record unbalanced transactions, ensuring your financial records remain accurate and reliable.

1970-01-01 open Income:BeancountCorp
1970-01-01 open Assets:Cash
1970-01-01 open Expenses:Food
1970-01-01 open Assets:Receivables:Alice
1970-01-01 open Assets:Receivables:Bob
1970-01-01 open Assets:Receivables:Charlie
1970-01-01 open Liabilities:CreditCard

2019-05-31 * "BeancountCorp" "Salary of May 15th to May 31st"
Income:BeancountCorp -888 USD
Assets:Cash 888 USD

2019-07-12 * "Popeyes chicken sandwiches" "dinner with Alice, Bob, and Charlie"
Expenses:Food 20 USD
Assets:Receivables:Alice 20 USD
Assets:Receivables:Bob 20 USD
Assets:Receivables:Charlie 20 USD
Liabilities:CreditCard -80 USD

As you can see in the two examples above, every transaction must fulfill the accounting equation.

Assets = Liabilities + Equity(aka Net Assets)

We used the Beancount syntax by Martin Blais and the web project Fava by Jakob Schnitzer to build this website. And it will alert you if any transaction has any legs not summing to zero.

Error Alert

Now you understand how we enforce the correctness of the ledger. But you may ask what are those "accounts"?

Understanding Accounts: The Water Bucket Analogy

Think of your financial accounts as a system of interconnected water buckets, where money flows like water between them. This analogy makes double-entry bookkeeping intuitive: when you transfer money from one account to another, it's like pouring water from one bucket to another – the total amount of water (money) in the system remains constant.

Beancount.io introduces five kinds of accounts.

  1. Income — Its amount is always negative or in debit. This is because you are making money, and then the money is debiting from "Income" account and crediting to your "Assets."
  2. Expenses — Its amount is always positive or in credit. This is because you are spending money, and the money is flowing from the "Assets" or "Liabilities" to the "Expenses."
  3. Liabilities — Its amount is positive or zero. Your credit card liabilities are a good example, which rises and falls in cycles.
  4. Assets — Its amount is positive or zero. Your cash or houses are always worth some prices.
  5. Equity — Your net assets. The system will calculate automatically for you. Equity = Assets - Liabilities and it reflects how wealthy you are.

Now you can open your customized accounts with those keywords above:

1970-01-01 open Assets:Cash
1970-01-01 open Assets:Stock:Robinhood
1970-01-01 open Assets:Crypto:Coinbase
1970-01-01 open Expenses:Transportation:Taxi
1970-01-01 open Equity:OpeningBalance

Advanced Investment Tracking with Commodities

Beancount.io excels at tracking diverse investments, from stocks to cryptocurrencies. Let's explore how it handles complex investment scenarios. For example, here's how you would record purchasing 10 Bitcoins at $100 each in 2014:

2014-08-08 * "Buy 10 Bitcoin"
Assets:Trade:Cash -1000.00 USD
Assets:Trade:Positions 10 BTC {100.00 USD}

And then three years later, you sell them (originally with costs of $100 per unit annotated with {100.00 USD}) at the price of $10,000 per unit annotated with @ 10,000.00 USD.

2017-12-12 * "Sell 2 Bitcoin"
Assets:Trade:Positions -2 BTC {100.00 USD} @ 10,000.00 USD
Assets:Trade:Cash 20,000.00 USD
Income:Trade:PnL -19,800.00 USD

Or the same transaction with @@ 20,000.00 USD means that at the price of $20,000 in total.

2017-12-12 * "Sell 2 Bitcoin"
Assets:Trade:Positions -2 BTC {100.00 USD} @@ 20,000.00 USD
Assets:Trade:Cash 20,000.00 USD
Income:Trade:PnL -19,800.00 USD

The sum of all legs of the transaction, including -2 BTC {100.00 USD}, are still, as always, zero.

The costs {100.00 USD} tag is important because you might have bought the same commodity at different costs.

100 BTC {10.00 USD, 2012-08-08}
10 BTC {100.00 USD, 2014-08-08}

If you want to simplify the process, you can set up the account at the beginning with FIFO or LIFO. FIFO stands for first in, first out, while LIFO stands for last in, first out. In the US, IRS uses FIFO to calculate your PnL and tax accordingly.

1970-01-01 open Assets:Trade:Positions "FIFO"

And then when you sell it in shorthand like -2 BTC {}, beancount will apply FIFO strategy automatically and sell the oldest commodity.

Getting Started with Beancount.io

Beancount.io is a modern cloud-based financial management platform that transforms your text-based transaction records into comprehensive financial statements, including income statements, balance sheets, and trial balances. By combining the reliability of plain text files with powerful visualization tools, Beancount.io helps you maintain precise control over your financial life while gaining valuable insights into your investment performance.

Start your financial journey with Beancount.io - Free during our promotional period!

Bookkeeping Basics with Beancount: A Plain-Text Path to Clean Books

· 7 min read
Mike Thrift
Mike Thrift
Marketing Manager

You can’t steer a business if you don’t know where the money goes. Accurate books turn guesswork into insight. (Investopedia)

Every business owner, freelancer, or startup founder eventually faces the same reality: financial chaos is a growth killer. Without a clear picture of your cash flow, you're flying blind. But what if you could manage your finances with the same precision and control you apply to your code? Enter Beancount, a powerful, open-source accounting system that runs on plain-text files.

2019-03-24-bookkeeping-basics

This guide will walk you through the fundamentals of bookkeeping and show you how to build a robust, lightweight, and transparent financial workflow using Beancount.

What Is Bookkeeping?

At its core, bookkeeping is the systematic and continuous recording of every financial transaction a business makes. It’s the daily discipline of tracking revenue, expenses, assets (what you own), and liabilities (what you owe).

In the world of Beancount, these records aren't locked away in proprietary software. They live in simple, human-readable plain-text files. This approach allows you to version-control your financial history with tools like Git, just as you would with a software project. Every entry is governed by the double-entry balancing rule, an elegant system that automatically checks your work and ensures your books are always correct. (beancount)

Why It Matters

Meticulous bookkeeping isn't just about administrative tidiness; it's a strategic advantage.

  • Tax confidence: When tax season rolls around, clean records are your best friend. The IRS requires clear documentation for income and deductions. A well-maintained ledger means you can file with confidence and dramatically shorten any potential audits. (IRS)
  • Sharper decisions: Are your prices high enough? Is a specific service contract actually profitable? Are subscription costs spiraling out of control? Financial statements like the income statement and balance sheet reveal pricing leaks, runaway costs, and cash-flow potholes, giving managers and investors the data they need to make smart choices. (Investopedia)
  • Easier funding: Lenders and investors don't make decisions based on gut feelings. Before wiring funds, they will ask for financial statements. Good books allow you to generate a balance sheet or income statement in seconds, demonstrating professionalism and financial health. (Investopedia)
  • Fraud and error alerts: Routine reconciliation of your books against bank statements is your first line of defense against mistakes. This simple habit helps you catch duplicate charges, bank errors, or fraudulent activity quickly, before they become significant problems. (IRS)

A Seven-Step Plain-Text Blueprint

Ready to get started? Here’s how to build your Beancount-powered bookkeeping system from the ground up.

1. Separate Business and Personal Accounts

This is the non-negotiable first step. Open a dedicated business checking account and, if needed, a business credit card. Commingling funds creates a nightmare for accounting and can blur the liability lines between you and your business. Clean separation is essential for accurate deductions and legal protection. (Small Business Administration)

In Beancount, you declare the existence of these accounts with an open directive:

; Opening balances for your accounts
2025-07-22 open Assets:Bank:Business USD
2025-07-22 open Assets:Bank:Personal USD

2. Pick a Bookkeeping System

Beancount uses the double-entry method, the gold standard of accounting for centuries. The principle is simple: every transaction affects at least two accounts. For every debit from one account, there must be a corresponding credit to another. The magic of this system is that the sum of all your accounts must always balance to zero. Beancount enforces this rule automatically, meaning a typo or logical error will immediately raise a flag. You literally can't have unbalanced books. (beancount)

3. Decide on an Accounting Method

You have two main choices here:

  • Cash basis: You record income when you receive the money and expenses when you pay them. It’s simpler and reflects your cash flow directly.
  • Accrual basis: You record income when you earn it (e.g., when an invoice is sent) and expenses when you incur them (e.g., when you receive a bill). This method gives a truer picture of a company's financial health and performance, especially for growing firms. (Investopedia)

Here is an example of an accrual transaction in Beancount. You book the income when the invoice is sent, moving the value into Assets:AccountsReceivable. When the client pays, you move the cash from AccountsReceivable to your bank account.

; Accrual example: invoice issued, payment later
2025-07-22 * "Design invoice #101"
Assets:AccountsReceivable 3000.00 USD
Income:Design

2025-08-15 * "Client pays invoice #101"
Assets:Bank:Business 3000.00 USD
Assets:AccountsReceivable

4. Assemble Your Tool Stack

The beauty of Beancount is its minimalist, modular nature. Your core stack includes:

  • Editor + Git: Your favorite text editor for journaling transactions and Git for version control, giving you a complete, auditable history of every change.
  • bean-report / bean-balance / Fava: Command-line tools like bean-report and the stunning web interface Fava give you instant financial statements, dashboards, and powerful filtering capabilities.
  • Importers: A rich ecosystem of community-built importers can connect to your bank feeds via CSV, Plaid, or APIs for services like Stripe and PayPal, automating much of the data entry.

5. Categorize Every Transaction

A well-organized "chart of accounts" is the backbone of insightful reporting. Define categories that make sense for your business, using hierarchical accounts for granularity. Then, as you record transactions, categorize them meticulously.

2025-07-30 * "AWS monthly bill"
Expenses:Hosting:AWS 124.50 USD
Assets:Bank:Business
tag: "ops"

In this example, the expense is clearly filed under Expenses:Hosting:AWS. The use of tag: "ops" also allows for cross-cutting reports, like viewing all operational expenses regardless of their primary category. (IRS)

6. Store Source Documents Securely

The IRS happily accepts digital copies of receipts and invoices. Scan paper receipts or forward email invoices to a dedicated folder in cloud storage (like Google Drive or Dropbox). Then, link to the file directly in your Beancount entry using metadata. This creates an airtight, self-contained record.

; Receipt image linked as metadata
2025-07-18 * "Team lunch"
Expenses:Meals 85.10 USD
Assets:Bank:Business
receipt: "receipts/2025-07-18-team-lunch.jpg"

7. Make Bookkeeping a Habit

Consistency is key. Procrastination turns bookkeeping into a stressful, time-consuming chore. Set aside a recurring time block—a weekly or monthly “Bean-day”—to import transactions, reconcile accounts, and review your financial reports. This simple routine transforms bookkeeping from a quarterly scramble into a quick, empowering business health check. (IRS)

DIY vs Professional Help

  • DIY: For freelancers or small businesses with predictable transaction volume, a DIY approach with Beancount is incredibly effective. It's still wise to have a brief, one-time consultation with a CPA to validate your chart of accounts and ensure you're on the right track.
  • Professional review: As your business scales, transactions become more complex, or compliance risk rises, bringing in a professional bookkeeper or accountant for periodic reviews is invaluable. You can continue using Beancount as your primary source of truth and simply export the reports they need.

Quick-Start Checklist

  • Open separate business bank accounts.
  • Clone the Beancount starter repository and define your accounts in accounts.bean.
  • Choose cash or accrual and stick to it.
  • Set up importers to automate data entry from your bank (CSV), Stripe, PayPal, etc.
  • Tag and write clear narrations for every transaction.
  • Reconcile your ledger against bank statements weekly or monthly.
  • Generate monthly income, balance, and cash-flow reports using Fava or bean-report.
  • Back up your .bean files regularly (Git + off-site storage).

Further Reading

Ready to start? Install Beancount, commit your first entry, and trade spreadsheet fog for plain-text clarity. Happy bean-keeping!