Skip to main content

73 posts tagged with "accounting"

View all tags

Accumulated Depreciation (for Beancount): A Practical, Plain‑Text Guide

· 10 min read
Mike Thrift
Mike Thrift
Marketing Manager

If you track fixed assets in your accounting—laptops, cameras, machinery, or even office furniture—your books need to reflect their declining value. This involves two key concepts: depreciation (the expense) and its running total, accumulated depreciation. This guide explains both in plain language and then shows you exactly how to model them in Beancount with copy-pasteable examples, including powerful automation options.


2025-08-23-accumulated-depreciation

What is accumulated depreciation?

Accumulated depreciation is the total amount of depreciation that has been recorded against an asset since the day it was put into service. Think of it as a running tally. It’s not a new kind of expense—it's just the to-date sum of all past depreciation charges for that asset.

In financial statements, you’ll see accumulated depreciation paired with the asset’s original price. This allows anyone reading your books to see both the historical cost (what you paid for it) and the net book value (what it's currently worth on your books).

A crucial detail is that accumulated depreciation is a contra-asset account. This might sound complex, but it's a simple idea:

  • It's an "asset" account, so it lives in the Assets section of your chart of accounts.
  • However, it carries a credit balance (a negative value in Beancount's asset accounts), which reduces the value of the related fixed asset.

Where does it appear on the balance sheet?

Accumulated depreciation typically appears on the balance sheet directly underneath the fixed asset it relates to. For example:

Equipment: Computers$3,000.00
Less: Accumulated Depreciation($1,000.00)
Equipment: Computers, Net$2,000.00

Many financial statements simplify this by showing a single line item like “Property, plant & equipment, net”. This single number represents the total historical cost of all assets minus their total accumulated depreciation, giving you the final net book value.


How do you calculate depreciation?

There are several methods for calculating depreciation. The one you choose determines how much expense you record each period, which in turn adds to the accumulated depreciation total. Two common families of methods are:

  • Straight-Line (SL): This is the simplest and most common method for bookkeeping purposes. You expense an equal amount of the asset's value in each period of its useful life. For example, a 3,000laptopwitha36month(3year)usefullifewouldbedepreciatedat3,000 laptop with a 36-month (3-year) useful life would be depreciated at 83.33 per month.
  • Tax Methods (e.g., MACRS in the U.S.): For tax purposes, governments often define specific accelerated schedules. In the U.S., the Modified Accelerated Cost Recovery System (MACRS) allows you to take larger depreciation deductions in the earlier years of an asset's life. Beancount can easily handle these schedules—you just need to calculate the amounts according to the official tables (like those in IRS Publication 946) and generate the corresponding journal entries.

Formula (Straight-Line)

Periodic Depreciation = fractextCosttextSalvageValuetextUsefulLife\\frac{\\text{Cost} - \\text{Salvage Value}}{\\text{Useful Life}}

Accumulated Depreciation (at date t) = sum(textPeriodicDepreciationuptot)\\sum (\\text{Periodic Depreciation up to } t)

Salvage value is the estimated residual value of an asset at the end of its useful life. For simplicity, it's often assumed to be zero.


The Beancount Way: Model Cost and Accumulated Depreciation

To properly track fixed assets in Beancount while preserving their original cost, you’ll use a pair of asset accounts for each category, plus an expense account.

  • Assets:Equipment:Computers:Cost (to hold the historical cost)
  • Assets:Equipment:Computers:AccumDep (the contra-asset, which will be credited over time)
  • Expenses:Depreciation:Computers (to record the periodic expense)

This structure mirrors standard accounting practice and is the recommended approach for managing fixed-asset depreciation in Beancount.


Option A: Manual Straight-Line Entries

This is the most direct method. You control every entry, which is great for understanding the mechanics.

1. Open the necessary accounts

2025-01-01 open Assets:Bank:Checking
2025-01-01 open Assets:Equipment:Computers:Cost
2025-01-01 open Assets:Equipment:Computers:AccumDep
2025-01-01 open Expenses:Depreciation:Computers

2. Record the purchase (at historical cost)

When you buy the asset, you debit the Cost account.

2025-01-20 * "Purchase MacBook Pro"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD

3. Record monthly depreciation

Each month, you'll record the depreciation expense. For a 3,000assetover36months,themonthlydepreciationis3,000 asset over 36 months, the monthly depreciation is 3000 \div 36 = 83.3383.33.

The transaction involves debiting the expense account and crediting the contra-asset account.

2025-02-28 * "Monthly depreciation - MacBook Pro (SL 36mo)"
Expenses:Depreciation:Computers 83.33 USD
Assets:Equipment:Computers:AccumDep -83.33 USD ; This is the credit to the contra-asset

You would repeat this entry every month for 36 months. The balance in Assets:Equipment:Computers:AccumDep will grow more negative over time, reducing the asset's net book value.

Quick Check: You can easily check the net book value in Fava's Balance Sheet or by running a quick query:

bean-query myledger.bean "SELECT account, SUM(position) WHERE account ~ 'Assets:Equipment:Computers:(Cost|AccumDep)' GROUP BY account"

The sum of the balances of these two accounts is your net book value.


Option B: Automate with Fava’s amortize Plugin

If you use Fava (the popular web interface for Beancount) and your depreciation is a fixed amount each month, you can automate it.

First, enable the plugin at the top of your Beancount file:

plugin "fava.plugins.amortize_over"

Next, create a single transaction that defines the entire depreciation schedule.

; 1. Record the initial purchase as usual
2025-01-20 * "Purchase MacBook Pro"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD

; 2. Set up the depreciation schedule
2025-01-20 * "Depreciation schedule - MacBook Pro"
amortize_months: 36
Expenses:Depreciation:Computers 3000.00 USD
Assets:Equipment:Computers:AccumDep -3000.00 USD

The plugin will see this transaction and automatically generate virtual postings for $83.33 each month for 36 months. These entries don't get written to your .bean file but appear in all reports. This is perfect for straight-line depreciation but won't work for irregular schedules like MACRS.


Option C: Generate Periodic Entries with a Third-Party Plugin

If you prefer to have real, non-virtual transactions written into your files but still want automation, a periodic entry generator is a great choice. One of the most popular is beancount-periodic by Dallas Lu. This plugin can be configured to create dated postings on your behalf, giving you the control of manual entries with the convenience of automation.


Viewing Results: Cost, Accumulated Depreciation, and Net Book Value

No matter which method you choose, your Balance Sheet will show both the Cost and AccumDep accounts under your Assets. The sum of these two is your net book value. This presentation—showing the gross cost less the accumulated depreciation—is exactly what accountants and financial analysts expect to see. It provides full transparency into the age and value of your assets.


Disposing of an Asset (Sell, Scrap, or Retire)

When an asset reaches the end of its life, you either sell it, scrap it, or retire it. To remove it from your books, you must:

  1. Remove its historical cost.
  2. Remove its associated accumulated depreciation.
  3. Record any cash received.
  4. Record any resulting gain or loss (the difference between cash received and the net book value).

Example: Selling an Asset for a Gain

Let's say you sell the MacBook Pro on June 15, 2027.

  • Original Cost: $3,000
  • Accumulated Depreciation at time of sale: -$2,500
  • Net Book Value: 3,0003,000 - 2,500 = $500
  • You sell it for: $800
  • Gain on Sale: 800(proceeds)800 (proceeds) - 500 (net book value) = $300

Here is the Beancount transaction to record the disposal:

2027-06-15 * "Sell MacBook Pro"
Assets:Bank:Checking 800.00 USD ; Cash received
Assets:Equipment:Computers:AccumDep 2500.00 USD ; Debit to zero out the contra-asset
Assets:Equipment:Computers:Cost -3000.00 USD ; Credit to remove the original cost
Income:Gains:AssetDisposals -300.00 USD ; Credit to record the gain

If the proceeds had been only 400(alossof400 (a loss of 100), you would post the difference to an Expenses:Losses:AssetDisposals account with a positive amount (a debit).


FAQ (Fast)

  • Is accumulated depreciation an asset or a liability? Neither. It’s a contra-asset. It's located in the assets section of your balance sheet but has a credit balance, which reduces the total asset value.

  • Do I ever post directly to the Cost account after purchase? Generally, no. The purpose of the contra-asset account is to preserve the original historical cost. All reductions in value due to depreciation should be posted to ...:AccumDep.

  • Can I use Beancount for MACRS (tax) schedules? Yes. You'll need to calculate the depreciation amounts for each period using the tables in IRS Publication 946. Then, you can record those amounts using manual entries or a periodic plugin. The Fava amortize plugin is not suitable for this, as MACRS amounts are not equal each month.

  • What about Section 179 expensing? Section 179 allows you to expense the full cost of qualifying property in the year you place it in service, instead of depreciating it over time. This is an election you make for tax purposes. In Beancount, this would simply be a debit to an expense account instead of a fixed asset account at the time of purchase.


Common Pitfalls (and How to Avoid Them)

  • Posting depreciation directly against the Cost account.
    • Fix: Always credit the ...:AccumDep contra-asset account. This preserves the historical cost, which is important for financial reporting.
  • Forgetting to remove Accumulated Depreciation on disposal.
    • Fix: When you sell or scrap an asset, your journal entry must include a debit to ...:AccumDep to clear its balance for that asset.
  • Mixing up bookkeeping and tax depreciation schedules.
    • Fix: Your internal management books often use straight-line for simplicity, while your tax filings may require MACRS. Keep these purposes separate and document your policy.
  • Expecting the Fava amortize plugin to handle non-equal schedules.
    • Fix: Remember that this plugin is designed only for equal monthly splits. For any other pattern, use manual postings or a more flexible periodic plugin.

Copy-Paste Template

Here is a complete template you can adapt for your own ledger.

option "title" "My Business Ledger"
plugin "fava.plugins.amortize_over" ; Remove if not using Fava automation

; --- Accounts ---
2025-01-01 open Assets:Bank:Checking
2025-01-01 open Assets:Equipment:Computers:Cost
2025-01-01 open Assets:Equipment:Computers:AccumDep
2025-01-01 open Expenses:Depreciation:Computers
2025-01-01 open Income:Gains:AssetDisposals
2025-01-01 open Expenses:Losses:AssetDisposals

; --- Purchase at historical cost ---
2025-01-20 * "Purchase MacBook Pro"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD

; --- Choose ONE depreciation approach ---

; (A) Manual monthly posting
2025-02-28 * "Monthly depreciation - MacBook Pro (SL 36mo)"
Expenses:Depreciation:Computers 83.33 USD
Assets:Equipment:Computers:AccumDep -83.33 USD

; (B) Fava automation (for 36 equal monthly splits)
2025-01-20 * "Depreciation schedule - MacBook Pro"
amortize_months: 36
Expenses:Depreciation:Computers 3000.00 USD
Assets:Equipment:Computers:AccumDep -3000.00 USD

; --- Sale example (edit numbers for your actual sale) ---
2027-06-15 * "Sell MacBook Pro"
Assets:Bank:Checking 800.00 USD
Assets:Equipment:Computers:AccumDep 2500.00 USD
Assets:Equipment:Computers:Cost -3000.00 USD
Income:Gains:AssetDisposals -300.00 USD

TL;DR

  • Keep asset Cost and AccumDep in separate accounts to preserve historical cost.
  • Record depreciation with a debit to Expenses:Depreciation:... and a credit to Assets:...:AccumDep.
  • Automate equal monthly depreciation with the Fava amortize plugin or generate dated entries with a periodic plugin.
  • When disposing of an asset, you must remove both its Cost and its AccumDep from the books and record the resulting gain or loss.

Sources & Further Reading

Amazon Seller Fees (2025): What They Are—and How to Book Them in Beancount

· 9 min read
Mike Thrift
Mike Thrift
Marketing Manager

Selling on Amazon is a powerful way to reach millions of customers, but the platform's fee structure can feel like a maze. If you're an operator who values clean, auditable, double-entry books, tracking these costs accurately is non-negotiable. This guide breaks down Amazon's 2025 US marketplace fees and shows you exactly how to record them using the plain-text accounting tool, Beancount.

TL;DR ⚡

2025-08-21-amazon-seller-fees-2025

  • You’ll encounter a handful of recurring Amazon charges: Selling plan, Referral, Closing (media), FBA fulfillment & storage, Inbound placement, Low‑inventory‑level, Returns processing, Refund administration, and a High‑volume listing fee for very large catalogs.
  • Keep a separate Assets:Amazon:Clearing account. Book sales and fees there; when Amazon pays out, transfer the net to your bank. This makes reconciliation a breeze.
  • Track each SKU as its own commodity (e.g., SKU:WATER-BOTTLE) so Beancount can compute your Cost of Goods Sold (COGS) by lot automatically.
  • You can reconcile quickly by importing settlement or date-range reports and mapping Amazon’s “transaction types” directly to your Beancount expense accounts.

The Amazon Fee Map (US Marketplace)

Here’s a breakdown of the most common fees you'll see in 2025.

Selling Plan Fee

This is your basic subscription fee for accessing the marketplace.

  • Individual Plan: No monthly fee. Instead, you pay $0.99 for each item you sell.
  • Professional Plan: A flat $39.99 per month, which waives the per-item charge. This is the standard choice for any serious seller. All other selling fees apply on top of this.

Referral Fee

This is Amazon's commission for each sale.

It's a percentage of the item’s total sales price (including shipping and any gift wrapping). The rate depends entirely on the product category. Most categories fall in the 8–15% band, but some use tiered rates (e.g., 15% on the first $500 and 8% on the portion above that). Certain categories also have a minimum referral fee, often $0.30. Always check the current rate card for your specific category.

Closing Fee (Media Categories)

If you sell media items like Books, Music, Video, or DVDs, Amazon charges an additional flat $1.80 per-item closing fee.

FBA Fulfillment Fees

These are the per-unit pick, pack, and ship fees for using Fulfillment by Amazon (FBA). The cost varies based on the item's size and weight. Amazon updates these rate cards periodically. For 2025, non-peak rates reverted to 2024 non-peak levels on January 15, 2025. Always consult the current FBA rate card to find your product's exact size tier and associated fee.

Monthly Storage & Aged-Inventory Surcharge (FBA)

Amazon charges for the space your inventory occupies in their fulfillment centers.

  • Monthly Storage: Billed by the cubic foot.
  • Aged-Inventory Surcharge: An additional monthly fee assessed on inventory that has been sitting in a fulfillment center for too long. This stacks on top of the regular monthly storage fee.

Inbound Placement Service Fee (FBA)

This is a per-unit fee tied to how you send inventory to Amazon. It's designed to cover the costs of Amazon distributing your products across its fulfillment network. Certain programs, like "New Selection," may temporarily exempt new products up to set limits.

Low-Inventory-Level Fee (FBA)

This fee applies to standard-size products with consistently low inventory levels relative to customer demand. Amazon measures this with a metric called "historical days of supply." If your stock level for a popular item drops below the threshold (generally 28 days), this fee kicks in.

Returns Processing Fee (FBA)

For products in categories with higher-than-typical return rates (like apparel and shoes), Amazon can charge a returns processing fee on each customer return. Some "New Selection" units are waived from this fee up to a certain cap.

Refund Administration Fee

When you issue a customer a refund for an order, Amazon gives you back the referral fee you paid. However, they keep a portion of it as a processing fee. This is the lesser of $5.00 or 20% of the referral fee for that item.

High-Volume Listing Fee (Huge Catalogs)

This fee only affects sellers with massive catalogs. If you have more than 1.5 million active SKUs, Amazon charges a monthly fee of $0.001 per eligible SKU above that threshold.

Note: Rates and policies can differ by country, region, and category. Always review your local Seller Central help pages before booking.


How These Fees Show Up in Your Reports 🧾

You can find all this data in Seller Central. The two most useful reports for accounting are:

  1. Date Range Reports (Payments → Date Range Reports): These provide a summary of your income, expenses, taxes, and net transfers for a specific period. They are perfect for high-level ledger import and reconciliation.
  2. Settlement Files (e.g., Flat File V2): These files break down every single transaction, showing the fee type, order ID, amount, and date. This is the granular data you'll use to map everything correctly.

A Beancount-First Way to Record Amazon Activity

Here’s how to translate Amazon's complex world into clean, simple Beancount entries.

1. Set Up a Minimal Chart of Accounts

First, define the accounts you'll need. This simple structure covers everything.

; --- ASSETS ---
Assets:Amazon:Clearing ; Your Amazon "wallet"
Assets:Bank:Checking ; Where payouts land
Assets:Inventory:SKU:<code> ; One sub-account per SKU

; --- INCOME & COGS ---
Income:Sales:Amazon
Expenses:COGS:Inventory

; --- EXPENSES ---
Expenses:Marketplace:Amazon:Referral
Expenses:Marketplace:Amazon:FBAFulfillment
Expenses:Marketplace:Amazon:Storage:Monthly
Expenses:Marketplace:Amazon:Storage:Aged
Expenses:Marketplace:Amazon:InboundPlacement
Expenses:Marketplace:Amazon:LowInventoryLevel
Expenses:Marketplace:Amazon:ReturnsProcessing
Expenses:Marketplace:Amazon:Other ; For misc. fees

Beancount’s ability to track inventory lots and cost basis is a superpower. You'll "buy" inventory into Assets:Inventory:SKU:... with a cost {...}. When you sell, Beancount automatically calculates the Cost of Goods Sold.

2. Book Each Sale and Its Fees

Let's record a $30 FBA sale for SKU:WATER-BOTTLE. The referral fee is $4.50, FBA fulfillment is $4.24, and you incurred a $0.15 low-inventory fee. You originally purchased this unit for $5.00.

2025-02-10 * "Amazon Order 113-2233445-6677889" "WATER-BOTTLE"
Assets:Amazon:Clearing 21.11 USD
Income:Sales:Amazon -30.00 USD
Expenses:Marketplace:Amazon:Referral 4.50 USD
Expenses:Marketplace:Amazon:FBAFulfillment 4.24 USD
Expenses:Marketplace:Amazon:LowInventoryLevel 0.15 USD
Assets:Inventory:SKU:WATER-BOTTLE -1 SKU:WATER-BOTTLE {5.00 USD}
Expenses:COGS:Inventory 5.00 USD

Why it balances: The $30 sale is credited to Income. The fees ($4.50 + $4.24 + $0.15) and the COGS ($5.00) are debited to your expense accounts. The net cash from the sale, $21.11, is debited to your Assets:Amazon:Clearing account. The inventory asset is credited (reduced by one unit), and the corresponding cost is expensed.

3. Record the Payout

When Amazon disburses your funds, the transaction is simple. You're just moving money from your Amazon "wallet" to your actual bank account.

2025-02-15 * "Amazon Payments" "Settlement disbursement"
Assets:Bank:Checking 2,500.00 USD
Assets:Amazon:Clearing -2,500.00 USD

After each payout, your Assets:Amazon:Clearing account balance should trend back toward zero. Use your date-range report totals to spot any discrepancies.

4. Handle Storage, Aged Inventory, and Inbound Placement

These fees often appear as separate lines in your settlement reports. Book them as direct debits to your clearing account.

2025-03-15 * "Amazon FBA Storage Fees" "Monthly + aged inventory"
Expenses:Marketplace:Amazon:Storage:Monthly 125.40 USD
Expenses:Marketplace:Amazon:Storage:Aged 35.20 USD
Assets:Amazon:Clearing -160.60 USD

2025-03-20 * "FBA Inbound Placement Service" "Shipment split optimization"
Expenses:Marketplace:Amazon:InboundPlacement 62.00 USD
Assets:Amazon:Clearing -62.00 USD

5. Refunds & Returns

When a customer returns a product, you reverse the sale and the COGS, and account for any non-refundable fees. For this $30 sale, let's say Amazon keeps a $0.30 refund administration fee.

2025-03-02 * "Refund 113-2233445-6677889" "Refunded WATER-BOTTLE"
Assets:Amazon:Clearing -29.70 USD ; Net debit
Income:Sales:Amazon 30.00 USD ; Reverse the sale
Expenses:Marketplace:Amazon:Other 0.30 USD ; The refund admin fee
Assets:Inventory:SKU:WATER-BOTTLE 1 SKU:WATER-BOTTLE {5.00 USD}
Expenses:COGS:Inventory -5.00 USD ; Reverse the COGS

Here, you debit Income to reverse the revenue, and credit Expenses:COGS to reverse the cost. The inventory unit is added back to your asset account. The net effect on your Assets:Amazon:Clearing is the amount refunded to the customer.


Importing & Reconciling Quickly

The key to efficiency is mapping. Export a Date Range Report or a Flat File V2 settlement report from Seller Central. Then, create a simple mapping from Amazon's transaction-type column to your expense accounts:

  • OrderIncome:Sales:Amazon
  • CommissionExpenses:Marketplace:Amazon:Referral
  • FBA-fulfillment-feeExpenses:Marketplace:Amazon:FBAFulfillment
  • StorageFeeExpenses:Marketplace:Amazon:Storage:Monthly
  • AgedInventorySurchargeExpenses:Marketplace:Amazon:Storage:Aged
  • InboundPlacementFeeExpenses:Marketplace:Amazon:InboundPlacement
  • LowInventoryLevelFeeExpenses:Marketplace:Amazon:LowInventoryLevel

For those looking to automate, Beancount’s import ecosystem (like beancount-import) is fantastic. You define the rules once, and your settlement files can be ingested into your ledger automatically.


Practical Guardrails That Save Money (and Keystrokes) 💰

  • Avoid the Low-Inventory Fee: Watch your historical days of supply. Keep enough buffer stock to meet demand, but don't overdo it and trigger aged-inventory surcharges.
  • Use New Selection Benefits: When launching new products, enroll them in the New Selection program to get temporary waivers on returns processing and inbound placement fees.
  • Check Referral Rates Before Pricing: A small price change could push you over a fee threshold, significantly impacting your net margin. Confirm your category's referral rates and minimums.
  • Reconcile Monthly: Pull a Date Range Report every month. This simple habit helps you catch any fee changes from Amazon early and ensures your ledger remains trustworthy.

Ready-to-Use Beancount Template

To help you get started, I've prepared a starter ledger file. It includes:

  • A sensible Amazon chart of accounts.
  • Inventory configured as commodities for automatic, lot-based COGS.
  • Example entries for sales, fees, storage, refunds, and payouts.

➡️ Download the Template (Open the file in your editor, replace the sample SKU and amounts, and start importing settlement lines.)


References & Further Reading


One Last Tip

If you sell internationally, create marketplace-specific sub-accounts (e.g., Expenses:Marketplace:Amazon:Referral:US, ...:Referral:CA). Set your main operating_currency in Beancount to your home currency. Once your data is structured, Beancount's query language makes it trivial to analyze your fee mix by marketplace, category, or SKU.

Happy booking!

What is Accounts Payable? A Beancount-Friendly Guide for Tracking Vendor Bills in Plain Text

· 8 min read
Mike Thrift
Mike Thrift
Marketing Manager

Accounts payable (AP) is the money your business owes to its suppliers for goods or services you’ve already received but haven't paid for yet. In the world of accounting, AP is classified as a current liability on your balance sheet—an amount typically due within the next year, and often within 30 to 60 days.

This concept is central to accrual accounting, where you record the expense and the corresponding liability the moment a bill arrives, not when you actually send the cash. This guide will show you how to manage the entire AP workflow cleanly and efficiently using the plain-text accounting tool, Beancount.

2025-08-20-what-is-accounts-payable


Quick Summary

Before we dive into the details, let's cover the essentials:

  • Accounts Payable (AP) represents your short-term debts to vendors. You'll find it under the Liabilities section of your balance sheet.
  • Accrual vs. Cash: AP is a concept that exists only if you keep your books on an accrual basis. Beancount fully supports accrual workflows, and its web interface, Fava, will display your liabilities correctly.
  • AP vs. AR: It's simple: Payables are what you owe, while Receivables (AR) are what others owe you.

Where AP Lives in Beancount (and Fava)

To start tracking AP, you first need to declare an account for it in your ledger. A standard convention is:

Liabilities:AccountsPayable

You can optionally create subaccounts for major vendors (e.g., Liabilities:AccountsPayable:ForestPaintSupply).

In Fava, this account will appear on your Balance Sheet under Liabilities. You can click on it to drill down and see a list of all open and paid items, giving you a clear view of your obligations. You can even see this in action in Fava's public example ledger, which includes a Liabilities:AccountsPayable account.


Beancount Building Blocks You’ll Use

A robust AP workflow in Beancount relies on a few core features:

  1. Accounts: You'll primarily use your Liabilities:AccountsPayable account, a cash account like Assets:Bank:Checking, and your various expense accounts (e.g., Expenses:Supplies).
  2. Metadata: You can attach key-value data to any transaction. For AP, you'll use metadata like invoice:, due:, terms:, and document:. Fava even recognizes the document: key and will automatically create a clickable link to the attached file if you configure a documents folder.
  3. Tags & Links: Use #tags (like #ap) for easy filtering and ^links (like ^INV-10455) to programmatically tie a bill and its subsequent payment together. This creates a clear, auditable trail.
  4. Queries (BQL): Beancount's SQL-like query language (BQL) allows you to run powerful reports, like listing all open payables sorted by due date, directly from the command line with bean-query or on Fava's "Query" page.

Core AP Workflow in Beancount

Managing AP in your ledger involves two or three key steps: recording the bill, paying it, and sometimes handling partial payments or discounts.

1) Record the Vendor Bill (This Creates the Liability)

First, you book the expense and create the payable when the invoice arrives.

; Optionally set your documents folder in your main Beancount file:
option "documents" "documents"

2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
terms: "2/10, n/30"
document: "invoices/2025-08-05-forest-paint-INV-10455.pdf"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD

This single entry accomplishes two critical things:

  1. It immediately recognizes the $500 expense in the correct period (August).
  2. It creates a corresponding $500 liability, showing that you owe money to Forest Paint Supply.

The ^INV-10455 link is a unique identifier that lets you attach the same link to the payment later, keeping the bill and payment transactions logically connected.

2) Pay the Bill (This Clears the Liability)

When you pay the invoice, you create a transaction that moves money from your bank account to clear the liability.

a) Standard Payment (No Discount):

2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USD

This entry reduces your AP balance by $500 and your checking account balance by the same amount. The liability is now cleared.

b) Early-Payment Discount (e.g., "2/10, n/30"):

If the terms are "2/10, n/30", you can take a 2% discount if you pay within 10 days. For our 500invoice,thatsa500 invoice, that's a 10 discount. Here are two acceptable ways to record it—just pick one method and be consistent.

; Option 1: Record the discount as other income (a contra-expense effect)
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -490.00 USD
Income:Discounts:Payables -10.00 USD

; Option 2: Reduce the original expense directly
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -490.00 USD
Expenses:Supplies:Paint -10.00 USD

In both cases, you clear the full 500liability,reduceyourbankbalancebythe500 liability, reduce your bank balance by the 490 you actually paid, and account for the $10 benefit.

3) Handling Partial Payments

Beancount's linking feature makes tracking partial payments simple and clean.

; Invoice for $1,200
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Expenses:Parts 1200.00 USD
Liabilities:AccountsPayable -1200.00 USD

; First payment of $400
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
Liabilities:AccountsPayable 400.00 USD
Assets:Bank:Checking -400.00 USD

; Final payment of $800
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
Liabilities:AccountsPayable 800.00 USD
Assets:Bank:Checking -800.00 USD

By using the ^INV-9001 link on all three transactions, you can easily filter your journal to see the complete history of this specific bill and its associated payments.


Helpful Queries (BQL)

You can run these queries in Fava’s “Query” tab or from the command line with bean-query.

Tip: The any_meta() function is incredibly useful for pulling metadata fields like invoice: and document: into your query results.

Open AP by Vendor (Balance View):

This query sums up the current outstanding balance you owe to each supplier.

SELECT payee, COST(SUM(position)) AS amount
WHERE account ~ "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;

Open AP by Invoice + Due Date:

Get a tidy list of every open bill, sorted by its due date, to help you prioritize payments.

SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
COST(SUM(position)) AS amount
WHERE account ~ "^Liabilities:AccountsPayable"
GROUP BY payee, invoice, due
ORDER BY due, payee;

List Bills with Attached PDFs:

This query finds all your bills and shows the path to the linked document.

SELECT date, payee, any_meta('invoice') AS invoice, any_meta('document') AS file
WHERE account ~ "^Liabilities:AccountsPayable"
ORDER BY date DESC;

Where to See AP in Fava

  • Balance Sheet: Navigate to Balance SheetLiabilitiesAccountsPayable to see the total balance and drill down into the transaction details.
  • Journal: Filter the journal by account:Liabilities:AccountsPayable or a specific link like ^INV-xxxx to see a bill's complete lifecycle.
  • Documents Sidebar: If you use the document: metadata and set the option "documents" directive, you'll see a list of linked documents in the sidebar.

AP Aging, Turnover, and Cash-Flow Awareness

  • Aging Schedule: This report groups your open invoices by how long they’ve been outstanding (e.g., 1–30 days, 31–60 days, 60+ days). In Beancount, the most practical approach is to run the "Open AP by Invoice + Due Date" query above, export the results as a CSV, and bucket them in a spreadsheet or a small Python script.
  • AP Turnover Ratio: This is a quick health check on how fast you pay your vendors. The formula is Total Supplier Purchases ÷ Average AP. A related metric, Days Payable Outstanding (DPO), is roughly 365 ÷ Turnover Ratio.
  • If You Can’t Pay on Time: AP is meant for short-term debt. If a vendor agrees to formal, longer-term repayment, you should reclassify the debt out of AP and into a note payable.
2025-10-01 * "Helix Industries" "Convert overdue AP to 12-month note" ^INV-1110
Liabilities:AccountsPayable 2000.00 USD
Liabilities:NotesPayable -2000.00 USD

Best Practices for AP in a Plain-Text Ledger

  • Go Paperless: Store invoice PDFs in your documents folder and link them with the document: metadata key.
  • Use Links Consistently: Put the unique invoice number in a ^link on both the bill and all associated payment entries.
  • Keep Metadata Tidy: Consistently using invoice:, due:, and terms: improves search, queries, and financial reviews.
  • Accrual All the Way: If you want useful AP reporting, commit to keeping your books on an accrual basis. Beancount and Fava handle this beautifully.

Copy-Paste Starter: Vendor Bill + Payment

; ---- Bill ----
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
document: "invoices/2025-08-05-forest-paint-INV-10455.pdf"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD

; ---- Payment (no discount) ----
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USD

This guide is for educational purposes and does not constitute tax, legal, or financial advice.

References & Further Reading:

Accounting Outsourcing: How to Hand Off Your Financial Tasks (for Beancount Users)

· 12 min read
Mike Thrift
Mike Thrift
Marketing Manager

If your ledger lives in plain text, you already value clarity, control, and reproducibility. Outsourcing your accounting doesn’t have to compromise any of that. On the contrary, when done right, it transforms your Beancount setup into a reliable, documented workflow run by specialists—while you retain full ownership of the data, the repository, and the rules.

This is a practical guide for Beancount users on what to outsource, what to keep in-house, how to structure deliverables, and how to evaluate providers. It’s about delegating the mechanical work without ever giving up control.

2025-08-19-accounting-outsourcing-how-to-hand-off-your-financial-tasks


Who This Is For

This guide is for you if you fit one of these profiles:

  • Solo founders, indie hackers, and consultants who use Beancount and want to reclaim time spent on the mechanical parts of accounting to focus on building your product or serving clients.
  • Finance-savvy engineers who demand tight controls, versioned history, and full auditability but don't want to spend their weekends importing bank statements and reconciling accounts themselves.
  • Organizations migrating from an all-in-one vendor who are now prioritizing data custody and reproducibility. Recent, abrupt shutdowns of accounting platforms like Bench have underscored a critical lesson: exit plans and open formats are not optional. (TechCrunch, KSV Advisory Report)

Beancount, Briefly

For the uninitiated, the Beancount ecosystem is built on a few core components that make it powerful for this kind of workflow:

  • Beancount: At its heart, it's a double-entry accounting language specified in plain text. You write human-readable ledger files, commit them to a Git repository, and use a compiler to validate them and generate financial reports. (GitHub)
  • Fava: This is the elegant web interface for Beancount. Fava reads your ledger file and gives you interactive balance sheets, income statements, trends, filters, and a powerful SQL-like query language to inspect your data. (Fava Demo)
  • beangulp: The modern framework for automating data ingestion. Evolved from Beancount's original importer, beangulp provides the tools to write robust importers that can parse CSV, OFX, QFX, and even PDF statements, turning raw bank data into structured Beancount entries. (GitHub)

A successful outsourcing relationship should preserve and enhance these strengths: version control, a human-readable history, strict validation, and the composability of your tools.


What to Outsource vs. What to Keep

The key to effective delegation is a clear division of labor. Here’s how to draw the line between tactical execution and strategic ownership.

Great Candidates to Outsource

These tasks are typically repetitive, rule-based, and time-consuming—perfect for a specialist.

  • Statement Collection & Importing: Downloading monthly statements, normalizing various file formats (CSV, OFX, PDF), and running your beangulp importers. This includes maintaining the importer rules as financial institutions inevitably change their statement formats.
  • Categorization Assistance: Building heuristics and declarative rules to categorize transactions. They can optionally use tools like smart_importer to predict postings based on historical data, but the final review always remains with a human.
  • Reconciliation & Integrity Checks: The meticulous work of posting balance assertions to match your statements, investigating discrepancies, and ensuring the ledger remains error-free.
  • Attachments & Document Hygiene: Fetching invoices and receipts, linking them to transactions with metadata, and archiving the source documents in a tidy, reproducible directory tree.
  • Month-End Close & Reporting: Preparing the standard suite of reports (P&L, Balance Sheet, Statement of Cash Flows) and providing Fava views or exports for your management updates.
  • AR/AP Ops & Payroll Prep: Preparing bills for payment, generating invoices, chasing collections, and staging payroll files for your final review and approval.
  • Tax Package Prep: At the end of the year, producing a clean trial balance, supporting schedules, and all the necessary files for your CPA or tax advisor.

Keep In-House (You Own the Intent and Risk)

These responsibilities are strategic and define the financial backbone of your business. They belong to you.

  • Chart of Accounts Design: The structure and naming conventions of your accounts reflect how you think about your business. This is your financial map.
  • Core Accounting Policies: Decisions on entity structure, revenue recognition, and capitalization policies have long-term financial and legal implications.
  • Final Approvals: You must retain the final say on all cash movements, including payments, payroll runs, and significant journal entries.
  • Strategic Finance: Forecasting, budgeting, and defining what "good" looks like for your business are fundamental owner responsibilities.

The Beancount-Native Outsourcing Workflow

Here’s what a structured, Git-based collaboration looks like in practice.

1) Repository Layout (Example)

Your repository is the single source of truth. A well-organized structure makes the process transparent and maintainable.

/ledger
main.beancount # Main ledger file, includes others
accounts/ # Chart of Accounts definition
includes/ # Monthly or yearly transaction files
prices/ # Price directives for commodities/stocks
metadata/ # Custom metadata declarations
plugins/ # Custom Beancount plugins
documents/ # Bank statements, receipts, invoices
/importers # beangulp importers + rules
config.yaml
bank_x.py
card_y.py
/scripts
import.sh # Orchestration script for importers
close_month.py # Month-end validation and reporting script
/reports
monthly/
year_end/
/ops
runbook.md # How to run the system
checklist.md # Procedural checklists (e.g., month-end)
controls.md # Documentation of financial controls

2) The Weekly Cycle

Routine work should follow a predictable rhythm, culminating in a clear deliverable for your review.

  1. Ingest: Your provider pulls statements and runs the beangulp importers to stage new transactions.
  2. Categorize: They apply categorization rules and, if used, smart_importer suggestions. This is followed by a human review to correct any ambiguities.
  3. Reconcile: They add balance assertions to match statement totals and investigate any differences. The use of pad directives should be rare and always require a clear explanation.
  4. Document: Relevant documents (receipts, invoices) are attached to transactions.
  5. Commit & Propose: The changes are committed with descriptive messages and a pull request is opened for your review, allowing you to see the exact diff of what changed in your books.

3) The Month-End Close (Minimum Viable)

Closing the books is a critical checkpoint to ensure accuracy and produce reliable reports.

  • Update price directives for any foreign currency or market-based securities.
  • Review outstanding items: accounts receivable, accounts payable, accruals, prepaid expenses, and loans.
  • Validate that all balance assertions pass and there are no other failing checks.
  • Tag the commit with the closing period (e.g., 2025-08-close) and export the standard reports.
  • Publish a Fava snapshot or provide a secure URL for the period.

4) The Year-End Package

The culmination of the year's work is a tidy, auditable package for your tax preparer. This includes a final trial balance, supporting schedules for key accounts (like fixed assets or inventory), and a reproducible script to regenerate every artifact directly from the Git repository.


Security & Access (Non-Negotiables)

A professional workflow prioritizes security and your ownership of the data.

  • Data Custody First: You own the private Git repository. Your provider should work from a fork and submit pull requests. They should never host the only copy of your ledger.
  • Bank Access: Provide read-only access whenever possible. If you must use an aggregator service, create isolated credentials and have a clear process for revoking them.
  • Secrets & Encryption: Use tools like GPG or age to encrypt sensitive documents at rest. Enforce multi-factor authentication on all services. Operate on the principle of least privilege.
  • Fava Access: You should self-host Fava or run it locally (fava ledger.beancount) and share access for review sessions via a secure tunnel or VPN. Avoid exposing it directly to the public internet.
  • Exit Plan: Insist on a "pull the cord" playbook. This should include escrow or guaranteed handoff of all scripts, configurations, and documentation. As recent events show, vendors can disappear overnight; your financial records must not be stranded with them.

What “Good” Deliverables Look Like (Every Month)

At the end of each month, you should receive two things: a technical artifact and a business summary.

1. A Clean Pull Request Containing:

  • All imported and reviewed transactions for the period.
  • A diff of any new or modified importer rules.
  • Commit messages that summarize key assumptions or manual adjustments.
  • A 100% green status on all balance assertions, with a log showing each account has been reconciled.
  • Links in the Beancount file to all attached documents, plus a report of any missing documents.
  • Updated price directives for investments or foreign currencies.

2. A Management Pack Containing:

  • Standard reports: P&L, Balance Sheet, and Statement of Cash Flows.
  • Key metrics like cash runway and budget vs. actual variance highlights.
  • Direct links to pre-filtered Fava views for deeper, interactive analysis.

Provider Types (And When They Fit)

Not all providers are the same. Match the provider to your stage and complexity.

  • Beancount-Savvy Bookkeeper: Perfect for handling the core workflow: steady importing, categorization, reconciliations, and preparing month-end report packs.
  • Boutique Accounting Firm: A good fit if you need additional services like managing AR/AP, payroll coordination, multi-entity consolidation, or tax preparation support.
  • Fractional Controller/CFO: The right choice when you need strategic oversight. They help design accounting policies, build financial forecasts, prepare board-ready reporting, and design internal controls.

Engagements are typically structured with a monthly retainer for routine work and an hourly rate for ad-hoc projects.


Interview Questions for Beancount Outsourcing

When vetting a potential provider, ask specific, technical questions to gauge their expertise.

  • Which beangulp importers have you personally built or maintained? Can you show me anonymized examples?
  • Will you deliver reproducible scripts and a runbook, or just the final output files?
  • How do you enforce data integrity in your process? (Look for answers involving balance assertions, review checklists, and maybe even CI/CD linting).
  • Do you use smart_importer? If so, what is your process for reviewing and overriding its predictions?
  • How do you propose we structure the Git workflow (e.g., branching strategy, PR templates, commit message conventions)?
  • What is your exit plan? What does the data handback process look like to ensure there is zero lock-in?
  • How do you run Fava in a secure way for client review sessions?

A Simple Statement of Work (SoW) You Can Copy-Paste

Use this as a starting point for your engagement agreement.

Scope of Work

- Weekly transaction imports via beangulp; includes rules maintenance for all connected financial institutions.
- Human-reviewed transaction categorization. Use of smart_importer for suggestions is permitted, but entries will not be auto-committed without review.
- Weekly reconciliations against statements, enforced with `balance` assertions. Variance notes will be provided for any unreconciled differences greater than $X.
- Document collection for all significant transactions; attachment hygiene and a monthly missing-documents report.
- Month-end close process, including price updates, accruals checklist, and delivery of Fava report links.
- Year-end package preparation, including a trial balance and supporting schedules for CPA review.

Deliverables

- A monthly pull request tagged "<YYYY-MM>-close" with all checks passing.
- Updates to the `/ops` folder, including diffs for `runbook.md` and `controls.md`.
- Final reports archived in `/reports/monthly` with a summary changelog.

Access & Security

- All work will be performed in the client-owned private Git repository. Vendor access is granted via a dedicated user, and all changes will be submitted via pull requests.
- Credentials will be scoped to read-only access where possible. Multi-factor authentication is required on all shared services.
- Sensitive documents will be stored using client-provided encryption keys and will be purged from vendor systems upon termination.

SLA & Cadence

- A weekly PR with reconciled transactions will be submitted every <Day of Week>.
- The month-end closing PR will be submitted by business day <N> of the following month.
- Standard response time for inquiries is <X> business hours; critical issue response is <Y> hours.

Exit Clause

- Upon termination, the vendor will hand back the complete repository, all scripts, documentation, and a map of all credentials used within <Z> business days. A 2-hour turnover call is included.

Tips That Save Hours (And Future Pain)

  • Name accounts for reconciliation. Structure your account names to include the institution and the last four digits of the account number (e.g., Assets:Bank:Chase:Checking:1234). This makes debugging trivial.
  • Assert balances at statement boundaries. Treat each bank statement as a verifiable checkpoint. A balance directive at the end of each statement period ensures errors are caught early and contained.
  • Automate price updates. Use Beancount's tools to fetch market prices automatically and record them with price directives. This is essential for accurate investment and foreign exchange reporting.
  • Keep rules declarative. Favor writing small, testable beangulp importers over building complex, ad-hoc scripts. Declarative rules are easier to maintain and debug.
  • Review with Fava, approve in Git. Use Fava's powerful interface to explore the changes and understand their impact. But the final approval happens by reviewing the diff in a Git pull request. Never let your books become a "black box."

Frequently Used Tools in This Stack

  • Beancount: Core engine and language documentation. (Docs)
  • beangulp: The standard for building importers. (GitHub)
  • smart_importer: Machine learning-aided predictions for categorization. (GitHub)
  • Fava: The indispensable web interface for visualizing your ledger. (Website)

The Bottom Line

Outsourcing for Beancount users isn’t about “giving up control.” It is the opposite. It’s about codifying your financial processes so that a specialist can execute them reliably on your behalf. You keep the repository, the scripts, the assertions, and the fundamental ability to regenerate any report from scratch. You delegate the work, not the ownership.

Accounting Solutions: The Top 7 Ways to Get Your Accounting Done

· 8 min read
Mike Thrift
Mike Thrift
Marketing Manager

Whether you’re running a side hustle from your laptop or scaling a fast-growing startup, you have a few reliable paths to keeping clean, accurate books. But which one is right for you? The best solution depends on your budget, your technical comfort, and how much control you want over your financial data.

Here’s a clear-eyed guide to the seven most common accounting options—what they’re good at, where they struggle, and when a modern solution like Beancount.io is the perfect fit.

2025-08-16-accounting-solutions-the-top-7-ways-to-get-your-accounting-done


1) Excel

This is often the first stop on the accounting journey for its sheer simplicity and universal availability.

  • Good for: Builders and DIY founders who love total control and already know their way around a spreadsheet.
  • Pros: The barrier to entry is practically zero, and thousands of free templates are available online. Its flexibility allows you to build custom financial models and track unique workflows that off-the-shelf software can't handle.
  • Cons: The biggest drawback is the immense manual workload. Every transaction must be entered and reconciled by hand, which is a massive time sink. Worse, it’s dangerously easy to introduce silent formula errors or typos with no guardrails to catch them. Collaboration and maintaining a clear audit trail are clunky without rigorous discipline.
  • Best if… you want a quick, no-frills start for a very simple business and you are exceptionally meticulous.

2) Google Sheets

The cloud-native cousin of Excel, Google Sheets offers the same core functionality with a collaborative twist.

  • Good for: Teams that need simple, shared spreadsheets for tracking income and expenses.
  • Pros: Built-in cloud backups and dead-simple sharing are the main advantages. You can work from any device with a web browser, making it accessible for teams on the go.
  • Cons: It suffers from the same fundamental flaws as Excel: a heavy manual workload and a high risk of user error. You may also run into compatibility quirks with certain templates and add-ons designed for the Microsoft ecosystem.
  • Best if… your team already runs on Google Workspace and you’re willing to accept the trade-offs of a manual system.

3) QuickBooks Online

For decades, QuickBooks has been the default choice for small businesses looking for dedicated accounting software.

  • Good for: Small businesses that want a "classic" SMB software experience with a large ecosystem of integrations.
  • Pros: Its signature feature is bank feeds, which automatically pull in transactions from your bank and credit card accounts, drastically reducing manual data entry. It provides a wide range of financial reports out of the box and is supported by a massive community of accountants and app developers.
  • Cons: While transactions are imported automatically, the system still requires your weekly attention to categorize expenses and reconcile accounts correctly. The interface can have a steep learning curve, and the cost can grow with add-on features. Most importantly, it creates vendor lock-in, making it difficult to export your financial history if you ever decide to leave.
  • Notes & Sources: As QuickBooks promotes, automated bank feeds are a core feature, but you’ll still be responsible for the review and categorization needed to keep your books accurate.

4) Xero

A popular, modern alternative to QuickBooks, Xero offers similar capabilities with a focus on clean design and user experience.

  • Good for: Business owners who prefer a more modern UI but need the same core capabilities as QuickBooks Online.
  • Pros: Xero also has robust bank feeds and powerful reconciliation tools that make matching transactions straightforward. Its clean design is often praised by users, and a large number of accountants are fluent in the platform.
  • Cons: The lower-priced tiers can have feature gaps (like limits on invoices or bills) that push you toward more expensive plans, and add-ons increase the total cost. And just like QBO, it faces the same "you still do the work" reality when it comes to the final categorization and review.
  • Notes & Sources: According to Xero, its automated bank feeds connect to thousands of financial institutions worldwide to power its core reconciliation workflows.

5) Accountants (CPAs)

Certified Public Accountants are highly trained financial experts who provide strategic advice, tax planning, and compliance services.

  • Good for: Tax strategy, navigating complex financial situations, handling audits, and getting one-off advisory.
  • Pros: A good CPA provides expert guidance on critical decisions like entity structure, tax optimization, and complex accounting treatments. Their oversight significantly reduces your risk on high-stakes financial matters.
  • Cons: Hiring a CPA firm for day-to-day bookkeeping is prohibitively expensive for most small businesses. To be effective, they still need you to provide timely, organized financial records.
  • What’s the difference from bookkeepers? In short, bookkeepers record and organize historical transactions, while accountants and CPAs interpret, report, and advise based on that data. (Investopedia, Intuit)

6) Traditional Bookkeepers

A bookkeeper is a professional responsible for the weekly or monthly task of recording and reconciling your financial transactions.

  • Good for: Business owners who want a dedicated person handling the weekly grind of bookkeeping.
  • Pros: Human oversight greatly reduces common categorization errors that software alone can miss. At the end of each month, they produce a clean set of financial statements for you to review.
  • Cons: This option is costlier than DIY software, with monthly retainers often starting in the hundreds of dollars. The turnaround time for reports and answers depends on your bookkeeper's availability and process.
  • Reality Check: For many small businesses, the combination of a great bookkeeper for weekly tasks and periodic CPA support for tax and strategy is a durable and effective combo. (Pioneer Accounting Group)

7) Beancount.io (Plain-Text Accounting, Supercharged)

This modern approach combines the control of spreadsheets with the automation of software and the precision of double-entry accounting.

  • Good for: Developers, finance pros, and detail-oriented founders who demand precision, transparency, and automation without black boxes.
  • What it is: Beancount.io is a platform built on the open-source Beancount methodology. Your entire financial ledger lives as human-readable plain text, which the platform transforms into real-time analysis, hosted Fava dashboards, and AI-assisted workflows.
  • Why teams choose it:
    • Scriptable & Auditable: Version-control your books with Git. Every single change is reviewable in a diff, just like code.
    • Hosted Fava UI: Instantly generate income statements, balance sheets, and interactive charts directly from your text-based ledger. No manual report building.
    • AI Assistance: Speed up transaction categorization and anomaly detection while keeping humans in the loop for final approval.
    • True Portability: Your core data is a simple text file. You can export it anytime. There is zero vendor lock-in.
  • Tradeoffs: There is a learning curve if you’ve never used double-entry accounting in a plain-text format. It's best suited for those who value absolute accuracy and control over the illusion of "push-button" convenience.

Prefer pure open source and self-hosting?

You can always run the Beancount open-source engine on your own machine and use Fava as the web UI. It’s incredibly powerful and free, but you will be responsible for managing the setup, backups, and data integrations yourself. Beancount.io handles all of that for you.


Quick Comparison (At a Glance)

SolutionYour Time InvestmentAutomation LevelHuman HelpData Control
ExcelHighLowNoneMedium
Google SheetsHighLowNoneMedium
QuickBooks OnlineMediumMedium-HighOptionalLow
XeroMediumMedium-HighOptionalLow
Accountants (CPAs)LowN/AHigh (Advisory)Medium
Traditional BookkeepersLowN/AHigh (Weekly)Medium
Beancount.ioLow-MediumHighOptionalHigh

How to Choose

  • Want maximum control, auditability, and developer-grade workflows? Choose Beancount.io. You get hosted Fava dashboards, AI assistance, and the freedom of plain-text portability.
  • Want someone to “just handle it”? Hire a bookkeeper and keep a CPA on call for taxes and strategic questions.
  • Comfortable in traditional SMB software ecosystems? QuickBooks or Xero are fine choices—just be sure to budget time each week to review and reconcile your transactions.
  • Just testing the waters on a tight budget? Spreadsheets can work for a short time. Treat them as a stepping stone to a real system, not the final destination.

Why Plain-Text Accounting is Having a Moment

Plain-text accounting (PTA) tools like Beancount are gaining traction because they emphasize reproducibility, version control, and transparency. These are values that resonate deeply with engineers, data scientists, and finance pros. If you believe your company's books should be as clear and reviewable as your code, you’re in the right place. (plaintextaccounting.org)

Ready to see your ledger come alive?

Spin up a free Beancount.io workspace, import a small sample of last month’s transactions, and open the hosted Fava dashboard. You'll see your income statement and balance sheet appear instantly—then you can refine your categories with AI assistance.

The Accounting Cycle, Beancount-Style

· 9 min read
Mike Thrift
Mike Thrift
Marketing Manager

Financial statements don't appear by magic. They are the final product of a structured, repeatable process known as the accounting cycle. While the principles are universal, the tools you use can dramatically change the experience. This guide walks you through the accounting cycle with a focus on Beancount, the powerful plain-text accounting tool.

We'll see how Beancount's text-first approach eliminates tedious steps, what you should automate, and which reports give you the clearest picture of your financial health. 🧑‍💻

2025-08-13-the-accounting-cycle-beancount-style


TL;DR: The Beancount Workflow

  • Capture & Journal: Record every transaction as a clean, double-entry posting in your .beancount text file.
  • Validate & Reconcile: Use balance assertions to confirm your ledger matches bank statements and run bean-check to catch errors.
  • Review: Generate an unadjusted trial balance for a quick sanity check.
  • Adjust: Post entries for accruals, deferrals, depreciation, and other period-end items.
  • Re-review: Check the adjusted trial balance to ensure everything is correct.
  • Publish & Close: Generate your Income Statement, Balance Sheet, and Cash Flow statement. Closing the books is optional in Beancount, as reports are date-aware.

This flow can be visualized like this:


Step 1: Capture and Record Transactions

This is the foundational step. Every financial event—a sale, a purchase, a bank fee—must be recorded. In Beancount, you do this by creating transactions in a simple text file, typically named main.beancount or organized into multiple files by year.

Each transaction must follow the rules of double-entry bookkeeping, meaning the sum of all postings must be zero. Beancount enforces this for you.

2025-08-10 * "Walmart" "Purchase of office supplies"
Expenses:Office:Supplies 45.67 USD
Assets:Bank:Checking -45.67 USD
  • Pro-Tip: Use tags like #project-phoenix or #client-acme to add dimensions to your data. This makes querying and reporting incredibly flexible later on.

Reconciliation Hygiene ✅

The most powerful feature for ensuring accuracy is the balance assertion. At the end of a statement period (e.g., end of the month), you declare what the balance of an account should be.

2025-08-31 balance Assets:Bank:Checking  12345.67 USD

If the sum of all transactions affecting Assets:Bank:Checking up to that date doesn't equal 12345.67 USD, Beancount will raise an error. This simple directive turns your ledger into a self-auditing document.

For those backfilling historical data, the pad directive can automatically create a balancing transaction to make your opening balances match your first assertion.


Step 2: "Post to the Ledger" (A Freebie!)

In traditional accounting systems, you first write entries in a "journal," and then a separate "posting" step copies those values to the "general ledger."

With Beancount, your .beancount file is both the journal and the ledger. When you write and save a transaction, you've already posted it. There is no separate step. This directness is a core advantage of plain-text accounting—what you see is what you get.


Step 3: Prepare an Unadjusted Trial Balance

Before you start making adjustments, you need a quick "does this all add up?" check. A trial balance is a simple report that lists every account and its total balance. The grand total of all debit balances must equal the grand total of all credit balances.

You can generate this with a simple query:

bean-query main.beancount \
"SELECT account, sum(position) GROUP BY 1 ORDER BY 1"

Or, for a more visual approach, open your ledger in Fava (the web interface for Beancount) and navigate to the "Trial Balance" report. Look for anything unusual—an asset account with a credit balance, or an expense account with a strange value.


Step 4: Book Adjusting Entries

Adjusting entries are crucial for accurate reporting under the accrual basis of accounting. They ensure that revenues are recognized when earned and expenses are recognized when incurred, regardless of when cash changes hands.

Common adjustments include:

  • Accruals: Recording revenue you've earned but haven't invoiced yet, or an expense you've incurred but haven't paid.
  • Deferrals: Handling prepayments. If a customer pays you for a year of service upfront, you book it as a liability (Liabilities:UnearnedRevenue) and recognize 1/12th of it as income each month.
  • Non-Cash Items: Recording things like depreciation of assets.
  • Corrections: Fixing errors or accounting for missed items from bank feeds, like a small interest payment.

Example: Accruing Revenue

You finished a project on August 31st but won't send the invoice until September. To recognize the income in the correct period (August), you make an adjusting entry:

2025-08-31 * "Accrue revenue for client project #1042"
Assets:AccountsReceivable 3000.00 USD
Income:Consulting -3000.00 USD

Example: Recording Depreciation

Your company has a depreciation schedule for its assets. At the end of the period, you book the expense:

2025-12-31 * "Annual depreciation on computer equipment"
Expenses:Depreciation 4800.00 USD
Assets:Fixed:AccumulatedDepreciation -4800.00 USD

Step 5: Run an Adjusted Trial Balance & Validate

Once your adjusting entries are in, run the trial balance report again. This is your Adjusted Trial Balance. It provides the final set of numbers that will be used to create the financial statements.

This is also the perfect time to run Beancount's built-in sanity check:

bean-check main.beancount

This command verifies all syntax, balancing rules, and assertions. If it runs without any output, your books are mechanically sound.


Step 6: Publish Financial Statements 📊

This is the payoff. Using the numbers from your adjusted trial balance, you can now generate the key financial reports. Fava is the easiest way to do this, as it provides interactive, drill-down reports out of the box.

  • Income Statement (Profit & Loss): Shows your revenues and expenses over a period, resulting in your net income or loss.
  • Balance Sheet: A snapshot of what you own (Assets) and what you owe (Liabilities), as well as your net worth (Equity), on a specific date.
  • Cash Flow Statement: Reconciles your starting cash with your ending cash by showing where money came from and where it went.

For custom reports, you can use Beancount Query Language (BQL). Here’s a query for a monthly income statement:

-- P&L for August 2025
SELECT account, sum(position)
WHERE account ~ '^(Income|Expenses)'
AND date >= 2025-08-01 AND date <= 2025-08-31
GROUP BY account ORDER BY account;

Step 7: Closing the Books (Optional)

In traditional accounting, the "closing" process involves creating journal entries to zero out all temporary accounts (Income and Expenses) and transfer the net income into an equity account called Retained Earnings. This formally resets the temporary accounts for the next year.

In Beancount, this step is usually unnecessary. Fava's reports are date-aware; if you ask for a 2025 P&L, it will only use 2025 data. The balances don't "spill over." Most users simply leave the balances as they are.

However, if you need to perform a formal close for compliance or shareholder reporting, you can do so with a simple year-end transaction that moves the total income and expense balances into Equity:Retained-Earnings.


A Practical Monthly Close Checklist

Here’s a repeatable checklist to close your books each month using Beancount.

  • Capture: Import all bank and credit card transactions. Manually enter any cash expenses or out-of-band items.
  • Reconcile: Add balance assertions for all bank accounts, credit cards, and loan accounts, matching them to your statements.
  • Review: Scan the unadjusted trial balance in Fava. Investigate any strange or unexpected balances. Check for stale unpaid invoices (Assets:AccountsReceivable) or bills (Liabilities:AccountsPayable).
  • Adjust: Book entries for accrued revenue/expenses, deferred revenue, and any necessary corrections.
  • Validate: Run bean-check. Review the final adjusted trial balance.
  • Publish: Generate the P&L and Balance Sheet. Send them to stakeholders or save them for your records.
  • Wrap-up: Optionally, perform a closing entry if your business requires it. Archive a copy of your .beancount files for the period.

Why Beancount Shines for the Accounting Cycle

  • Transparency and Auditability: Your ledger is a text file. You can use git to version control your financial history, review changes with diff, and collaborate with your accountant in a clear, unambiguous format.
  • Total Control: You define your chart of accounts. You aren't locked into a software vendor's structure. Your data is yours, forever, in an open format.
  • Unmatched Power: The combination of SQL-like queries (BQL) and a rich web interface (Fava) gives you unparalleled power to slice, dice, and understand your financial data.

Copy-Paste Snippets to Get Started

Simple Chart of Accounts:

option "title" "My Personal Ledger"
option "operating_currency" "USD"

;; --- Accounts ---
1970-01-01 open Assets:Bank:Checking
1970-01-01 open Assets:AccountsReceivable
1970-01-01 open Liabilities:CreditCard
1970-01-01 open Liabilities:UnearnedRevenue
1970-01-01 open Equity:Owner:Capital
1970-01-01 open Equity:Retained-Earnings
1970-01-01 open Income:Consulting
1970-01-01 open Expenses:Office:Supplies
1970-01-01 open Expenses:Software
1970-01-01 open Expenses:Depreciation

Useful BQL Query:

-- Find all customers with an outstanding balance
SELECT payee, sum(position)
WHERE account = 'Assets:AccountsReceivable'
GROUP BY payee
HAVING sum(position) > 0
ORDER BY sum(position) DESC;

By mapping the timeless accounting cycle to Beancount's modern, text-based tools, you gain a system that is robust, transparent, and built to last. Happy bookkeeping!

Understanding Accounts Receivable (A Beancount Guide)

· 8 min read
Mike Thrift
Mike Thrift
Marketing Manager

If you run a business that bills clients, you need a rock-solid way to track who owes you money. This is where Accounts Receivable (AR) comes in. It’s more than just a number on a report; it’s the lifeblood of your cash flow.

This guide will walk you through what Accounts Receivable is, why it matters, and how to manage it with precision and clarity using the plain-text accounting system, Beancount.

2025-08-12-understanding-accounts-receivable


TL;DR

Accounts receivable (AR) is the money customers owe you for goods or services you’ve already delivered. It’s a current asset on your balance sheet, central to accrual accounting, and a key driver of your business's cash flow. You can track AR cleanly in Beancount by using customer sub-accounts, linking invoices to payments with ^links, and running a few simple queries. To measure your collection speed, you can calculate AR Turnover and Days Sales Outstanding (DSO). To handle risk, you can use an allowance for doubtful accounts.


What is Accounts Receivable?

Definition Accounts Receivable represents the balance of money due to your firm for goods or services delivered or used but not yet paid for by customers. Under accrual accounting, you recognize this revenue when you earn it, not when you receive the cash. As a result, AR appears as a current asset on your company's balance sheet.

Why It Matters Effectively managing your AR is critical for maintaining healthy liquidity. The faster you collect on your invoices, the shorter your cash conversion cycle—the time it takes to turn your investments in inventory and other resources back into cash. By monitoring metrics like AR Turnover and Days Sales Outstanding (DSO), you can get a clear picture of your collection efficiency and take action to improve it.

Accounts Receivable vs. Accounts Payable (One-Line Refresher)

  • AR = money owed to you (it's an asset).
  • AP = money you owe to others (it's a liability).

The Accounts Receivable Flow in Double-Entry Accounting

Conceptually, the lifecycle of a receivable follows these steps:

  1. Issuing an Invoice (Credit Sale): When you send an invoice, you increase your Assets (specifically, Accounts Receivable) and recognize the Income you've earned.
  2. Cash Collection: When the customer pays, you increase one asset (your Assets:Bank account) and decrease another (Assets:AR). The net effect on your total assets is zero, but your cash position improves.
  3. Discounts or Credits: If you offer an early-payment discount or issue a credit memo, you reduce the customer's AR balance and offset it with a discount expense or a reduction in revenue (contra-revenue).
  4. Bad Debts: Unfortunately, not all invoices get paid. To account for this, you can recognize an allowance for doubtful accounts (a contra-asset that reduces your AR's value) and a corresponding bad debt expense. Later, you can write off a specific uncollectible invoice against this allowance.

Modeling AR in Beancount

Beancount is a plain-text, double-entry accounting system that is perfectly suited for tracking AR. Its use of tags (which start with #), links (which start with ^), and a SQL-like query language (bean-query) makes your entire AR process transparent, auditable, and scriptable.

Suggested Account Structure

A clean chart of accounts is the foundation. Here’s a recommended structure:

Assets:AR
Assets:AR:Clients:<Name>
Assets:AR:Allowance ; A contra-asset account

Income:Sales
Income:Contra:SalesDiscounts ; An alternative to an expense account

Expenses:SalesDiscounts
Expenses:BadDebt

1. Record a Credit Sale (Issue an Invoice)

When you send an invoice to a client, you record it in your ledger.

2025-07-01 * "Acme Co." "Invoice 2025-045 · Web design" ^INV-2025-045 #ar #client:acme
invoice: "2025-045"
due: "2025-07-31"
document: "/invoices/2025/INV-2025-045.pdf"
Assets:AR:Clients:Acme-Co 1200.00 USD
Income:Sales -1200.00 USD
  • The ^INV-2025-045 link is a unique identifier that will tie this invoice to its future payment(s).
  • The document: metadata helps Fava (Beancount's web interface) render a clickable link directly to the invoice PDF.

2. Record Full Payment

When Acme Co. pays the invoice in full, you clear their receivable balance.

2025-07-25 * "Acme Co." "Payment for INV-2025-045" ^INV-2025-045 #ar
Assets:Bank:Checking 1200.00 USD
Assets:AR:Clients:Acme-Co -1200.00 USD

Using the same ^INV-2025-045 link creates a clear audit trail connecting the invoice and the payment.

3. Handling Partial Payments

If a client makes a partial payment, the process is the same. The link keeps everything connected.

2025-07-20 * "Acme Co." "Partial payment INV-2025-045" ^INV-2025-045 #ar
Assets:Bank:Checking 400.00 USD
Assets:AR:Clients:Acme-Co -400.00 USD

A query on ^INV-2025-045 would show the original 1200invoiceandthis1200 invoice and this 400 payment, leaving an $800 balance.

4. Handling an Early-Payment Discount

Let's say you offer a 2% discount on a $1000 invoice if paid early.

2025-07-10 * "Acme Co." "2% early-payment discount on INV-2025-046" ^INV-2025-046 #ar
Assets:Bank:Checking 980.00 USD
Expenses:SalesDiscounts 20.00 USD
Assets:AR:Clients:Acme-Co -1000.00 USD

Here, you clear the full 1000receivable,recordthe1000 receivable, record the 980 cash received, and book the $20 discount as an expense. Note: Many ledgers treat sales discounts as contra-revenue instead of an expense. Using an expense account is often simpler for smaller ledgers. The key is to choose one method and use it consistently.

5. Including Sales Tax on Invoices

If you collect sales tax, you record it as a liability at the time of invoicing.

2025-07-01 * "Acme Co." "INV-2025-047 · Hardware + tax" ^INV-2025-047 #ar
invoice: "2025-047"
due: "2025-07-31"
Assets:AR:Clients:Acme-Co 1100.00 USD
Income:Sales -1000.00 USD
Liabilities:Tax:Sales -100.00 USD

You've invoiced for 1100,recognized1100, recognized 1000 in revenue, and now owe $100 to the tax authority.

6. Handling Bad Debts (Allowance Method)

The allowance method is preferred under Generally Accepted Accounting Principles (GAAP) as it better matches expenses to revenues.

Step 1: Estimate and Create the Allowance (e.g., at Year-End) Based on historical data, you estimate a percentage of your receivables may be uncollectible.

2025-12-31 * "Allowance for doubtful accounts (2% of AR)"
Expenses:BadDebt 300.00 USD
Assets:AR:Allowance -300.00 USD

This creates a contra-asset account (Assets:AR:Allowance) that reduces the book value of your total receivables.

Step 2: Write Off a Specific Uncollectible Invoice Later When you are certain an invoice will not be paid, you write it off against the allowance.

2026-03-05 * "Write-off INV-2025-049 for Insolvent Client" ^INV-2025-049 #ar
Assets:AR:Allowance 1200.00 USD
Assets:AR:Clients:Insolvent-Client -1200.00 USD

Notice this transaction does not impact your expenses; the expense was already recognized when you created the allowance.


Minimal Reporting & Queries

You can get quick snapshots of your AR using Fava or bean-query.

Open Receivables by Customer

SELECT account, SUM(position)
WHERE account ~ '^Assets:AR'
GROUP BY account
ORDER BY account;

Journal of AR Activity for a Period

JOURNAL
WHERE account ~ '^Assets:AR'
AND date >= 2025-07-01 AND date < 2025-08-01;

Core AR Metrics (With Quick Formulas)

For these ratios, a practical approach is to use bean-query to export the necessary numbers (period sales, beginning/ending AR balances) and then perform the calculations in a spreadsheet or a script. This keeps your ledger clean and your math explicit.

AR Turnover Ratio

This measures how many times per period your business collects its average accounts receivable. Higher is better.

ARTurnover=fracNetCreditSalesAverageARAR\\ Turnover = \\frac{Net\\ Credit\\ Sales}{Average\\ AR}

DSO (Days Sales Outstanding)

This tells you the average number of days it takes to collect payment after a sale has been made. Lower is better.

DSO=(fracAccountsReceivableTotalCreditSales)timesNumberofDaysDSO = (\\frac{Accounts\\ Receivable}{Total\\ Credit\\ Sales}) \\times Number\\ of\\ Days

Together, these metrics indicate how efficiently you convert invoices into cash.


A Simple Beancount Starter File (Copy/Paste)

; --- Accounts ---------------------------------------------------------------
1970-01-01 open Assets:Bank:Checking USD
1970-01-01 open Assets:AR
1970-01-01 open Assets:AR:Clients:Acme-Co
1970-01-01 open Assets:AR:Allowance
1970-01-01 open Income:Sales
1970-01-01 open Expenses:SalesDiscounts
1970-01-01 open Expenses:BadDebt
1970-01-01 open Liabilities:Tax:Sales USD
; ---------------------------------------------------------------------------

; Example invoice
2025-07-01 * "Acme Co." "Invoice 2025-045 · Web design" ^INV-2025-045 #ar
invoice: "2025-045"
due: "2025-07-31"
document: "/invoices/2025/INV-2025-045.pdf"
Assets:AR:Clients:Acme-Co 1200.00 USD
Income:Sales -1200.00 USD

; Payment received
2025-07-25 * "Acme Co." "Payment INV-2025-045" ^INV-2025-045 #ar
Assets:Bank:Checking 1200.00 USD
Assets:AR:Clients:Acme-Co -1200.00 USD

Operational Tips to Keep AR Healthy

  • Set Clear Terms: Include the due date, late fee policies, and any early-payment discount terms on every invoice.
  • Link Everything: Use consistent ^INV-... links to tie invoices, payments, and credit memos together for a clear audit trail.
  • Attach Documents: Use the document: metadata to link to PDFs of invoices, purchase orders, and contracts.
  • Review Monthly: Check your open AR report at least once a month and follow up on past-due invoices. Watch your AR Turnover and DSO trends to spot problems early.

Further Reading (Sources Used)

S Corp vs. C Corp: Advantages and Disadvantages for Beancount.io Users

· 11 min read
Mike Thrift
Mike Thrift
Marketing Manager

Choosing the right business entity is one of the most critical decisions a founder makes. It impacts your taxes, your ability to raise money, and your administrative workload. Two of the most common structures for incorporated businesses are the C corporation and the S corporation. What’s the difference, and which one is right for you?

TL;DR

2025-08-11-s-corp-vs-c-corp-advantages-and-disadvantages

C corporations are taxed at the corporate level, and shareholders are taxed again when they receive dividends—a system known as double taxation. S corporations are "pass-through" entities, meaning profits are taxed just once on the owners’ personal tax returns, but they come with strict ownership limits. If you plan to reinvest heavily and raise venture capital, the C corp is often the cleaner, more scalable choice. If you're a profitable, owner-operated business and want to distribute cash while paying yourself a reasonable salary, an S corp can significantly lower your tax bill.

Either way, Beancount.io is built to keep your books clean with plain-text, auditable entries and export-ready financials that make tax time a breeze.


Quick Comparison

TopicC corporationS corporation
How to createFile articles of incorporation with a state (this is the default status).Incorporate first, then file IRS Form 2553 to elect S corp status.
TaxationDouble taxation: Profits are taxed at the corporate level, then shareholders are taxed on dividends.Pass-through: Income is taxed on the owners’ personal returns (no corporate income tax).
Ownership rulesNo limits on the number or type of shareholders; multiple classes of stock are allowed.≤100 shareholders, who must be U.S. persons only, and only one economic class of stock is permitted.
Investor perceptionVC-friendly, especially the Delaware C corp, which is the industry standard.Less attractive to VCs due to pass-through taxation and stock class limitations.
Best forHigh-growth startups focused on reinvestment and raising external capital.Owner-operators who want to pull cash from the business via a mix of payroll and distributions.
Core IRS forms1120, 1120-W, 941, 1099-DIV (if paying dividends).1120-S, 1120-W (if applicable), 941, Schedule K-1 issued to each owner.

Note: The federal corporate income tax is a flat 21%. However, state rules for both C corps and S corps vary widely. Always verify the tax treatment in your state of incorporation and operation.


What is a C Corporation?

A C corporation is the standard, default corporate structure in the United States. When you file articles of incorporation with a state, you create a C corp unless you elect otherwise. This structure provides limited liability protection for its owners (shareholders), requires formal governance (a board of directors, officers, bylaws), and creates a legal entity that investors and banks recognize and understand.

How C Corps Are Taxed

C corps have a distinct tax identity. They file their own corporate tax return, IRS Form 1120, and pay taxes on their net income at the corporate level. If the corporation then distributes its after-tax profits to shareholders in the form of dividends, those shareholders must report that dividend income on their personal tax returns and pay taxes on it again. This is the "double taxation" C corps are known for.

Why Choose a C Corp?

  • Fundraising & Equity: This is the biggest draw for startups. C corps can issue multiple classes of stock (e.g., common and preferred), which is essential for venture capital deals. Structuring option pools, SAFEs, and convertible notes is straightforward.
  • Reinvestment: If you plan to plow all your profits back into growing the business, you can avoid the second layer of tax by simply not paying dividends. The profits are taxed once at the corporate rate and remain in the company.
  • Signaling: For better or worse, incorporating as a Delaware C corp signals to investors that you intend to build a venture-scale company.

Drawbacks of a C Corp

  • Double Taxation: The primary disadvantage. If you plan to distribute profits regularly, you’ll pay tax twice on the same dollar.
  • Administrative Burden: C corps come with more compliance requirements, including holding board meetings, maintaining corporate minutes, and handling more complex state and federal filings.
  • Limited Deductions: Certain tax credits and deductions available to individuals or pass-through entities are not available at the corporate level.

What is an S Corporation?

An S corporation is not a different type of legal entity but rather a special tax election made with the IRS. A domestic corporation (or an LLC that elects to be taxed as a corporation) can file to become an S corp, which allows it to be treated as a pass-through entity for federal tax purposes.

Eligibility Snapshot

To qualify for and maintain S corp status, a company must meet strict criteria:

  • Have no more than 100 shareholders.
  • All shareholders must be U.S. individuals, certain trusts, or estates. No corporations, partnerships, or non-resident aliens can be shareholders.
  • Have only one class of stock economically. (Differences in voting rights are allowed, but all shares must have the same rights to profits and assets).
  • Not be an ineligible corporation, such as a bank or insurance company.
  • You must file Form 2553 on time. For an existing business, this is generally by the 15th day of the third month of the tax year (March 15th for a calendar-year business).

Why Choose an S Corp?

  • Single Layer of Tax: Profits and losses "pass through" the business directly to the owners' personal tax returns, reported via a Schedule K-1. The corporation itself does not pay federal income tax.
  • Self-Employment Tax Savings: This is a key benefit. Owner-employees must pay themselves a "reasonable salary," which is subject to FICA taxes (Social Security and Medicare). However, any additional profits can be paid out as distributions, which are not subject to self-employment taxes.

Drawbacks of an S Corp

  • Strict Rules: The ownership restrictions are rigid. Accidentally violating one (e.g., selling stock to an ineligible shareholder) can lead to an "inadvertent termination" of S corp status, which can have messy tax consequences.
  • "Reasonable Compensation" Scrutiny: The IRS pays close attention to whether the salary paid to owner-employees is reasonable. Paying yourself an artificially low salary to maximize tax-free distributions is a major red flag for an audit.
  • State Variability: Not all states recognize the S corp election. Some tax S corps as if they were C corps, or they may impose a separate entity-level tax, partially negating the federal tax benefit.

Which Should You Pick?

The decision boils down to your goals for ownership, funding, and cash flow.

Consider a C corp if you expect to:

  • Seek institutional investment from venture capitalists.
  • Create different classes of stock for founders and investors (e.g., preferred shares).
  • Use complex equity instruments like SAFEs or convertible notes.
  • Have non-U.S. owners, either now or in the near future.
  • Reinvest profits for several years before taking significant cash out of the business.

Consider an S corp if you:

  • Are 100% owned by U.S. individuals who meet the criteria.
  • Are already profitable and want to distribute cash to owners efficiently.
  • Can confidently run payroll and pay owner-operators a defensible, market-rate salary.
  • Do not need complex equity classes for different types of owners.

If you’re unsure, many businesses start as a Delaware C corp to maintain maximum flexibility. You can evaluate making an S corp election later if your profitability and ownership structure make it advantageous.


Beancount.io: How Your Books Differ (with Examples)

Whether you choose a C or S corp, Beancount.io’s plain-text ledger makes the flow of money for taxes and equity explicit and auditable. Here are a few examples illustrating the key differences in your journal entries.

1) C Corp: Accruing and Paying Corporate Income Tax

A C corp is responsible for its own income tax. You'll accrue this liability and then pay it.

2025-03-31 * "Accrue federal corporate income tax for Q1"
Expenses:Taxes:Income 12500.00 USD
Liabilities:Taxes:Federal -12500.00 USD

2025-04-15 * "Pay Q1 2025 federal estimated tax"
Liabilities:Taxes:Federal 12500.00 USD
Assets:Bank:Checking -12500.00 USD

2) C Corp: Paying a Dividend vs. Retaining Earnings

When a C corp distributes profits, it's a dividend. This is a reduction of equity, not an expense.

2025-06-30 * "Board declares and pays cash dividend"
Equity:Dividends 50000.00 USD
Assets:Bank:Checking -50000.00 USD

If you retain the earnings instead, you simply don’t post this transaction. The profit stays in your Equity:RetainedEarnings account.

3) S Corp: Reasonable Salary & Payroll Taxes

S corp owners must be paid a salary. This is a standard payroll expense, complete with employer-side taxes.

2025-01-31 * "Owner payroll (gross wages and employer taxes)"
Expenses:Payroll:Wages 8000.00 USD ; Gross salary
Expenses:Payroll:EmployerFICA 612.00 USD ; Employer portion of taxes
Liabilities:Payroll:Federal -2000.00 USD ; Withholding + FICA
Liabilities:Payroll:State -400.00 USD ; State withholding
Assets:Bank:Checking -6212.00 USD ; Net pay to owner

2025-02-15 * "Remit payroll taxes to agencies"
Liabilities:Payroll:Federal 2000.00 USD
Liabilities:Payroll:State 400.00 USD
Assets:Bank:Checking -2400.00 USD

4) S Corp: Owner Distribution

This is how profits beyond salary are paid out in an S corp. Notice it is not an expense. It's a direct draw from equity, similar to a dividend, but with different tax implications for the owner.

2025-03-15 * "Owner distribution (profit pass-through)"
Equity:Distributions:OwnerA 20000.00 USD
Assets:Bank:Checking -20000.00 USD

The owner receives a Schedule K-1 detailing their share of the company's profit and handles the tax on their personal return.

Chart-of-Accounts Tips

  • Taxes:
    • C corp: You'll need Expenses:Taxes:Income and Liabilities:Taxes:Federal.
    • S corp: This income tax account is often unused at the federal level, but accounts for payroll taxes (Expenses:Payroll:Taxes and Liabilities:Payroll:*) are essential.
  • Equity:
    • C corp: A standard setup includes Equity:CommonStock, Equity:AdditionalPaidInCapital, Equity:RetainedEarnings, and Equity:Dividends.
    • S corp: Your chart will look similar but often uses Equity:Distributions instead of dividends. Some track Equity:AAA (Accumulated Adjustments Account) to manage distribution basis.
  • Payroll:
    • Both structures will need robust Expenses:Payroll:* and Liabilities:Payroll:* accounts if they have employees (including owner-employees).

Required IRS Forms (Common Cases)

  • C corp: Form 1120 (Annual Income Tax Return), Form 1120-W (Estimated Tax), Form 941 (Quarterly Payroll), Form 940 (Annual Unemployment/FUTA), Form 1099-DIV (for each shareholder receiving dividends), W-2/W-3.
  • S corp: Form 1120-S (Annual Income Tax Return), Schedule K-1 (for each shareholder), Form 941/940, W-2/W-3.
  • States: Remember that separate state income, franchise, and payroll tax returns will likely apply to both.

FAQ Quick Hits

  • Can an LLC be an S corp? Yes. An LLC can file Form 8832 to elect to be taxed as a corporation, and then file Form 2553 to elect S corp status (assuming it meets all eligibility rules).

  • Is an S corp “always cheaper” for taxes? Not necessarily. The benefit depends entirely on your profit levels, the owner's reasonable salary, state tax laws, and the individual owner's tax bracket.

  • Can S corps have preferred stock? No, not in an economic sense. S corps can only have one class of stock. You can have different voting rights (e.g., voting and non-voting common stock), but all shares must have identical rights to distributions and liquidation assets.

  • Can I switch from one to the other later? Yes, but it can be complex. Converting from a C corp to an S corp is common, but you must be mindful of timing and potential built-in gains (BIG) tax rules. Converting from an S corp to a C corp is also possible and often required before a VC funding round.


How Beancount.io Helps

No matter which entity you choose, Beancount.io provides the clarity and control you need.

  • Plain-text, version-controlled books that scale from a single-owner S corp to a venture-backed C corp.
  • Clear payroll and equity workflows that make it easy to distinguish distributions from dividends, track stock option expenses, and manage retained earnings.
  • Clean exports for your CPA, including a trial balance, income statement, and balance sheet, with a fully auditable trail for every number.
  • Powerful automations for bank feeds and document capture, without ever sacrificing the transparency of a human-readable ledger.

Want a head start? Ask for our sample C-corp and S-corp Beancount charts of accounts and example journal bundle.


*Disclaimer: This guide is for informational purposes only and does not constitute legal or tax advice. Tax laws and entity regulations vary by state and are subject to change. You should consult with a qualified CPA or attorney before choosing or changing your business entity type.*

Beancount.io vs. Traditional Accounting Software: Which One Fits You Best?

· 7 min read
Mike Thrift
Mike Thrift
Marketing Manager

For decades, the world of business accounting has been dominated by a familiar cast of closed, GUI-based systems like QuickBooks, Xero, and FreshBooks. They have set the standard, offering ease-of-use and visual workflows that cater to non-technical users. But for developers, power users, and anyone who values absolute transparency and control, a radically different approach has emerged: Beancount.io.

This article provides a direct comparison of Beancount.io with traditional accounting software. We'll break down their core differences in philosophy, flexibility, cost, and long-term maintainability to help you decide which system truly fits your needs.

2025-08-08-beancount-io-vs-traditional-accounting-software

1. Philosophy and Workflow

The most fundamental difference between these two approaches lies in their core philosophy.

Beancount.io Beancount.io is built on the philosophy of plain-text accounting. At its heart, every single financial transaction is an entry in a simple text file. This "accounting as code" model prioritizes human-readable, version-controllable records. Your financial data lives in a timeless, open format that you own completely—it can never be locked away by a vendor. This workflow is designed for users who are comfortable with code editors, version control systems like Git, and command-line tools.

Traditional Software Traditional accounting platforms are GUI-based and form-driven. You enter data using wizards, dropdown menus, and visual forms. This approach prioritizes immediacy and accessibility, making it easy for non-technical users to get started without a steep learning curve. However, your data is stored in a proprietary format or a cloud database, often requiring complex export and import procedures if you ever decide to migrate to another service.

Verdict: If you prioritize full control, data ownership, transparency, and automation, Beancount.io is the clear winner. If you need a "click and go" interface with a minimal learning curve, traditional software will feel more natural.

2. Flexibility and Customization

How well can the software adapt to your specific needs?

Beancount.io Being 100% scriptable is Beancount.io’s superpower. It integrates seamlessly with Python, allowing you to connect to any API, automate data fetching from bank feeds, programmatically tag transactions based on complex rules, and generate custom reports tailored to your exact specifications. Your ability to extend and customize is practically infinite, free from any vendor-imposed limitations.

Traditional Software These platforms offer a curated selection of integrations with popular tools like PayPal, Stripe, and various payroll services. While convenient, you are operating within the vendor's walled garden. Customization is limited to what the platform allows, and advanced reporting or automation often requires upgrading to a higher-tier plan or purchasing third-party add-ons. You can work with their APIs, but you'll always be bound by their ecosystem's rules and rate limits.

Verdict: Beancount.io provides unmatched flexibility for developers and technical users. Traditional tools are better suited for standard, plug-and-play workflows with popular business applications.

3. Collaboration and Transparency

How you work with others and audit your records differs significantly.

Beancount.io Collaboration on Beancount.io is managed through Git. This makes every change to your financial ledger completely transparent and auditable. You can see who changed what, when, and why—just like a code review workflow. This is ideal for distributed teams that already embrace tools like GitHub or GitLab. Furthermore, there are no hidden calculations; every number in a report can be traced back to the exact line-item entry in your ledger file, ensuring complete auditability.

Traditional Software Collaboration is handled through built-in user roles and permissions. You can invite your accountant, bookkeeper, or business partners to access the books directly through the web interface. This is highly effective for businesses that follow a traditional model of financial oversight. The downside is that some internal operations, like tax calculations or automated balance adjustments, can be opaque "black boxes," making it difficult to independently verify the logic.

Verdict: Beancount.io is perfect for teams that value granular auditability and code-style collaboration. Traditional systems are more accountant-friendly for real-time, shared GUI access.

4. Cost and Ownership

The financial models and the concept of data ownership are worlds apart.

Beancount.io The core Beancount software is open-source and free. You only pay for the value-added services of Beancount.io, which include hosting, intelligent automation, and premium features. There are no per-seat licensing fees, so you can scale your team without incurring extra costs. Most importantly, there is zero vendor lock-in. Your data is a collection of text files that you can move, edit, or store anywhere, anytime.

Traditional Software These services operate on a subscription model, typically billed monthly or yearly. Pricing is often tiered based on features, and you may face per-user or per-company fees that scale with your organization. This creates a dependency; if you stop paying, you risk losing access to your data and the software's functionality. This vendor lock-in is a significant long-term risk.

Verdict: Beancount.io is significantly more cost-effective in the long run, especially for technical teams that value data sovereignty. Traditional software offers predictable subscription costs but creates long-term dependency.

5. Learning Curve and Adoption

How quickly can you get up and running?

Beancount.io The learning curve is undeniably steeper. Adopting this system requires comfort with text-based editing, understanding basic syntax, and familiarity with tools like Git. However, the initial investment pays off. Once mastered, Beancount enables incredibly fast, repeatable workflows and provides a much deeper, foundational understanding of your financial picture.

Traditional Software These platforms are designed for non-technical business owners and offer minimal onboarding friction. You can be up and running, sending invoices and categorizing expenses, within minutes. That said, learning the more advanced features, such as custom report building or setting up multi-entity accounting, still requires a significant time investment.

Verdict: Beancount.io is the right choice if you're willing to invest time in learning a powerful system. Traditional software is faster to start with for non-technical users who need immediate results.

Side-by-Side Comparison

FeatureBeancount.ioTraditional Accounting Software
Core PhilosophyAccounting as code; plain-text ledgerGUI-based; form-driven
Data FormatOpen (Plain Text)Proprietary (Database)
Data Ownership100% user-owned and portableVendor-controlled; potential lock-in
FlexibilityInfinite; fully scriptable with PythonLimited to vendor's ecosystem & APIs
CollaborationGit-based; transparent change historyRole-based user permissions
TransparencyFully auditable; no hidden calculationsSome calculations can be opaque
Cost ModelOpen-source core; pay for hosting/automationMonthly/annual subscription (SaaS)
Learning CurveSteeper for non-technical usersLow; designed for quick start
Ideal UserDevelopers, power users, data analystsSMB owners, non-technical teams

When to Choose Each

The decision ultimately comes down to your team's skills, priorities, and workflow.

Choose Beancount.io if you:

  • Are a developer, data analyst, or technically-inclined power user.
  • Value absolute transparency, control, and long-term data portability above all else.
  • Want to fully automate your accounting and integrate it deeply into your custom workflows.
  • Are comfortable treating your financial records with the same rigor as source code.

Choose Traditional Accounting Software if you:

  • Want a quick-start, visual interface without any technical setup.
  • Need to provide immediate, accountant-friendly access with minimal training.
  • Prefer a managed, hosted solution where the vendor handles all updates and compliance.
  • Your integration needs are met by popular, off-the-shelf apps.

Final Thoughts

Beancount.io isn’t trying to be a better QuickBooks—it’s a fundamentally different way of thinking. It represents accounting as code. For technical professionals, this shift offers the same leap forward that version control with Git brought to software development: complete transparency, perfect reproducibility, and ultimate control.

At the same time, traditional accounting software continues to win on out-of-the-box ease-of-use and ready-made integrations for non-technical teams. The right choice isn't about which is "better" overall, but which is the perfect fit for your workflow, your priorities, and the degree of control you demand over your financial data.

S-Corp Election, Explained for Beancount Users

· 15 min read
Mike Thrift
Mike Thrift
Marketing Manager

What it is, when it pays off, and how to model it cleanly in your ledger (with examples).

⚠️ This guide is U.S.-specific and for education only. Talk to a tax pro for your situation.

TL;DR

  • An S-corp is a tax status you choose with the IRS (via Form 2553) so that business profits pass through to the owners' personal tax returns. A key requirement is that you must pay owner-operators a reasonable W-2 salary before taking any profit as dividends or distributions.
  • Deadlines matter: For an existing business, you must file no later than the 15th day of the 3rd month of the tax year you want the S-corp status to begin. For a calendar-year 2025 election, March 15, 2025, falls on a Saturday, so the practical deadline is the next business day, Monday, March 17, 2025.
  • Why do this? The main attraction is potential self-employment tax savings. While your W-2 salary is subject to FICA taxes, distributions are not. However, this benefit comes with added costs for payroll, compliance, and, in some states, extra entity-level taxes.
  • In Beancount, it's critical to separate wages from distributions. You'll need to track payroll liabilities, handle the special accounting for health insurance for shareholders owning more than 2% of the company, and record distributions explicitly through equity accounts.

2025-08-08-s-corp-election

What is an S-corp election?

At its core, an S-corp election is a request you make to the IRS to change how your business is taxed. By filing Form 2553, you ask the IRS to tax your corporation or LLC under Subchapter S of the Internal Revenue Code. This makes your business a "pass-through" entity, meaning its income, losses, deductions, and credits are passed directly to the shareholders' personal tax returns. It’s purely a tax classification, not a different type of legal business entity.

Key effects for an owner-operator

Once the election is active, your role fundamentally splits in two: you are now both a shareholder and an employee of your company.

This distinction is crucial. The compensation you receive for your labor must be paid as W-2 wages, which are subject to standard payroll taxes (Social Security and Medicare). Any remaining profit can then be paid out as distributions, which are generally not subject to self-employment taxes. The IRS insists that you pay yourself a reasonable salary for your work before you take any distributions.

Should you elect S-corp status?

The S-corp election is often worth evaluating once your business generates steady and meaningful profit. A common rule of thumb is to consider it when your ongoing business profit can comfortably support a market-rate salary for your role, with enough left over to make distributions worthwhile after covering all the new administrative costs.

The exact break-even point is unique to your situation and depends on several factors:

  • Your "Reasonable Salary": What would a business pay for someone with your skills and responsibilities in your industry? This figure is the baseline for your W-2 wages and is subject to IRS scrutiny.
  • State Taxes and Fees: Some states have their own rules. California, for example, imposes a 1.5% tax on an S-corp's net income, plus a minimum annual franchise tax of $800.
  • Added Costs: You'll need a payroll service, and you'll be paying for unemployment insurance. Your bookkeeping and tax preparation fees will also likely increase due to the added complexity.
  • QBI Deduction (Section 199A): The S-corp election can impact your Qualified Business Income deduction. The W-2 wages you pay yourself can either help you qualify for the full deduction or, at higher income levels, become a limiting factor.

Eligibility & Timing

Not every business can become an S-corp. Here are the high-level requirements:

  • It must be a domestic corporation or an eligible LLC.
  • It can have no more than 100 shareholders.
  • It can only have one class of stock.
  • Shareholders must be individuals, certain trusts, or estates (i.e., no partnerships, corporations, or non-resident alien shareholders).

When to file Form 2553

Timing is critical, and the rules differ slightly for new versus existing businesses.

  • For a new business: You must file within 2 months and 15 days after the first day of your first tax year. For example, if your business's tax year begins on January 7, your deadline is March 21.
  • For an existing C-corp (or an LLC taxed as a C-corp): You can file at any time during the preceding tax year or by the 15th day of the 3rd month of the year you want the election to take effect. If this date falls on a weekend or holiday, the deadline shifts to the next business day, a provision granted under IRC Section 7503.

What if you missed the deadline? Don't panic. The IRS provides a path for late-election relief under Revenue Procedure 2013-30. You can often file for this relief within 3 years and 75 days of the intended effective date, provided you have a reasonable cause for the late filing.

Reasonable Salary: The Part That Trips People Up

This is the most scrutinized aspect of the S-corp structure. The IRS is very clear: shareholder-employees must be paid reasonable compensation for the services they provide before any profits are taken as distributions.

What does "reasonable" mean? There's no single dollar amount. The IRS and courts look at a variety of factors to determine if your salary is appropriate, including your duties and responsibilities, the time you spend working, your level of experience, and what comparable businesses would pay for similar services. Expect the IRS to take a close look if you pay yourself a very low W-2 salary while taking large distributions. This is often seen as a red flag for attempting to evade payroll taxes.

Health Insurance & Fringe Benefits for >2% Shareholders

There's a special rule for how S-corps handle health insurance for shareholders who own more than 2% of the company. If the S-corp pays or reimburses these health insurance premiums, the cost is deductible by the S-corp.

However, the value of those premiums must also be included in the shareholder-employee's W-2 wages. While this amount is subject to federal income tax withholding, it is exempt from Social Security and Medicare (FICA) taxes as long as it's handled correctly. You must coordinate with your payroll provider to ensure these amounts are reported properly on your W-2.

State-Level Gotchas (Examples)

Federal S-corp status doesn't always translate directly at the state level. Always check your state's specific rules.

  • California: S-corps are subject to a 1.5% tax on their California-source net income. Additionally, most corporations must pay an $800 minimum franchise tax each year (though some exceptions apply for the first year).
  • New York: Making a federal S-corp election is not enough. You must also file a separate state-level election, Form CT-6, to be treated as a New York S-corporation. Failure to do so means you'll be taxed as a standard C-corp at the state level.

How to Model an S-corp Cleanly in Beancount

Plain text accounting is perfect for managing the added complexity of an S-corp. Here’s how to structure your ledger.

Suggested Chart of Accounts (Starter)

This basic structure separates your payroll expenses from distributions and creates liability accounts to track taxes you owe.

; Core bank & income
1970-01-01 open Assets:Bank:Checking USD
1970-01-01 open Income:Sales USD
1970-01-01 open Income:Other USD

; Payroll expenses & liabilities
1970-01-01 open Expenses:Payroll:Wages USD
1970-01-01 open Expenses:Payroll:EmployerTaxes USD
1970-01-01 open Expenses:Benefits:HealthInsurance USD
1970-01-01 open Liabilities:Payroll:Federal:FIT USD
1970-01-01 open Liabilities:Payroll:FICA USD
1970-01-01 open Liabilities:Payroll:Medicare USD
1970-01-01 open Liabilities:Payroll:State:Withholding USD

; Equity
1970-01-01 open Equity:ContributedCapital USD
1970-01-01 open Equity:Distributions USD
1970-01-01 open Equity:RetainedEarnings USD

Typical Payroll Run (Simplified)

Your payroll provider (e.g., Gusto, ADP) will debit your bank account for your net pay and the total tax liability. Your Beancount transaction should break this down into the gross wages, employer taxes, and the corresponding liabilities.

; This transaction records a $100k annual salary, paid monthly.
2025-01-31 * "Gusto" "Jan payroll — shareholder-employee"
Expenses:Payroll:Wages 8,333.33 USD ; Gross wages
Expenses:Payroll:EmployerTaxes 637.50 USD ; Employer-side FICA/Medicare
Liabilities:Payroll:Federal:FIT -1,200.00 USD ; Employee withholding
Liabilities:Payroll:FICA -516.67 USD ; Employee withholding
Liabilities:Payroll:Medicare -120.83 USD ; Employee withholding
Assets:Bank:Checking -7,133.33 USD ; Net pay debited from bank

When your payroll provider remits those taxes to the government on your behalf, you'll record another transaction to clear out the liabilities.

; This represents the tax payment made by your payroll provider.
2025-02-15 * "EFTPS" "Federal payroll tax deposit"
Liabilities:Payroll:Federal:FIT 1,200.00 USD
Liabilities:Payroll:FICA 516.67 USD
Liabilities:Payroll:Medicare 120.83 USD
Assets:Bank:Checking -1,837.50 USD ; This amount matches the tax portion of the Gusto debit.

Health Insurance for a >2% Shareholder

Record the premium payment as a business expense. You can use metadata to remind yourself that this needs to be reported on the W-2.

2025-02-01 * "BlueCross" "Shareholder health insurance (report on W-2)"
Expenses:Benefits:HealthInsurance 600.00 USD ; w2: "true"
Assets:Bank:Checking -600.00 USD

Owner Distributions (Not Wages)

Distributions are a reduction of equity, not a business expense. Record them separately from payroll.

2025-03-31 * "Owner Distribution" "Q1 distribution"
Equity:Distributions 20,000.00 USD
Assets:Bank:Checking -20,000.00 USD

Your shareholder basis determines whether distributions are tax-free and whether you can deduct business losses on your personal return. While the official calculation is done on your tax return, you can track an estimate in Beancount using a dedicated equity subaccount or metadata. You'll reconcile this to the Schedule K-1 you receive from the S-corp annually.

A Note on the QBI Deduction (Section 199A)

Owners of pass-through businesses, including S-corps, may be eligible for up to a 20% deduction on their qualified business income (QBI). However, for taxpayers with income above a certain threshold, this deduction can be limited by the amount of W-2 wages the business pays. This creates a complex interplay: paying a reasonable salary is required for an S-corp, and those same wages can impact your QBI deduction—sometimes helping it, sometimes limiting it. This is a key area to model with your tax professional.

What Changes Operationally After You Elect?

Switching to an S-corp adds a few administrative layers:

  • Run Payroll: You must formally run payroll, complete with tax withholdings, employer tax payments, quarterly filings, and year-end W-2s.
  • File Form 1120-S: This is the annual S-corporation tax return. You'll also issue a Schedule K-1 to each shareholder detailing their share of the company's financial results.
  • Handle Shareholder Health Insurance Correctly: Ensure premiums for >2% owners are included in their W-2 wages.
  • Mind State Rules: Stay on top of any required state-level S-corp elections or entity taxes (like in CA and NY).

Common Pitfalls to Avoid

  • Late or Invalid Election: Double-check deadlines and ensure all required shareholders sign Form 2553. If you miss it, investigate relief under Rev. Proc. 2013-30.
  • Unreasonable Salary: Don't be tempted to pay yourself an artificially low salary. Document why your compensation is reasonable based on your role and market data.
  • Mixing Wages and Distributions: Keep these transactions clean and separate in your books. Distributions are not payroll.
  • Ignoring State Requirements: Forgetting a state election or failing to pay an entity-level tax can lead to penalties and compliance headaches.

Quick Checklist

  • Confirm you are eligible and that the potential tax savings outweigh the new costs.
  • Calendar the Form 2553 filing deadline (and remember the weekend/holiday rule).
  • Set up a payroll service and determine a well-documented, reasonable salary.
  • Plan to take distributions only after salary and business expenses are paid.
  • Investigate and comply with your state's specific S-corp filing requirements and taxes.
  • Update your Beancount ledger with the necessary accounts for payroll, liabilities, and shareholder equity.

Beancount S‑Corp Starter (neutral template)

;
; Beancount S‑Corp Starter (neutral template)
; Generated: 2025-08-09
; ---
; How to use this:
; 1) Search for "TODO" and fill in your state(s), payroll provider, EIN, and bank names.
; 2) Keep wages and owner distributions separate.
; 3) Coordinate with your payroll provider to report >2% shareholder health insurance on the W‑2 (Box 1).
; 4) Delete or adapt the CA/NY examples if you’re in a different state.
;
; Notes:
; - This is a bookkeeping template, not tax advice.
; - Operating currency assumed USD. Change as needed.
;

option "title" "S‑Corp Ledger"
option "operating_currency" "USD"
commodity USD

; === Accounts (open as of 2025-01-01; adjust dates as needed) ==================
2025-01-01 open Assets:Bank:Checking USD ; TODO: Rename to your bank (e.g., Assets:Bank:Chase:Operating)
2025-01-01 open Assets:Bank:Savings USD
2025-01-01 open Assets:AccountsReceivable USD
2025-01-01 open Assets:PrepaidExpenses USD

2025-01-01 open Liabilities:CreditCard:Corporate USD
2025-01-01 open Liabilities:Payroll:Federal:FIT USD
2025-01-01 open Liabilities:Payroll:Federal:FICA USD
2025-01-01 open Liabilities:Payroll:Federal:Medicare USD
2025-01-01 open Liabilities:Payroll:Federal:FUTA USD
2025-01-01 open Liabilities:Payroll:State:Withholding USD ; TODO: Rename state (e.g., CA, NY)
2025-01-01 open Liabilities:Payroll:State:Unemployment USD
2025-01-01 open Liabilities:Payroll:Local USD

2025-01-01 open Equity:ContributedCapital USD
2025-01-01 open Equity:Distributions USD
2025-01-01 open Equity:RetainedEarnings USD
2025-01-01 open Equity:OpeningBalances USD

2025-01-01 open Income:Sales USD
2025-01-01 open Income:Other USD

2025-01-01 open Expenses:COGS USD
2025-01-01 open Expenses:Payroll:Wages USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:FICA USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:Medicare USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:FUTA USD
2025-01-01 open Expenses:Payroll:EmployerTaxes:State USD
2025-01-01 open Expenses:Benefits:HealthInsurance USD
2025-01-01 open Expenses:Benefits:HSA USD
2025-01-01 open Expenses:Benefits:Retirement:Match USD
2025-01-01 open Expenses:Taxes:State:S‑Corp USD ; e.g., CA 1.5% entity‑level tax
2025-01-01 open Expenses:Taxes:State:Franchise USD ; e.g., CA $800 minimum franchise tax
2025-01-01 open Expenses:Professional:Payroll USD
2025-01-01 open Expenses:Professional:Accounting USD
2025-01-01 open Expenses:Professional:Legal USD
2025-01-01 open Expenses:BankFees USD
2025-01-01 open Expenses:Software USD
2025-01-01 open Expenses:Office USD
2025-01-01 open Expenses:Meals USD
2025-01-01 open Expenses:Travel USD
2025-01-01 open Expenses:Insurance:GeneralLiability USD

; === Example: Owner capitalization =================================================
2025-01-02 * "Owner" "Initial capital contribution"
Assets:Bank:Checking 25,000.00 USD
Equity:ContributedCapital -25,000.00 USD

; === Example: Customer payment =====================================================
2025-01-15 * "Stripe" "January subscription receipts"
Assets:Bank:Checking 12,000.00 USD
Income:Sales -12,000.00 USD

; === Example: Monthly payroll (single shareholder‑employee) ========================
; Numbers chosen to balance perfectly. Adapt FIT/State numbers to your reality.
; Gross wages: 8,333.33 | Employee FIT: 1,200.00 | State Withholding: 300.00
; Employee FICA (6.2%): 516.67 | Employee Medicare (1.45%): 120.83
; Employer FICA: 516.67 | Employer Medicare: 120.83
; Net pay: 6,195.83
2025-01-31 * "Gusto" "Jan payroll — shareholder‑employee"
Expenses:Payroll:Wages 8,333.33 USD
Expenses:Payroll:EmployerTaxes:FICA 516.67 USD
Expenses:Payroll:EmployerTaxes:Medicare 120.83 USD
Liabilities:Payroll:Federal:FIT -1,200.00 USD
Liabilities:Payroll:Federal:FICA -1,033.34 USD ; employee + employer
Liabilities:Payroll:Federal:Medicare -241.66 USD ; employee + employer
Liabilities:Payroll:State:Withholding -300.00 USD
Assets:Bank:Checking -6,195.83 USD

; === Example: Payroll tax deposits (EFTPS & State) =================================
2025-02-15 * "EFTPS" "Federal payroll deposit (FIT, FICA, Medicare)"
Liabilities:Payroll:Federal:FIT 1,200.00 USD
Liabilities:Payroll:Federal:FICA 1,033.34 USD
Liabilities:Payroll:Federal:Medicare 241.66 USD
Assets:Bank:Checking -2,475.00 USD

2025-02-16 * "STATE DOR" "State payroll withholding"
Liabilities:Payroll:State:Withholding 300.00 USD
Assets:Bank:Checking -300.00 USD

; === Example: Health insurance for >2% shareholder =================================
; Coordinate with payroll so the annual premium total is included in W‑2 Box 1.
; The premium itself is deductible here; do NOT withhold SS/Medicare on it when handled properly.
2025-02-01 * "BlueCross" "Shareholder health insurance (W‑2 inclusion handled by payroll)"
Expenses:Benefits:HealthInsurance 600.00 USD ; w2: "true"
Assets:Bank:Checking -600.00 USD

; === Example: Owner distribution (not wages) =======================================
2025-03-31 * "Owner Distribution" "Q1 distribution"
Equity:Distributions 20,000.00 USD
Assets:Bank:Checking -20,000.00 USD

; === State examples (delete/edit if not applicable) =================================
; California minimum franchise tax (not always first year; check rules)
2025-04-15 * "California FTB" "Annual franchise tax"
Expenses:Taxes:State:Franchise 800.00 USD
Assets:Bank:Checking -800.00 USD

; California S‑Corp 1.5% entity‑level tax (example estimate payment)
2025-06-15 * "California FTB" "S‑Corp tax estimate"
Expenses:Taxes:State:S‑Corp 1,500.00 USD
Assets:Bank:Checking -1,500.00 USD

; New York separate S election (CT‑6) has no direct ledger impact; placeholder note.
2025-01-05 note Equity:RetainedEarnings "NY S‑election (CT‑6) filed — bookkeeping note only (no entry)"

; === Basis tracking (optional — off‑book memo) =====================================
2025-12-31 note Equity:RetainedEarnings "Basis rollforward: +Capital 25,000 +Income 60,000 −Distributions 20,000 = End basis 65,000 (reconcile to K‑1)"

; === Import hints (CSV from Gusto/ADP) =============================================
; - For Gusto payroll register CSVs, map columns:
; Gross Pay -> Expenses:Payroll:Wages
; Employee FIT/FICA/Medicare -> Liabilities:Payroll:Federal:FIT/FICA/Medicare (negative)
; State Withholding -> Liabilities:Payroll:State:Withholding (negative)
; Employer FICA/Medicare/FUTA/SUTA -> Expenses:Payroll:EmployerTaxes:* (positive) AND
; if your CSV lists employer taxes as amounts owed, mirror them as Liabilities:* (negative),
; then clear with your EFTPS/state payments.
; Net Pay -> Assets:Bank:Checking (negative, matches pay date)
; - Health insurance paid by company:
; Vendor payment -> Expenses:Benefits:HealthInsurance (positive) / Bank (negative);
; ensure payroll includes the annual premium in W‑2 Box 1 for >2% shareholder.
;
; Tips:
; - Keep distributions out of payroll accounts.
; - Use tags like #payroll #distribution to filter in Fava.
; - Consider separate bank subaccounts for tax set‑asides (federal/state).