Skip to main content

Adjusting Entries in Beancount: Your Month-End Tune-Up

· 4 min read
Mike Thrift
Mike Thrift
Marketing Manager

Accounting isn’t finished when the last sale hits the bank. To get a true picture of your business's health, you need to perform a month-end tune-up. At every period close, you'll make adjusting entries—journal tweaks that correctly place revenues and expenses in the proper time window and keep your balance sheet honest.

In a plain‑text Beancount ledger, these crucial entries are transparent, version‑controlled, and easy to audit, turning a tedious task into a clear and repeatable process.

2022-01-25-adjusting-entries-in-beancount-your-month-end-tune-up


Why Adjusting Entries Matter

Making these adjustments is fundamental to sound accounting. They ensure your financial statements are accurate and reliable.

  • Accrual Accuracy: Adjusting entries are the engine of accrual accounting. They move income and costs into the period they were actually earned or incurred, regardless of when cash changed hands. This satisfies the core revenue-recognition and matching principles that form the foundation of modern accounting (AccountingCoach.com).

  • Reliable KPIs: Key performance indicators are only as good as the data behind them. Metrics like gross margin, net income, and cash-flow forecasts only tell the truth once deferrals, accruals, and estimates are properly posted (Corporate Finance Institute).

  • Clean Audit Trail: Explicit month‑end adjustments create a clear record of your financial reasoning. This helps auditors (and your future self) easily trace what changed and why, building confidence in your numbers (Accountingverse).


Six Common Categories (with Beancount Snippets)

Here are the six most common types of adjusting entries, with examples of how to record them in your Beancount ledger. Notice the use of metadata like adj:"accrual" to make these entries easy to find and analyze later.

1. Accrued Revenue

This is for revenue you've earned but haven't yet billed or received payment for.

2025-07-31 * "Consulting—July hours"
Assets:AccountsReceivable 12000.00 USD
Income:Consulting
; adj:"accrual" period:"Jul-25"

2. Accrued Expense

An expense you've incurred but haven't yet paid, like a utility bill that will arrive next month.

2025-07-31 * "Attorney—July retainer"
Expenses:Legal 2500.00 USD
Liabilities:AccruedPayables
; adj:"accrual"

3. Deferred (Unearned) Revenue

This applies when a client pays you in advance. You recognize a portion of that revenue as it's earned over time.

2025-07-31 * "Annual SaaS prepayment (recognize 1/12)"
Liabilities:UnearnedRevenue 833.33 USD
Income:SaaS
; adj:"deferral"

4. Prepaid (Deferred) Expense

When you pay for an expense upfront (like an annual insurance policy), you expense a portion of it each month.

2025-07-31 * "Insurance—1 mo. expense from prepaid"
Expenses:Insurance 400.00 USD
Assets:PrepaidInsurance
; adj:"deferral"

5. Depreciation & Amortization

This entry allocates the cost of a long-term asset (like a computer or vehicle) over its useful life.

2025-07-31 * "Mac Studio depreciation"
Expenses:Depreciation 1250.00 USD
Assets:Computers:AccumDepr
; asset_id:"MAC-03" adj:"estimate"

6. Allowance for Doubtful Accounts

An estimate of accounts receivable that you don't expect to collect, which is recorded as a bad debt expense.

2025-07-31 * "Bad-debt provision (2% of A/R)"
Expenses:BadDebt 700.00 USD
Assets:AllowanceForBadDebt
; basis:"A/R" rate:0.02 adj:"estimate"

A Repeatable Workflow

To keep your month-end close efficient and error-free, adopt a consistent workflow.

  • Use a separate file. Keep all adjustments for a period in one place, like adjustments-2025-07.bean. In your main ledger file, use an include directive to import it last. This ensures adjustments are applied just before you generate final reports.

  • Standardize your metadata. Always use consistent metadata keys and values, like adj:"accrual|deferral|estimate" and period:"Jul-25". This makes querying and reviewing specific types of adjustments a breeze.

  • Run a pre-flight check. Before committing your changes to Git, run bean-check on your adjustments file to catch any typos or unbalanced postings.

  • Perform a one-line sanity check. This query confirms that all your adjustments for the period balance out, giving you confidence that you haven't introduced errors.

    bean-query main.bean "SELECT account, SUM(number) WHERE meta('adj') AND meta('period') = 'Jul-25' GROUP BY account"

Quick Troubleshooting Tips 🤔

  • Is your Liabilities:UnearnedRevenue balance climbing? Review your contract milestones. You might be recognizing revenue too slowly compared to the work you're delivering.

  • Is your Assets:PrepaidInsurance balance negative? You're likely expensing it faster than the asset's schedule allows. Double-check your amortization schedule.

  • Is your Days Sales Outstanding (DSO) getting worse after accruals? Your accrued revenue might be masking underlying collection issues. Pair this KPI with an A/R aging report to spot late-paying clients before it becomes a cash-flow problem.


Closing Thoughts

Adjusting entries can feel tedious, but their value becomes crystal clear when you compare your "before" and "after" income statements—the difference is often material. With Beancount, these adjustments become small, searchable patches that you can automate and review just like code.

Build the month-end habit, and your numbers will stay as accurate as your engineering.

Happy balancing!