Turn a filing's balance sheet and income statement into a balanced Beancount ledger with the same conventions every Open Ledger company uses.
This guide walks one real PepsiCo quarter end to end. The numbers match the PepsiCo Q2 2026 earnings release. Every figure stays in millions of US dollars (MUSD).
What you get
You finish with a ledger that asserts the period-end balance sheet and records the income statement as one zero-sum transaction. bea check passes. Income-statement and balance-sheet reports match the filing's published totals. The same pattern powers every company on the Open Ledger and every post under the open-ledger tag.
Pick the unit and fiscal year
Set operating_currency to a millions unit that matches the filing. Use MUSD for US-dollar reporters. Use MEUR, MJPY, or another M<CCY> form when the filing reports in that currency.
One MUSD means USD 1,000,000. A balance of 25998 MUSD means about $26.0 billion of cash.
Put each fiscal period in its own file under a year directory. Name annual files FY2025/FY2025.bean. Name quarterly files FY2026/FY2026Q2.bean. Include them from main.bean oldest first.
Open the chart of accounts
main.bean holds options, account opens, and includes. It holds no balances and no income entries.
Open every account on 1970-01-01 in MUSD. Keep the core names identical across companies so readers can diff one ledger against another.
option "title" "PepsiCo, Inc. Financial Statements FY2021-FY2026Q2"
option "operating_currency" "MUSD"
; Currency convention:
; MUSD = Millions of USD (custom unit for readability)
; 1 MUSD = USD 1,000,000
; Example: "1000 MUSD" means USD 1,000,000,000
; All figures sourced from PepsiCo, Inc. annual reports / filings.
; Fiscal years end Dec 31 (52/53-week year; Dec 31 shown).
; ── ASSETS ──────────────────────────────────────────────────────────────────
1970-01-01 open Assets:Current:Cash MUSD
1970-01-01 open Assets:Current:ShortTermInvestments MUSD
1970-01-01 open Assets:Current:AccountsReceivable MUSD
1970-01-01 open Assets:Current:Other MUSD
1970-01-01 open Assets:NonCurrent:PropertyPlantEquipment MUSD
1970-01-01 open Assets:NonCurrent:Goodwill MUSD
1970-01-01 open Assets:NonCurrent:IntangibleAssets MUSD
1970-01-01 open Assets:NonCurrent:Other MUSD
; ── LIABILITIES ─────────────────────────────────────────────────────────────
1970-01-01 open Liabilities:Current:AccountsPayable MUSD
1970-01-01 open Liabilities:Current:ShortTermDebt MUSD
1970-01-01 open Liabilities:Current:DeferredRevenue MUSD
1970-01-01 open Liabilities:Current:Other MUSD
1970-01-01 open Liabilities:NonCurrent:LongTermDebt MUSD
1970-01-01 open Liabilities:NonCurrent:Other MUSD
; ── EQUITY ──────────────────────────────────────────────────────────────────
1970-01-01 open Equity:OpeningBalance MUSD ; FY2021 initialization
1970-01-01 open Equity:Adjustments MUSD ; year-over-year BS differences
1970-01-01 open Equity:CommonStockAndAPIC MUSD
1970-01-01 open Equity:RetainedEarnings MUSD
1970-01-01 open Equity:OtherComprehensiveIncome MUSD
; ── INCOME ──────────────────────────────────────────────────────────────────
1970-01-01 open Income:Revenue MUSD
1970-01-01 open Income:OtherNet MUSD ; net other income (interest income, etc.)
; ── EXPENSES ────────────────────────────────────────────────────────────────
1970-01-01 open Expenses:CostOfRevenue MUSD
1970-01-01 open Expenses:ResearchAndDevelopment MUSD
1970-01-01 open Expenses:SellingGeneralAdministrative MUSD
1970-01-01 open Expenses:OtherNet MUSD
1970-01-01 open Expenses:IncomeTax MUSD
include "FY2026/FY2026Q2.bean"Assets:Current:Other and the other …:Other leaves absorb residuals. Modeled line items plus that residual always reconcile to the filing's subtotal.
Assert the balance sheet with pad and balance
Pad from Equity:Adjustments on the day before period end. Assert the filing's value on the period-end date. Write one pad and balance pair per account.
Assets carry positive balances. Liabilities and equity carry negative balances. Residual lines keep a comment that names the filing subtotal they reconcile to.
2026-06-29 pad Assets:Current:Cash Equity:Adjustments
2026-06-30 balance Assets:Current:Cash 25998 MUSD
2026-06-29 pad Assets:Current:ShortTermInvestments Equity:Adjustments
2026-06-30 balance Assets:Current:ShortTermInvestments 15600 MUSD
2026-06-29 pad Assets:Current:AccountsReceivable Equity:Adjustments
2026-06-30 balance Assets:Current:AccountsReceivable 10398 MUSD
2026-06-29 pad Assets:Current:Other Equity:Adjustments
2026-06-30 balance Assets:Current:Other 15604 MUSD ; current assets residual (67600 total current)
2026-06-29 pad Liabilities:Current:AccountsPayable Equity:Adjustments
2026-06-30 balance Liabilities:Current:AccountsPayable -8318 MUSDCover the whole statement the same way: every asset and liability account, plus Equity:CommonStockAndAPIC, Equity:RetainedEarnings, and Equity:OtherComprehensiveIncome. Start each period file with a banner that names the company, the period, the unit, and the source URL.
Record the income statement as one transaction
Date the transaction on the fiscal period end. Income postings are negative. Expense postings are positive. Equity:Adjustments absorbs net income so the entry sums to zero.
Put the arithmetic check in a comment above the transaction. The check must evaluate to zero before you trust the entry.
; Check: -23000 + 10350 + 400 + 8740 + 230 + 688 + 2592 = 0 ✓
2026-06-30 * "PepsiCo, Inc." "FY2026Q2 Income Statement"
Income:Revenue -23000 MUSD
Expenses:CostOfRevenue 10350 MUSD
Expenses:ResearchAndDevelopment 400 MUSD
Expenses:SellingGeneralAdministrative 8740 MUSD
Expenses:OtherNet 230 MUSD
Expenses:IncomeTax 688 MUSD
Equity:Adjustments 2592 MUSD ; net income offsetRevenue is 23,000 MUSD. Net income is 2,592 MUSD. When other income nets positive, post it to Income:OtherNet instead of Expenses:OtherNet. Never use both in one period.
Validate and read the reports
Run a check on the root ledger:
bea --file main.bean checkA clean ledger exits 0 with no output. Prefer bea --json --no-input --file main.bean check when you want machine-readable validity and require data.valid: true.
Read the income statement for the company's fiscal window, not a calendar quarter that happens to share the label:
bea --json --no-input --file main.bean report income-statement --time '2026-04-01 - 2026-06-30'Open the same file in Fava to browse the balance sheet and income statement. Confirm three things against the filing: the ; Check: comment sums to zero, total assets equal total liabilities plus equity, and net income in the transaction equals the filing's net income.
Start from the template
Clone the shape before you invent a new chart. The live template below is a fictional Example Industries Inc. FY2025 ledger in MUSD. It uses the same account names, pad and balance pattern, and single income-statement transaction.
Download this pattern as public-company-starter.bean, then run bea --file public-company-starter.bean check. The file matches the chart, pad/balance, and income-statement fences above: Cash ends at 25998 MUSD, Accounts Payable at -8318 MUSD, Revenue at -23000 MUSD, Income Tax at 688 MUSD, and Equity:Adjustments at -56690 MUSD after the pads and the net-income offset. Replace PepsiCo's amounts with figures from your filing and keep the account names.
Browse every real company on the Open Ledger. Copy the template's structure, then replace the fictional amounts with figures from your filing.
Where to go next
- Study more live company ledgers on the Open Ledger.
- Read earnings walkthroughs under the open-ledger tag.
- Copy personal-finance patterns from Working Ledger Examples when you need a household or freelance starter instead of a 10-K.
- Review Financial Reporting Templates for income-statement and balance-sheet report shape in smaller books.