Skip to main content

86 posts tagged with "beancount"

View all tags

Beancount-Friendly Business Banking Checklist (2025)

· 5 min read
Mike Thrift
Mike Thrift
Marketing Manager

Picking a business bank account for a plain-text ledger requires more than chasing headline APYs or flashy card perks. The priority is objective: consistent data feeds, predictable controls, and safety policies that integrate cleanly with a scripted bookkeeping workflow.

This checklist turns the conversation toward verifiable features—what you can export, how fast funds move, and which controls reduce manual review. Use it to short-list providers before you invest time in onboarding or building importers.


1. Data Exports: The Non-Negotiable

A bank only becomes "Beancount-friendly" when it delivers tidy, machine-readable statements.

RequirementWhy it mattersWhat to confirm
Stable transaction ID (FITID or equivalent)Enables deterministic deduplication inside Beancount import scriptsDownload two CSV/OFX files a month apart and compare IDs
Posted date, payee, memo, amount, currencyAllows accurate postings without guessworkReview sample exports, not marketing PDFs
Unchanging headers and file structurePrevents importer regressions after silent format changesCapture versioned samples in your repository
Access to statement PDFs and check imagesSupports attachments in your document workflowVerify retention windows and per-image fees

Resources: Beancount Importing Guide and the OFX Banking Specification.


2. Safety and Deposit Coverage

Regulatory coverage determines how much cash you can hold without redesigning your account map.

  • FDIC-insured banks protect up to $250,000 per depositor, per insured bank, per ownership category. Multi-bank sweep programs can extend coverage, but request the current list of program banks and how statements document pass-through insurance. Source: FDIC.
  • NCUA-insured credit unions offer the same $250,000 limit through the National Credit Union Share Insurance Fund. Source: NCUA.

Always document the coverage path in your account notes so your internal controls explain why balances exceed base limits when they do.


3. Payment Rails, Speed, and Limits

Payment capabilities dictate whether you can automate vendor, payroll, or customer refunds directly from scripts.

  • Same Day ACH now allows up to $1 million per payment across three daily settlement windows—ideal for urgent payouts that do not warrant a wire. Source: Nacha.
  • RTP® (Real-Time Payments) from The Clearing House clears 24/7 with final settlement and a $10 million transaction limit as of 2025, subject to bank availability. Source: The Clearing House.
  • FedNow® Service participation is growing; verify whether your institution enables both sending and receiving instant payments. Source: Federal Reserve Services.

Ask for outbound and inbound limits, approval workflows, and whether APIs expose these rails before you design automation around them.


4. Operational Controls and Automation

Operational depth separates a usable account from a scalable one.

  • Multi-user roles and approvals reduce the chance of accidental or unauthorized transactions.
  • Sub-accounts or envelopes (often up to 20 per provider) mirror budgeting categories directly in your chart of accounts. Example capabilities to evaluate: Bluevine Sub-Accounts and Relay account architecture.
  • APIs or webhooks accelerate reconciliation and allow near real-time dashboards. Mercury, for example, publishes a payments and data API that can streamline ingestion even if you still archive CSV exports.

Document which controls are available at launch versus those that require higher tiers so you can plan change management.


5. The Beancount Banking Scorecard

Apply a weighted rubric to compare candidates objectively. Give extra weight to data exports and payment capabilities because they drive automation effort.

Dimension0–23–45 (Ideal)
Data exportPDF only or ad-hoc CSVCSV with inconsistent headersStable CSV/OFX with durable IDs
CoverageNo statementsMonthly PDFs onlyPDFs plus transaction images
PaymentsACH only, slow postingACH plus wiresSame Day ACH + instant rails
ControlsSingle loginMulti-user, basic rolesGranular permissions and approvals
Sub-accountsNone2–510–20+ with dedicated details
API/integrationsNoneBasic accounting syncPublic API, webhooks, sandbox
Fees/limitsOpaque disclosuresTransparent but restrictiveClear, generous limits and fair FX
SupportEmail onlyEmail + chat/phoneDedicated business support, documented SLAs

Track scores in your vendor evaluation notes so onboarding decisions stay evidence-based.


6. Diligence Steps Before You Sign Up

  1. Request real export samples from existing customers or from your own trial account.
  2. Test importer scripts with those samples, including deduplication scenarios.
  3. Confirm statement retention and how to retrieve historical data if you switch providers.
  4. Review funds availability policies for mobile check deposits, cash deposits, and incoming wires.
  5. Capture pricing and limit disclosures (ACH caps, international wire fees) in your internal wiki for future audits.

7. Day-One Beancount Setup

  • Store raw exports in a versioned documents/bank/YYYY-MM/ folder alongside generated Beancount entries.
  • Add the bank's transaction identifier to each posting as metadata; if none exists, hash the date, amount, and payee.
  • Use Fava or another review interface to confirm payee rules before committing entries.
  • Schedule monthly reminders to download statements and reconcile balances with balance directives.

This disciplined workflow keeps your ledger reproducible and audit-ready even as payment volume increases.


Final Takeaway

Choosing a business bank account in 2025 is a data-management decision. Prioritize providers that treat exports, instant payments, and role-based controls as first-class features. When those fundamentals are in place, your Beancount automation stays reliable—and your finance team spends more time analyzing results than cleaning feeds.

User Experience and Feedback on LLM-Assisted Plain Text Accounting

· 5 min read
Mike Thrift
Mike Thrift
Marketing Manager

Plain text accounting (PTA) has long been the secret weapon of tech-savvy finance nerds. Using simple text files and tools like Beancount or Ledger, you get unparalleled control, transparency, and ownership over your financial data. But let's be honest—it's always had a reputation for being, well, a pain. The learning curve is steep, the data entry is tedious, and one misplaced comma can send you on a frustrating debugging quest.

But what if you could have the power of PTA without the pain? Enter Large Language Models (LLMs). AI is starting to creep into every corner of the PTA workflow, promising to automate the boring stuff and make this powerful system accessible to everyone. Based on a deep dive into user feedback, let's explore how AI is revolutionizing plain text accounting—and whether it's living up to the hype.


The Old Way: The Manual Grind of PTA

For years, the PTA experience has been defined by a few common hurdles:

  • The Wall of Intimidation: Newcomers often feel overwhelmed. As one user admitted, "I was too intimidated for years... but it seemed useful and would eventually pay off." Between learning double-entry bookkeeping and navigating command-line tools, getting started is tough.
  • The "Edit-Compile-Debug" Cycle: Unlike GUI software that screams at you the second you make a mistake, PTA errors often hide until you run a check. This slow feedback loop feels like debugging code, turning a simple data entry task into a chore.
  • The Import Nightmare: Getting your data into the system is a major bottleneck. It often involves manually downloading CSV files from multiple banks, cleaning them up, and running custom scripts—a brittle and time-consuming process. One user spent "about 4 hours catching up on importing the past ~8 months" of transactions, even with some automation.

Enter the AI Assistant: How LLMs Are Slashing the Workload

This is where AI is changing the game, acting as a powerful assistant to handle the most tedious parts of PTA.

Automating the Grunt Work: Categorization and Imports

This is the low-hanging fruit for AI. Instead of writing complex rules to figure out what "STARBUCKS #12345" is, you can just ask an LLM.

Users are reporting great success feeding transaction descriptions to models like GPT-4 and getting back perfect categorizations, like Expenses:Food:Coffee. Tools like Beanborg are even integrating ChatGPT to intelligently suggest categories when its own rules fail.

Even better, LLMs are becoming on-the-fly data importers. Instead of writing a Python script to parse a bank's messy CSV file, you can now paste the data into a chat window and ask the AI to convert it to Beancount format. It's not always 100% perfect, but it turns hours of coding into a few minutes of prompt engineering.

Making PTA Less Scary: Onboarding and Error Handling

That initial wall of intimidation? LLMs are helping users climb it. One new user described using GPT-4 as a "hand-holding tutor" to walk them through setting up their first ledger file. The AI explained concepts, generated example entries, and helped them build the confidence to go it alone.

AI is also providing the real-time feedback that PTA has always lacked. Developers are building editor extensions that use LLMs to check your syntax as you type, highlighting imbalances or errors with the familiar red squiggly line. Imagine an AI that not only flags an error but also explains why it's wrong and suggests a fix.

Chatting With Your Finances

Perhaps the most exciting development is the rise of conversational analysis. Instead of writing a specific command-line query, you can now just ask your ledger questions in plain English.

Users are experimenting with exporting their data and using tools like Claude to ask things like, "How much did I spend on groceries in March compared to April?" The AI can analyze the data, spot trends, and even offer insights. In the business world, companies like Puzzle.io offer Slack bots that let executives query company financials in real-time. This kind of natural language interface is a game-changer for making financial data accessible.


The Catch: Don't Fire Your Brain Just Yet

While the possibilities are exciting, users are right to be cautious. Two major concerns consistently come up: privacy and trust.

  • Privacy is Paramount: Your financial history is incredibly sensitive. As one user put it, "I'm worried that I'm feeding some API with my financial history." Sending your data to a third-party cloud service like OpenAI is a non-starter for many. The solution? A growing number of users are running open-source LLMs locally on their own machines, ensuring their data never leaves their control.

  • Trust, but Verify: LLMs can be confidently wrong. They sometimes "hallucinate" account names or make small math errors that unbalance an entry. The community consensus is clear: use AI as an assistant, not an autonomous accountant. Always run your ledger through a final check (bean-check) and keep a human in the loop for final approval.


The Future is Augmented, Not Replaced

LLM assistance is rapidly transforming plain text accounting from a niche, expert-only system into a powerful tool that's becoming more accessible every day. The AI is fantastic at handling the repetitive, soul-crushing parts of bookkeeping—data entry, categorization, and parsing.

This frees up humans to do what they do best: review, interpret, and make decisions. The future isn't about letting a robot manage your money. It's about a partnership where the AI does the heavy lifting, giving you the clean, accurate data you need to truly understand your financial story.

As one user aptly put it, "Let the robots do the repetitive bookkeeping, so humans can focus on understanding and decision-making." With that balanced approach, the once-painful world of plain text accounting is looking brighter than ever.

Beyond Pass-Through: The Complete S-Corp Tax Guide for Beancount Users (2025)

· 7 min read
Mike Thrift
Mike Thrift
Marketing Manager

You formed an S-corp to keep your business lean and tax-efficient. But while the "pass-through" concept sounds simple, the reality involves payroll taxes, potential entity-level charges, and crucial state-by-state differences.

Here’s how the taxes actually work for an S-corp in 2025—and how to keep a clean, audit-proof record in Beancount.

2025-07-26-s-corp-tax-guide-for-beancount-users


What Gets Taxed (and Where)

The core of the S-corp structure is how it handles profit. It's a three-part system: pass-through income, entity-level taxes, and payroll taxes.

  • Pass-Through at the Federal Level: An S-corp generally pays no federal income tax on its ordinary business profit. Instead, that profit (along with other tax items like credits and deductions) flows through to the shareholders via a Schedule K-1. Shareholders report this income on their personal tax returns, whether or not they actually took the cash out of the business. Crucially, this K-1 profit is not subject to self-employment tax.
  • But... Entity-Level Taxes Can Apply: The "no corporate tax" rule isn't absolute. In specific cases, an S-corp may owe tax directly. The most common triggers are the built-in gains (BIG) tax (for recent C-corp conversions) and the excess net passive income tax.
  • Payroll Taxes Are Real: This is the most important rule for shareholder-employees. If you work in your business, you must be paid reasonable compensation as W-2 wages before you take any tax-favored distributions. These wages are subject to FICA (Social Security & Medicare) and income tax withholding, just like any other employee's pay.

Payroll, at a Glance (2025) payroll

For any shareholder-employee, you'll be running payroll and filing standard payroll tax forms, including quarterly Form 941 (for income tax withholding and FICA) and annual Form 940 (for federal unemployment tax, or FUTA).

The key 2025 rates are:

  • Social Security (OASDI): The wage base is $176,100. The tax rate is 6.2% for the employee and 6.2% for the employer on wages up to this cap.
  • Medicare: There is no wage cap. The rate is 1.45% for the employee and 1.45% for the employer on all wages.
  • Additional Medicare Tax: A 0.9% tax is withheld from an employee's wages that exceed $200,000 in a year. There is no employer match for this portion.

Entity-Level Taxes You Might See

While less common, you must be aware of taxes the S-corp itself might owe.

  • Built-in Gains (BIG) Tax: If you converted your business from a C-corp to an S-corp, you face a 5-year recognition period. If you sell appreciated assets that the company held during its C-corp days within this window, the S-corp itself will owe a corporate-rate tax on those gains. This is calculated on Schedule D of Form 1120-S.
  • Excess Net Passive Income Tax: This applies if your S-corp has accumulated earnings & profits (AE&P) from a prior life as a C-corp and its passive income (like rents, royalties, and interest) exceeds 25% of its gross receipts.
  • Quarterly Estimates for These Taxes: If you expect the total of BIG tax, passive income tax, and certain other recapture taxes to be $500 or more, the S-corp must make quarterly estimated payments. For 2025, the calendar-year due dates are April 15, June 16, September 15, and December 15.

State & Local Gotchas 🗺️

Never assume federal rules apply at the state or city level. Tax treatment varies widely.

  • California: S-corps must pay an $800 minimum franchise tax each year, plus a 1.5% tax on net income.
  • New York City: NYC does not recognize the S-corp election. A federal S-corp is generally subject to the full NYC General Corporation Tax.
  • Elective Pass-Through Entity (PTE) Taxes: As a workaround to the federal $10,000 SALT deduction cap, many states now allow S-corps to elect to pay state income tax at the entity level. The rules are complex and shifting—talk to your CPA before making a PTE election.

What the Owners Pay

As a shareholder, your personal tax picture is directly linked to the S-corp's performance.

  • K-1 Income on Your 1040: You will report the income, losses, deductions, and credits passed through to you on your Schedule K-1 on your personal Form 1040.
  • Quarterly Estimated Taxes: Since your K-1 income doesn't have taxes withheld, you will likely need to make personal quarterly estimated tax payments to the IRS using Form 1040-ES to avoid underpayment penalties.
  • The QBI Deduction (Section 199A): Your pass-through income may qualify for the valuable Qualified Business Income (QBI) deduction, which can be up to 20% of your business income. At higher income levels, this deduction can be limited by the amount of W-2 wages the S-corp pays—making your "reasonable compensation" figure even more important.

Baseline Filing & Forms

At a minimum, your annual compliance will include:

  • Form 1120-S: The S-corporation income tax return.
  • Schedule K-1: For each shareholder.
  • Payroll Forms: Quarterly 941s, annual 940, and W-2s/W-3s for employees.
  • Form 1099-NEC: For payments of $600 or more to most independent contractors.

Beancount: Map It So You Never Wonder “Where Did That Go?”

A clear chart of accounts is essential for tracking these moving parts.

Starter Accounts

Assets:Bank:Operating
Assets:PrepaidTax:Federal ; For S-corp level estimated payments
Expenses:Payroll:Wages
Expenses:Payroll:Employer:SocialSecurity
Expenses:Payroll:Employer:Medicare
Expenses:Payroll:Employer:FUTA
Expenses:Tax:Federal:S-Corp ; For BIG/passive income tax expense
Liabilities:Payroll:Withholding:{Federal,SocialSecurity,Medicare}
Equity:Distributions

Transaction Examples

Run Payroll (Company side + withholdings)

2025-02-28 * "Payroll - February"
Assets:Bank:Operating -10350.00 USD
Expenses:Payroll:Wages 12500.00 USD
Expenses:Payroll:Employer:SocialSecurity 775.00 USD
Expenses:Payroll:Employer:Medicare 181.25 USD
Liabilities:Payroll:Withholding:Federal -3000.00 USD
Liabilities:Payroll:Withholding:SocialSecurity -775.00 USD
Liabilities:Payroll:Withholding:Medicare -181.25 USD

Owner Distribution (Non-wage)

2025-03-10 * "Shareholder distribution"
Assets:Bank:Operating -5000.00 USD
Equity:Distributions 5000.00 USD

Corporate-Level Estimated Tax (If applicable)

2025-04-15 * "1120-S entity-level estimate (BIG/passive tax)"
Assets:Bank:Operating -1200.00 USD
Assets:PrepaidTax:Federal 1200.00 USD

Marking Key Filing Dates

2026-03-15 note "E-filed 2025 Form 1120-S; furnished K-1s to all shareholders."

Sanity Checks (bean-query)

Use queries to ensure your records are sound.

Wages vs. Distributions YTD (Reasonable Comp Reality Check)

SELECT account, SUM(position)
WHERE (account ~ "Expenses:Payroll:Wages" OR account ~ "Equity:Distributions")
AND year = 2025
GROUP BY account;

Did We Record the K-1 Handoff?

SELECT date, narration WHERE narration ~ "K-1";

Practical Tips (So the IRS Doesn’t Call) ✅

  1. Document "Reasonable Compensation." Keep a simple memo with your job duties, time allocation, and links to market salary data. Pay this amount via formal W-2 payroll.
  2. Separate Wages and Distributions Cleanly. Never mix them. Your Beancount ledger should make the distinction obvious.
  3. Watch State Rules. Be aware of minimum taxes (like in CA) or S-corp non-recognition (like in NYC).
  4. Revisit Estimates. If your income changes significantly mid-year, adjust both your personal 1040-ES and any S-corp level estimated payments.

This guide provides general information, not tax advice. Every business situation is different. Always consult with a qualified CPA for guidance specific to your circumstances.

S-Corp Tax Filing Deadlines (2025): A Crisp Guide for Beancount Users

· 5 min read
Mike Thrift
Mike Thrift
Marketing Manager

Filing taxes for your S-corporation involves a few key deadlines that you can't afford to miss. Staying on top of them prevents costly penalties and keeps your financial records clean. Here’s the short, accountant-friendly version of what to file, when it’s due, what happens if you’re late—and how to keep it all tidy in your Beancount ledger.


2025-07-25-s-corp-tax-filing-deadlines-2025

The Big Dates (for Calendar-Year S-Corps) 🗓️

For most S-corps operating on a standard calendar year, there are two primary dates to remember for your annual tax return, Form 1120-S.

  • Return Due Date: The deadline to file is Monday, March 17, 2025. The official due date is always the 15th day of the 3rd month after the tax year ends (March 15), but because that date falls on a Saturday in 2025, the IRS "next business day" rule pushes the deadline to Monday.
  • If You Need More Time: You can get an automatic 6-month extension by filing Form 7004 on or before the original March 17 deadline. This moves your filing due date to September 15, 2025. Remember, this is an extension to file, not an extension to pay any taxes owed.

Note for other filers: If you use a fiscal year, your return is due by the 15th day of the 3rd month after your tax year concludes. If your S-corp was dissolved, the final return is generally due by the 15th day of the 3rd month after the dissolution date.


What You Must Send to Shareholders

A core responsibility of an S-corp is to report each shareholder's portion of the company's income, deductions, and credits.

You must furnish a Schedule K-1 to every shareholder by the same day your Form 1120-S is due. This applies whether you file by the original deadline or an extended one. The K-1 provides the information shareholders need to file their personal tax returns.


Penalties You Actually Care About

The IRS imposes significant penalties for failing to file on time, so it pays to be punctual.

  • Late 1120-S: The penalty is 245permonth(orpartofamonth)foreachshareholder,forupto12months.Ifyour2024return(filedin2025)is60ormoredayslate,theminimumpenaltyincreasestothesmallerofthetaxdueor245 per month (or part of a month) for each shareholder**, for up to 12 months. If your 2024 return (filed in 2025) is **60 or more days late**, the minimum penalty increases to the smaller of the tax due or **510.
  • Late/Incorrect K-1s: Failing to furnish correct K-1s on time carries a penalty of $330 per schedule. If the failure is due to intentional disregard, the penalty can double or be 10% of the amounts required to be reported, whichever is greater.
  • Failure to Pay: Even if you file an extension with Form 7004, interest accrues on any tax due from the original March deadline. While most S-corps don't owe federal income tax, some can face corporate-level taxes in special situations.

If you get hit with a penalty, don't just pay it immediately. Check the IRS’s options for administrative penalty relief, such as first-time abatement or showing you had reasonable cause for the delay.


Corporate-Level Estimated Taxes (Edge Cases)

While S-corps are pass-through entities, they can sometimes owe entity-level taxes on things like built-in gains or excess net passive income. If your S-corp is expected to owe more than $500 for these taxes, you must make quarterly estimated tax payments.

For the 2025 calendar year, these installments are due on:

  • April 15, 2025
  • June 16, 2025 (June 15 is a Sunday)
  • September 15, 2025
  • December 15, 2025

Payments should be made through the Electronic Federal Tax Payment System (EFTPS).


Beancount Setup: Keep Filings and Payments Obvious

Use your ledger to create a clear audit trail of your tax compliance activities.

Starter Accounts

Assets:Bank:Operating
Assets:PrepaidTax:Federal ; For extension/estimate payments
Expenses:Tax:Federal:S-Corp ; For corporate-level tax owed
Liabilities:Tax:Federal:Payable
Equity:Distributions
Income:Sales

Mark the Filing and K-1 Handoff

Use note transactions to timestamp key compliance actions.

2025-03-10 note "Prepared 2024 Form 1120-S; K-1s ready for distribution."
2025-03-17 note "E-filed 2024 Form 1120-S; furnished all shareholder K-1s."

Recording an Extension

If you file for an extension without a payment (the common case):

2025-03-17 note "Filed Form 7004 to extend 2024 1120-S to 2025-09-15."

If you make an estimated payment with your extension (rare for S-corps):

2025-03-17 * "2024 1120-S extension payment (estimate)"
Assets:Bank:Operating -2000 USD
Assets:PrepaidTax:Federal 2000 USD

Recording a Final Tax Payment

If you end up owing corporate-level tax when you file:

2025-09-15 * "Settle 2024 S-corp tax due with return"
Assets:PrepaidTax:Federal -2000 USD
Expenses:Tax:Federal:S-Corp 2000 USD

Useful bean-query Checks

Verify your actions with simple queries.

  • Confirm you recorded the K-1 handoff:

    SELECT date, narration WHERE narration ~ "K-1s";
  • See all federal tax cash movements this year:

    SELECT SUM(position) WHERE account ~ "Tax:Federal|PrepaidTax:Federal" AND year = 2025;

Quick Checklist ✅

  • Put March 17, 2025, on your calendar to file Form 1120-S, or file Form 7004 by that date to get an extension.
  • Furnish Schedule K-1s to all shareholders by the same day you file your return (original or extended).
  • If applicable, schedule quarterly estimated payments for any corporate-level taxes.
  • Take deadlines seriously to avoid penalties, but seek penalty relief if something unavoidable slips through.

This guide provides general information and is not a substitute for professional tax advice. Consult with a qualified CPA to address your specific financial situation.

S-Corp “Reasonable Salary”: A Practical Guide for Beancount Users (2025)

· 6 min read
Mike Thrift
Mike Thrift
Marketing Manager

If you run an S-corp and work in it, the IRS expects you to take W-2 wages before you take owner distributions. The key phrase that governs this entire process is “reasonable compensation.” Getting this wrong can lead to costly tax adjustments and penalties.

Here’s what “reasonable” means in practice—and how to track it cleanly and defensibly in your Beancount ledger.

2025-07-24-s-corp-reasonable-salary


What the IRS Actually Requires

The rules are straightforward: shareholder-employees must be paid reasonable compensation for their services before receiving non-wage distributions. Paying yourself too little (or nothing at all) while taking large distributions is a major red flag. The IRS can, and often does, reclassify those distributions as wages, hitting you with back payroll taxes and penalties.

This isn't a new or obscure rule. The IRS has emphasized it for years, notably in its Fact Sheet FS-2008-25, which clarifies that corporate officers who perform more than minor services are to be treated as employees for FICA tax purposes. On your annual Form 1120-S, officer pay is reported on Line 7 (“Compensation of Officers”), and the instructions explicitly state that these amounts are considered wages to the extent they are for reasonable compensation.

Courts consistently back this up. In the landmark case Watson v. United States, a CPA paid himself a salary of only $24,000 while taking significant distributions from his profitable firm. The court sided with the IRS, recharacterizing most of those distributions as wages subject to employment taxes.


How to Estimate a Reasonable Salary (Simple, Defensible)

So, how do you determine a "reasonable" number? Think of it this way: what would you have to pay someone else to do the job you actually do, in your market, with your experience? The IRS views this as a valuation problem, and there are several common-sense ways to arrive at a defensible figure.

Here’s a pragmatic workflow:

  1. Start with Market Comps: This is your anchor. Use resources like Glassdoor, the Bureau of Labor Statistics (BLS), or salary ranges from recruiters to find data for comparable roles in your geographic area.
  2. Factor in Your Role & Time Split: Most small business owners wear multiple hats. Acknowledge this by weighting your salary based on the time you spend on different functions. For example, you might be 60% software engineer and 40% product manager.
  3. Perform an Ability-to-Pay Sanity Check: Your company's financial health matters. A business with losses may not be able to support a top-quartile salary. However, reporting zero wages while you perform substantial services is rarely justifiable.
  4. Document Everything: Save your sources, notes, and calculations. This documentation is your first line of defense in an audit. (More on this below.)

Quick Worksheet (Illustrative)

Let's walk through an example:

  • Market Pay: You find that the local median salary for a Senior Engineer is 140,000andforaProductManageris140,000** and for a Product Manager is **120,000.
  • Your Time Split: You estimate your time is 60% engineering and 40% product management.
  • Weighted Base Salary: (0.60times(0.60 \\times 140,000) + (0.40 \times 120,000)=120,000) = 84,000 + 48,000=48,000 = 132,000$.
  • Final Decision: Based on your company's current margins, you decide on a salary of $125,000 and plan to revisit it annually.

For context, the 2025 payroll tax rates are 6.2% for Social Security on wages up to $176,100 and 1.45% for Medicare on all wages. Both the employee and employer pay these amounts.


Common Pitfalls to Avoid

Steer clear of these common mistakes that can attract IRS scrutiny:

  • Taking Distributions Before Wages: If you provided services to your S-corp during the year, you must run payroll for your reasonable wages before taking any distributions.
  • Setting a "Token" Salary: A nominal salary—like $10,000 for a full-time officer of a highly profitable company—is a near-certain trigger for reclassification, as seen in the Watson case.
  • Mishandling >2% Shareholder Health Insurance: Premiums paid for health insurance for shareholders who own more than 2% of the company must be included in their W-2 wages. These amounts are subject to income tax but are generally exempt from FICA taxes. Coordinate with your CPA or payroll provider to ensure this is handled correctly.

A Clean Beancount Setup

Your ledger is the perfect tool for maintaining a clear line between wages and distributions.

Minimal Chart of Accounts

Assets:Bank:Operating
Expenses:Payroll:Wages
Expenses:Payroll:Employer:SocialSecurity
Expenses:Payroll:Employer:Medicare
Liabilities:Payroll:Withholding:Federal
Liabilities:Payroll:Withholding:SocialSecurity
Liabilities:Payroll:Withholding:Medicare
Equity:Distributions

Example Postings

This example shows a monthly payroll run for a 150,000annualsalary(150,000 annual salary (12,500/month), followed by a separate owner distribution. Notice how wages are recorded as a business expense, while distributions are a reduction of equity.

; Run monthly payroll (company side + withholdings)
2025-02-28 * "Payroll - February"
Assets:Bank:Operating -10350.00 USD
Expenses:Payroll:Wages 12500.00 USD
Expenses:Payroll:Employer:SocialSecurity 775.00 USD
Expenses:Payroll:Employer:Medicare 181.25 USD
Liabilities:Payroll:Withholding:Federal -3000.00 USD
Liabilities:Payroll:Withholding:SocialSecurity -775.00 USD
Liabilities:Payroll:Withholding:Medicare -181.25 USD

; Owner distribution (non-wage)
2025-03-10 * "Shareholder distribution"
Assets:Bank:Operating -5000.00 USD
Equity:Distributions 5000.00 USD

Useful Checks with bean-query

Periodically, you should compare your year-to-date wages against distributions. This query makes it easy:

; Compare wages vs. distributions YTD
SELECT account, SUM(position)
WHERE (account ~ "Expenses:Payroll:Wages" OR account ~ "Equity:Distributions")
AND year = 2025
GROUP BY account;

Paper Trail (Protect Yourself)

If the IRS ever asks, you'll want your reasoning documented.

  • Create a short compensation memo each year. Detail your roles, time split, links to market data you used, and the final salary you chose.
  • Store this memo in your Beancount directory, for example: docs/comp/YYYY/comp-memo.md.
  • Keep copies of all official payroll reports and your annual W-2/W-3 filings.
  • Record your decision directly in your ledger with a note entry.
2025-01-15 note "Set 2025 officer salary at $125,000 based on market comps + role split. See docs/comp/2025/comp-memo.md"

FAQ (Fast)

  • Can my salary be $0 if my company lost money? 📉 If you performed significant services, the IRS still expects you to be paid a reasonable wage for that work. If cash flow is a serious issue, get professional advice on how to proceed.
  • How often should I revisit my salary? 🗓️ At least annually. You should also reassess it anytime your role, responsibilities, or the market changes significantly.
  • What if I’m the only person in the company? 🙋 Even if you're a solo operator, you are still an employee of your S-corp. You must run formal payroll if you work in the business.

This guide provides general information and is not a substitute for professional tax advice. Always consult with a qualified CPA to address your specific financial situation.

S-Corp Election Deadline (2025): A Crisp Guide for Beancount Users

· 6 min read
Mike Thrift
Mike Thrift
Marketing Manager

Thinking about electing S-corp tax status? Great—just don’t miss the clock. The S-corp election can be a powerful tax-saving tool for small business owners, but its deadlines are strict and non-negotiable. Missing one can complicate your tax picture significantly.

Here’s the practical, accountant-approved version of what you need to know, plus how to track it all cleanly in your Beancount ledger.

2025-07-23-s-corp-election-deadline-2025


The Deadline, In One Bite

The most critical date is for filing Form 2553, Election by a Small Business Corporation. This is the form that tells the IRS you want to be taxed as an S-corp.

  • For existing, calendar-year businesses: You must file Form 2553 by the 15th day of the 3rd month of the tax year you want the election to take effect. For a 2025 election (effective January 1, 2025), the deadline is Saturday, March 15, 2025. Because this falls on a weekend, the IRS weekend/holiday rule pushes the functional deadline to the next business day: Monday, March 17, 2025.
  • For new businesses: If this is your business's first tax year, you have “2 months and 15 days” from the start of your tax year to file. The exact date depends on when your tax year officially begins. For example, if your business starts on January 7, your deadline would be March 21.

Tip: If your business operates on a fiscal year rather than a calendar year, the same logic applies. Calculate your deadline as the 15th day of the 3rd month from your fiscal year's start date.


What If You Missed It?

Don't panic. The IRS understands that business owners can miss deadlines. If you intended to elect S-corp status but failed to file on time, you may be eligible for late-election relief.

The IRS provides a streamlined procedure, Revenue Procedure 2013-30, which allows many small businesses to request retroactive S-corp status. You generally qualify if you can show you had reasonable cause for filing late and meet the procedure's other requirements.


Other Key Dates Tied to S-Corps

Once you're an S-corp, the deadlines don't stop. Here are two other important dates to mark on your calendar:

  • 1120-S Filing (The S-corp Tax Return): Your annual S-corp tax return, Form 1120-S, is due by the 15th day of the 3rd month after your tax year ends. For most businesses (calendar-year filers), this is the same as the election deadline: March 17, 2025.
  • Need More Time? If you can't file your 1120-S on time, you can file Form 7004 for an automatic 6-month extension. This extends the deadline to file your return to September 15. Crucially, this is an extension to file, not an extension to pay. Any taxes you owe are still due by the original March deadline.

Who Should Even Elect S-Corp?

S-corp status isn't for everyone. Its primary benefit is reducing self-employment taxes. It achieves this by allowing you to split your business's profit into two categories:

  1. Reasonable W-2 Wages: This is a salary you pay yourself, which is subject to standard payroll taxes (Social Security and Medicare).
  2. Shareholder Distributions: This is the remaining profit you take from the business, which is not subject to self-employment tax.

However, this advantage comes with added complexity and costs. S-corps require running formal payroll, adhering to "reasonable compensation" standards set by the IRS, and handling more compliance paperwork, like filing Forms 1120-S and issuing K-1s to shareholders.

Before you make the jump, run the math. A CPA can help you model the breakeven point where the tax savings outweigh the additional administrative costs.


Make the Deadline Easier—with Beancount

A well-maintained ledger is your best friend for S-corp compliance. You can use Beancount to stay on top of deadlines and clearly distinguish between wages and distributions.

Minimal Chart of Accounts (Starter)

Here's a basic chart of accounts to get you started:

  • Assets:Bank:Checking
  • Income:Sales
  • Expenses:Payroll:Wages
  • Expenses:Payroll:EmployerTaxes
  • Equity:DistributionsFor shareholder draws
  • Equity:Opening-Balances

Typical Postings

Your Beancount entries will create a clear separation between payroll expenses and equity distributions.

; W-2 payroll is a business expense
2025-02-28 * "Run payroll - February"
Assets:Bank:Checking -6200 USD
Expenses:Payroll:Wages 5000 USD
Expenses:Payroll:EmployerTaxes 1200 USD
; entity: S-Corp period: 2025-02

; Shareholder distribution is a draw on equity, not an expense
2025-03-10 * "Shareholder distribution"
Assets:Bank:Checking -3000 USD
Equity:Distributions 3000 USD
; entity: S-Corp period: 2025-Q1

Useful Guardrails (Queries & Tags)

Use Beancount's features to sanity-check your finances and ensure you're meeting reasonable compensation standards.

  • Tag every owner draw with something memorable, like distrib: "yes".
  • Periodically run a query to compare total wages paid against total distributions taken.

You can run a quick check from your terminal with bean-query:

SELECT account, SUM(position)
WHERE (account ~ 'Expenses:Payroll:Wages' OR account ~ 'Equity:Distributions')
AND year = 2025
GROUP BY account;

This will give you a clean summary of your wages and distributions for the year, helping you and your CPA assess if your salary is "reasonable."

Paper Trail for the Election

Keep your S-corp documentation organized and linked to your ledger.

  • Create a docs/ folder in your Beancount directory to store PDFs of your signed Form 2553, the IRS acceptance letter, any late-election relief statements, and your payroll setup documents (EIN, state IDs).
  • Record a note transaction in your ledger the day you file the election. This creates a permanent, dated record.
2025-01-22 note "Filed IRS Form 2553 for S-corp election (effective 2025-01-01)"

Edge Cases to Watch

  • Your "first tax year" start date might not be your formation date. The clock for the "2 months and 15 days" deadline starts when your company has shareholders, acquires assets, or begins business operations—whichever comes first.
  • For non-calendar fiscal years, be precise. Your Form 2553 deadline is based on your fiscal year's start date, while your Form 1120-S deadline is based on its end date.

Quick Checklist

Ready to proceed? Here is a final checklist to guide you.

✅ Decide if the S-corp structure fits your business based on profit level, payroll readiness, and state-specific rules. ✅ Calendar Form 2553 with the correct deadline (and set a one-week reminder for yourself). For 2025, that's March 17, 2025. ✅ If you're late, immediately evaluate if you qualify for relief under Rev. Proc. 2013-30. ✅ Configure your payroll system and map the new expense and equity accounts in your Beancount ledger. ✅ Prepare to file Form 1120-S by the deadline or file Form 7004 for an extension.


This guide provides general information, not tax advice. Every business situation is unique. Please consult with your CPA to determine the best course of action for your specific circumstances.

Beancount's Technical Edge vs. Ledger, hledger, and GnuCash

· 6 min read
Mike Thrift
Mike Thrift
Marketing Manager

Choosing a personal accounting system involves trade-offs between performance, data architecture, and extensibility. For engineers and other technical users, the choice often comes down to which system provides the most robust, predictable, and programmable foundation.

Drawing from a detailed comparative report, let's analyze the technical specifics of Beancount versus its popular open-source counterparts: Ledger-CLI, hledger, and GnuCash.

2025-07-22-beancounts-technical-edge-a-deep-dive-on-performance-python-api-and-data-integrity-vs-ledger-hledger-and-gnucash


Speed and Performance: Quantitative Benchmarks 🚀

For any serious dataset, performance is non-negotiable. Beancount is architected to handle decades of transactional data without compromising on speed. Despite being implemented in Python (v2), its highly optimized parser is remarkably efficient.

  • Beancount: Real-world usage shows it can load and process ledgers with hundreds of thousands of transactions in approximately 2 seconds. Memory usage is modest; parsing ~100k transactions converts the source text into in-memory objects using only tens of megabytes of RAM.
  • The 1M Transaction Stress Test: A benchmark using a synthetic ledger of 1 million transactions, 1,000 accounts, and 1 million price entries revealed significant architectural differences:
    • hledger (Haskell): Successfully completed a full parse and report in ~80.2 seconds, processing ~12,465 txns/sec while using ~2.58 GB of RAM.
    • Ledger-CLI (C++): The process was terminated after 40 minutes without completion, likely due to a known regression causing excessive memory and CPU usage with highly complex ledgers.
    • Beancount: While not included in that specific 1M test, its performance curve suggests it would handle the task efficiently. Furthermore, the upcoming Beancount v3, with its new C++ core and Python API, is expected to deliver another order-of-magnitude improvement in throughput.
  • GnuCash (C/Scheme): As a GUI application loading its entire dataset into memory, performance degrades noticeably with size. A ~50 MB XML file (representing 100k+ transactions) took 77 seconds to open. Switching to the SQLite backend only marginally improved this to ~55 seconds.

Conclusion: Beancount provides exceptional performance that scales predictably, a crucial feature for long-term data management. It avoids the performance cliffs seen in Ledger and the UI-bound latency of GnuCash.


Data Architecture: Plain Text vs. Opaque Databases 📄

The way a system stores your data dictates its transparency, portability, and durability. Beancount uses a clean, human-readable plain text format that is superior for technical users.

  • Compact & Efficient: A 100,000-transaction Beancount file is only ~8.8 MB. This is more compact than the equivalent Ledger file (~10 MB) partly because Beancount's syntax allows for the inference of the final balancing amount in a transaction, reducing redundancy.
  • Structurally Enforced: Beancount mandates explicit YYYY-MM-DD\ open\ Account directives. This disciplined approach prevents account name typos from silently creating new, incorrect accounts—a common pitfall in systems like Ledger and hledger which create accounts on-the-fly. This structure makes the data more reliable for programmatic manipulation.
  • Version Control Ready: A plain text ledger is perfectly suited for version control with Git. You get a complete, auditable history of every financial change you make.
  • Contrast with GnuCash: GnuCash defaults to a gzip-compressed XML file, where data is verbose and wrapped in tags with GUIDs for every entity. While it offers SQLite, MySQL, and PostgreSQL backends, this abstracts the data away from simple, direct text manipulation and versioning. Editing the raw XML is possible but far more cumbersome than editing a Beancount file.

Conclusion: Beancount's data format is not just text; it's a well-defined language that maximizes clarity, enforces correctness, and integrates seamlessly with developer tools like git and grep.


The Killer Feature: A True Python API and Plugin Architecture 🐍

This is Beancount's defining technical advantage. It is not a monolithic application but a library with a stable, first-class Python API. This design decision unlocks limitless automation and integration possibilities.

  • Direct Programmatic Access: You can read, query, and manipulate your ledger data directly in Python. This is why developers migrate. As one user noted, the frustration of trying to script against Ledger's poorly documented internal bindings evaporates with Beancount.
  • Plugin Pipeline: Beancount's loader allows you to insert custom Python functions directly into the processing pipeline. This enables arbitrary transformations and validations on the data stream as it's being loaded—for instance, writing a plugin to enforce that every expense from a specific vendor must have a certain tag.
  • Powerful Importer Framework: Move beyond clunky CSV import wizards. With Beancount, you write Python scripts to parse financial statements from any source (OFX, QFX, CSV). Community tools like smart_importer even leverage machine learning models to automatically predict and assign posting accounts, turning hours of manual categorization into a seconds-long, one-command process.
  • How Others Compare:
    • Ledger/hledger: Extensibility is primarily external. You pipe data to/from the executable. While they can output JSON/CSV, you cannot inject logic into their core processing loop without modifying the C++/Haskell source.
    • GnuCash: Extensibility is handled via a steep learning curve with Guile (Scheme) for custom reports or via Python bindings (using SWIG and libraries like PieCash) that interact with the GnuCash engine. It's powerful but less direct and "Pythonic" than Beancount's native library approach.

Conclusion: Beancount is architected for the programmer. Its library-first design and deep integration with Python make it the most flexible and automatable system of the four.


Philosophy: A Strict Compiler for Your Finances 🤓

Beancount's learning curve is a direct result of its core philosophy: your financial data is a formal language, and it must be correct.

Beancount's parser functions like a strict compiler. It performs robust syntactical and logical validation. If a transaction doesn't balance or an account hasn't been opened, it will refuse to process the file and will return a descriptive error with a line number. This is a feature, not a bug. It guarantees that if your file "compiles," the underlying data is structurally sound.

This deterministic approach ensures a level of data integrity that is invaluable for building reliable automated systems on top of it. You can write scripts that consume Beancount's output with confidence, knowing the data has already been rigorously validated.

Who is Beancount For?

Based on this technical analysis, Beancount is the optimal choice for:

  • Developers and Engineers who want to treat their finances as a version-controlled, programmable dataset.
  • Data Tinkers who want to write custom queries, build unique visualizations with tools like Fava, or feed their financial data into other analytical models.
  • Anyone who values demonstrable correctness and automation over the convenience of a GUI or the leniency of a less-structured format.

If you desire raw C++ performance for standard reports, Ledger is a contender. For exceptional scalability in a functional programming paradigm, hledger is impressive. For a feature-packed GUI with minimal setup, GnuCash excels.

But if you want to build a truly robust, automated, and deeply customized financial management system, Beancount provides the superior technical foundation.

How Much to Set Aside for Small Business Taxes

· 6 min read
Mengjia Kong
Mengjia Kong
IRS Enrolled Agent

Running a small business is already a constant juggle of cash flow, suppliers, and customers—tax surprises shouldn’t be another bowling pin in the air. The good news: with a simple framework and a few Beancount tricks, you can translate “I hope the tax bill isn’t huge” into a predictable monthly transfer.

1. Know What You’re Really Paying For

2025-07-20-how-much-to-set-aside-for-small-business-taxes

Before you can set money aside, you need to know where it’s going. For most U.S. small businesses (especially sole proprietorships and partnerships), the total tax liability is a combination of several distinct obligations.

  • Federal Income Tax: This is a progressive tax, meaning the rate increases as your income does. For 2025, brackets go up to 37% for single incomes above $626,350 and married-filing-jointly (MFJ) incomes above $751,600.
  • Self-Employment (SE) Tax: This is the entrepreneur's version of FICA taxes (Social Security and Medicare) that W-2 employees pay. It’s a flat 15.3% on your first chunk of net earnings. The 12.4% Social Security portion stops once your profit hits the annual wage base, which is projected to be $176,100 in 2025. The remaining 2.9% for Medicare continues on all profits.
  • State & Local Income Tax: This varies wildly by location, ranging from 0% in states like Wyoming and Texas to over 13% in California's top bracket.
  • Quarterly Underpayment Penalties: The IRS wants its money throughout the year, not all at once. To avoid penalties, you generally must pre-pay at least 90% of your current year's tax liability or 100% of your previous year's tax bill (this threshold rises to 110% if your adjusted gross income, or AGI, is over $150,000).

Quick heuristic: Most U.S. solopreneurs who live in an average-tax state end up owing 25% - 30% of net profit once federal, SE, and state taxes are combined.

2. A Three-Step Estimate You Can Update Monthly

You don’t need complex software to get a handle on this. A simple, repeatable process is all it takes.

  1. Project Annual Profit: Look at your year-to-date performance and make a reasonable forecast for the full year. The basic formula is your friend: Projected Revenue - Projected Deductible Expenses = Projected Profit.
  2. Apply an Effective Tax Rate: Start with a reasonable percentage. If you have last year’s tax return, you can calculate your effective rate from that. If you're new to this, the 30% heuristic is a safe starting point.
  3. Divide by 12 (or 52): Take your total estimated annual tax and divide it by the number of pay periods you want to use. We recommend monthly. Move that amount into a dedicated tax-reserve bank account every month. If your cash flow is more volatile, a weekly transfer might feel more manageable.

3. Implement It in Beancount

Plain-text accounting makes this process transparent and auditable. Here’s how to manage your tax savings in Beancount.

First, create a routine transaction to move your monthly savings from your primary checking account to a separate, dedicated savings account for taxes.

; Reserve July's taxes
2025-07-31 * "Tax reserve transfer"
Assets:Bank:Checking -3000 USD
Assets:Bank:TaxReserve 3000 USD
Equity:Opening-Balances

When you make a quarterly estimated payment to the government, you record the actual liability. The payment comes directly from your reserve account.

; Record liability when you file the quarterly payment
2025-09-15 * "Q3 estimated tax payment"
Assets:Bank:TaxReserve -9000 USD
Liabilities:Taxes:Federal 6000 USD
Liabilities:Taxes:State 3000 USD

This simple system buys you three powerful advantages:

  • Immediate Visibility: Your Assets:Bank:TaxReserve balance always shows what’s already “spoken for.” You know at a glance that this cash isn't available for other business expenses.
  • Accurate Profit: Because the reserve is treated as a transfer between asset accounts, your Profit & Loss statement isn’t distorted. You only record the tax liability when you actually file and pay it.
  • Audit Trail: Every payment to the IRS or your state treasury ties back to a clearly tagged movement from your reserve account, creating a clean paper trail.

4. Fine-Tuning Your Percentage

The initial 25% - 30% estimate is a great start, but you should adjust it based on your specific business model.

  • High-Margin Consultants / Agencies: If you clear well above the Social Security wage base ($176,100), your effective tax rate will climb. A rate of 30% - 35% is likely more accurate.
  • Product Businesses with Heavy Deductions: If you have significant costs of goods sold (COGS), inventory, or other deductions, your net profit margin is lower. A rate of 20% - 25% may suffice. Use Form 1040-ES worksheets each quarter to confirm.
  • S-Corp Owners: Your situation is different. The "reasonable salary" you pay yourself is subject to standard payroll withholding (FICA and income taxes). Your distributions (profits paid out beyond salary) still require quarterly estimated payments, but often at a lower marginal rate since they aren't subject to SE tax.
  • Multi-State Sellers: If you have "nexus" (a significant business presence) in multiple states, you may owe income tax in each. This can stack your liabilities. For clarity, create separate liability accounts in Beancount, such as Liabilities:Taxes:State:CA and Liabilities:Taxes:State:NY.

5. Automate, Review, Repeat

A system only works if you use it. Make it effortless.

  • Automate: Link your main operating account to a high-yield savings account named something like "TaxReserve." Schedule an automatic transfer to occur right after you close your books each month.
  • Review: Re-forecast your annual profit quarterly. If Q2 sales blew past expectations, increase your monthly reserve amount immediately. Don't wait until January to discover you've under-saved.
  • Repeat: Keep key documents organized within your Beancount directory. Saving last year’s final tax return (document: "2024/Taxes/Form1040.pdf") gives you one-click context when discussing numbers with your CPA or planning for the next year.

Closing Thoughts

Tax bills feel random only when the set-aside process is. By baking a percentage-based reserve directly into your double-entry accounting flow, you trade anxiety for algebra—and Beancount makes the math (and the audit trail) trivial. Review your rate each quarter, keep Assets:Bank:TaxReserve funded, and April 15th turns back into just another day of business as usual.


Disclaimer: This article is for educational purposes only and isn’t tax advice. Always confirm numbers with a qualified professional for your jurisdiction and entity type.

Thriving in a Slow-Growth Economy — with Beancount

· 6 min read
Mike Thrift
Mike Thrift
Marketing Manager

The economic tea leaves are in, and they're not exactly screaming "boom." As of July 2025, the latest figures paint a picture of an economy that has decidedly cooled its jets. Let's look at the data.

The Macro Backdrop (July 2025)

2025-07-05-thriving-in-a-slow-growth-economy-with-beancount

  • Inflation: After years of volatility, U.S. consumer prices have settled but remain a factor, running at +2.7% year-over-year as of June 2025 (Bureau of Labor Statistics, Trading Economics). While down from post-pandemic highs, this rate still erodes purchasing power and puts pressure on margins.
  • Growth: The long expansion has officially ended. Real GDP slipped by an annualized rate of -0.3% to -0.5% in the first quarter of 2025, signaling a contraction (Bureau of Economic Analysis, Trading Economics).

A tepid economy isn't a crisis—it's a clarion call. It demands sharper visibility into your cash flow, a ruthless approach to costs, and a clear-eyed view of opportunities. This is where plain-text accounting, specifically with Beancount, becomes a strategic advantage. It gives you complete control over your financial data, without the SaaS lock-in or ever-rising subscription fees of commercial software.


Five High-Leverage Levers (and How Beancount Makes Them Easy)

In a slow-growth environment, small, intelligent actions have an outsized impact. Here are five strategies you can implement immediately with a Beancount ledger.

StrategyHow to Execute in Beancount
Keep books currentAutomate ingestion. Run bean-extract nightly, or schedule a GitHub Action that fetches bank feeds and commits new transactions to your ledger. Real-time data means no surprises.
Monitor cash flowQuery weekly. Track your net monthly flow with a simple query. Save it as a favorite in Fava, Beancount's web interface, for one-click access: SELECT year, month, SUM(convert(position, 'USD')) WHERE account ~ 'Income:Expenses' GROUP BY year, month
Diversify revenueIsolate experiments. Test a new product or service by creating a dedicated income account, like Income:Consulting:SideHustle, and tagging all related transactions with #pilot-project. This makes calculating ROI trivial.
Trim fat fastSurface big spenders. Need to make cuts? This query instantly shows your top 10 expense categories, pointing you directly to where you can save the most: bean-query main.bean "SELECT account, SUM(number) WHERE account =~ '^Expenses' GROUP BY account ORDER BY SUM DESC LIMIT 10"
Re-invest intelligentlyRing-fence profits. At the end of each month, calculate your net profit and programmatically sweep a portion to a dedicated account. This isn't just saving; it's explicitly allocating capital for future growth or opportunities.

Automate the Busywork, Guard Your Time

Your most valuable asset is your time, which should be spent on analysis, not data entry. Beancount’s plain-text nature makes automation a first-class citizen.

  • Helper Scripts: The Beancount ecosystem is rich with community-built tools. Price fetchers can pull daily market values for your investments. Importers for services like PayPal, Stripe, or Splitwise can parse statements and append formatted entries to your ledger while you sleep.
  • Pre-commit Hooks: If you store your ledger in Git (and you should), you can use a pre-commit hook to run bean-check on every change. This simple script lints your file, catching typos and balancing errors before they ever get committed to your main branch.
  • Git = Audit Trail: Every commit is a story. git blame shows you who changed a transaction and when. git log provides a complete, immutable history of your financial decisions. It's the most robust audit trail imaginable.

Build Financial Resilience

A slow economy rewards the prepared. Use Beancount to build a financial fortress that can withstand uncertainty.

  • Emergency Buffer: Make saving non-negotiable. After calculating your monthly profit, create a standing transaction to move a fixed percentage (e.g., 10%) to a dedicated emergency fund.

    ; Assuming July profit was $4,500. 10% = $450.
    2025-07-31 * "Monthly Profit Sweep" "Move 10% of profit to emergency fund"
    Expenses:ProfitSweep 450.00 USD
    Assets:Savings:Emergency

    This isn't an expense in the traditional sense, but booking it this way "hides" the cash from your operating accounts, making it less tempting to spend.

  • Scenario Modeling: What happens if revenue drops 15%? Or if your costs increase by 5%? With a plain-text ledger, you don't need complex software to find out. Just copy your entire ledger file to a scenarios/ directory, tweak the numbers, and run a report.

    # See the impact on your bottom line in seconds
    bean-report scenarios/pessimistic_q3.bean income_statement

Double-Click on Niche Data

Beancount's flexibility allows you to track anything. Use metadata to enrich your transactions with business context.

2025-07-15 * "The Meow-Box" "Monthly Cat-Toy Subscription"
Income:Subscriptions -19.99 USD
Assets:Bank:Checking
; market: "Pet-DTC"
; customer-id: "CUST-86753"

With this data embedded directly in your ledger, you can ask sophisticated questions. A simple bean-query can now reveal the total revenue, churn, or lifetime value for your "Pet-DTC" market segment:

bean-query my-ledger.beancount "SELECT SUM(convert(position, 'USD')) WHERE meta('market') = 'Pet-DTC'"

Your Next Steps

Reading about it is one thing; doing it is another. Here’s how to get started this week:

  1. Import Your 2024 Backlog: Get your historical data from 2024 into Beancount. This will make your 2025 reports and year-over-year comparisons truly apples-to-apples.
  2. Schedule Two Standing Queries: Save the cash-flow and top-10-expenses queries. Set a calendar reminder to run and review them every Friday. Make it a ritual.
  3. Allocate 10% of Profit: Implement the profit sweep. Start with 10% and commit to moving that capital to a separate reinvestment or emergency account each month. Revisit the ratio quarterly.

Slow growth rewards those who see their numbers clearly, act decisively, and build robust systems. With a text ledger, a handful of scripts, and the playbook above, you’ll do more than just survive the downturn—you’ll use it as an opportunity to compound your financial strength.

Bookkeeping vs. Accounting: What’s the Difference, and Where Does Beancount Fit?

· 3 min read
Mike Thrift
Mike Thrift
Marketing Manager

When you're running a business or managing your personal finances, the terms bookkeeping and accounting often blur together. But understanding their differences—especially when using a plain-text tool like Beancount—can help you build better systems and make smarter financial decisions.

In this guide, we’ll explore the roles of bookkeeping and accounting, and how Beancount supports both (yes, really).

2025-06-27-accounting-vs-bookkeeping

📘 Bookkeeping: The Art of Daily Tracking

Bookkeeping is the foundational layer of financial management. It’s about recording what actually happened—no assumptions, no forecasts.

Bookkeeping includes:

  • Recording income and expenses
  • Keeping track of assets and liabilities
  • Tagging transactions for later use
  • Maintaining a general ledger

In Beancount, this looks like:

2025-06-27 * "Stripe Payout"
Assets:Bank:Checking 1,200.00 USD
Income:Sales

Each transaction is a building block. You’re not analyzing yet—you’re simply recording the truth, one line at a time.

If you're just starting out, Beancount encourages good bookkeeping habits through its explicit structure and readable syntax. You’ll be forced (in a good way!) to track every cent and explain every transaction.

📊 Accounting: Turning Data Into Insight

Accounting builds on your bookkeeping records to answer deeper questions:

  • Are we profitable?
  • How much cash runway do we have?
  • Should we prepay for that software or expense it monthly?
  • How do we minimize taxes?

In accounting, you:

  • Reconcile accounts and adjust entries
  • Generate reports like profit/loss statements
  • Depreciate assets
  • Plan for taxes and future expenses

With Beancount, you can analyze your records using tools like beancount.io:

  • Navigate balance sheets, income statements, and cash flow charts
  • Visualize income by category
  • Annotate decisions using metadata (e.g., tag:business-trip)

Want to track that annual Zoom subscription?

2025-01-15 * "Zoom Annual Plan"
Expenses:Software 149.90 USD
Assets:Bank:Checking
tag:business-tools

You can later amortize it monthly or analyze it during budgeting sessions.

👩‍💼 Bookkeeper vs. Accountant: Who Does What?

  • Bookkeeper: Focuses on precision. Records, categorizes, and organizes.
  • Accountant: Adds interpretation. Advises, plans, and models outcomes.

Beancount empowers you to be both, or to cleanly hand off one layer to a professional.

For example:

  • As a founder, you may do your own bookkeeping with Beancount.
  • At tax season, you export reports or raw data for your accountant to finalize.

🛠️ Bookkeeping and Accounting Software: Where Does Beancount Belong?

Most mainstream tools (e.g., QuickBooks, Xero) blur the line between bookkeeping and accounting. Beancount takes a different approach:

  • You manage everything through plain text, stored in version control if you like.
  • There's no hiding of transactions or behind-the-scenes magic.
  • You're encouraged to understand your own books.

Beancount is ideal for those who value transparency, data integrity, and automation through open-source tools.

🧠 Why This Distinction Matters

Knowing the difference between bookkeeping and accounting helps you:

  • Stay compliant and audit-ready
  • Understand where to invest time (daily tracking vs. monthly insights)
  • Communicate clearly with financial professionals
  • Scale your financial systems without drowning in complexity

🪄 Final Thought: Your Ledger, Your Rules

Whether you're a solo creator or a small business owner, Beancount gives you the power to manage your books with precision—and eventually make strategic decisions like a CFO.

Remember:

  • Bookkeeping = what happened
  • Accounting = what it means

With Beancount, you’re building both layers with clarity and confidence.

Let me know if you'd like a printable version or a tutorial follow-up.