I’ve been lurking in this community for a while, learning from all of you, and I finally have something to share that might help others who are struggling with month-end close like I was.
Two years ago, I was spending 10-12 days every month closing my books. Late nights, Excel hell, and that sinking feeling when you find a reconciliation error on day 9 that requires re-doing everything. Sound familiar?
Then I discovered continuous close with Beancount. Now my books are always close-ready. My actual close takes 2-3 hours instead of 2 weeks. Here’s how plain text accounting made it possible.
What Is Continuous Close?
Traditional accounting: scramble at month-end to import transactions, reconcile accounts, fix errors, run reports.
Continuous close: Monitor, reconcile, and validate throughout the month. By day 30, you’re already done.
The 2026 accounting world is moving this direction fast. Research shows AI-assisted automation cuts 7+ days off monthly close cycles. But here’s the thing: most AI accounting tools are black boxes. You can’t see what they’re doing. You can’t customize them. You’re trusting magic.
Beancount is different. It’s fully observable (plain text), fully scriptable (Python, bash), and fully yours (no vendor lock-in).
Why Plain Text Wins for Continuous Close
1. Observable = Auditable
Every transaction is human-readable. No mysterious database. No proprietary format. When something’s wrong, you can see it immediately.
2. Scriptable = Automatable
Want to import bank feeds daily? Write a Python script. Want alerts when your checking account drops below a threshold? Bash + cron. Want to validate that all transfers match? Custom query.
You own the automation. You understand the automation. It doesn’t break when a vendor changes their API.
3. Balance Assertions = Real-Time Validation
This is Beancount’s superpower. Every time you import transactions, add a balance assertion:
2026-03-27 balance Assets:Checking 4250.18 USD
If it doesn’t match your bank statement, Beancount errors immediately. You catch problems the day they happen, not 30 days later.
I run balance assertions daily on all cash/bank/credit accounts. It’s like having mini-audits built into your workflow. Most errors get caught within 24 hours.
4. Git = Time Machine + Audit Trail
Every change is tracked. Every month gets a git tag. Need to see what changed? Compare month to month. Made a mistake? Revert. Collaborating with your accountant? Pull requests with code review.
Traditional accounting software can’t touch this level of transparency.
My Continuous Close Workflow
Here’s the actual system I’ve been running for 18+ months:
Daily (Automated)
- Morning: Cron job runs Beancount importers for all bank/credit accounts
- Imports download transactions via API, generate Beancount entries
- Script adds balance assertions from latest account balances
- If assertions fail → email alert
- If assertions pass → Auto-commit to Git with timestamp
Result: Every morning I wake up to current books. Zero manual data entry.
Weekly (15 minutes)
- Review imported transactions in Fava
- Fix any categorization errors (maybe 2-3 per week)
- Verify inter-account transfers balanced correctly
- Check for anomalies (unusual merchants, duplicate charges)
- Commit corrections with descriptive messages
Monthly (2-3 hours)
- Run custom queries for variance analysis
- Post any accruals or adjusting entries
- Update investment prices
- Generate P&L and balance sheet
- Tag the month in Git
- Export reports for tax planning
That’s it. No all-nighters. No panic. No surprises at month-end.
Real Results
Before Beancount:
- Close time: 10-12 days
- Manual data entry: 4+ hours/month
- Errors found: 3-5 per month (caught late)
- Stress level: Maximum
After Beancount continuous close:
- Close time: 2-3 hours
- Manual data entry: ~0 hours/month
- Errors found: 0-1 per month (caught same-day)
- Stress level: What stress?
The Automation Stack
For those curious about the technical details:
- Importers: Custom Python scripts using Beancount’s import framework
- Bank APIs: Mix of Plaid and direct CSV downloads
- Scheduling: Simple cron jobs (nothing fancy needed)
- Alerts: Bash scripts with email notifications
- Queries: BQL (Beancount Query Language) for custom analysis
- Dashboard: Fava running on local server, accessible from phone
- Version control: Git with daily auto-commits, manual commits for corrections
- Backup: Git remote plus automated exports to cloud storage
Total setup time: About 2 weekends (spread over a month). Maintenance: Maybe 5 minutes per week to update importers when banks change their formats.
The Human Element
Important reality check: Automation doesn’t eliminate the need for judgment. You still need to:
- Review flagged anomalies
- Make accrual decisions
- Interpret variance analysis
- Handle edge cases (refunds, disputes, corrections)
What automation does: Eliminates repetitive manual work so you can focus on the stuff that actually requires thinking.
Who Should Try This?
Continuous close with Beancount isn’t for everyone. It makes sense if you:
- Track finances seriously (business, investments, or detailed personal finance)
- Are comfortable with basic scripting (or willing to learn)
- Value data ownership and transparency
- Want to eliminate month-end panic
If you’re doing casual expense tracking, this might be overkill. Stick with Fava’s manual import workflow.
Where I’m Going Next
Current experiments:
- Anomaly detection: Using simple statistical models to flag unusual transactions automatically
- Forecasting: Historical data to projected cash flow scenarios
- Receipt matching: OCR with text matching to auto-link receipts to transactions
- Smart categorization (experimental): Testing AI for merchant to category suggestions, but with human review required
The beauty of owning your data and tools: You can experiment without waiting for a vendor to ship features.
Let’s Discuss
Who else is doing continuous close with Beancount? I’d love to hear:
- What’s your automation workflow?
- What problems are you still solving manually?
- Any scripts or tools you’d be willing to share?
- Where did you get stuck, and how did you solve it?
The plain text accounting community has been incredibly helpful as I’ve learned. Happy to pay it forward and share whatever might be useful to others.