I’ve been tracking my personal finances with Beancount for three years now, and while I love the plain text philosophy, there’s always been one pain point: getting data into the system.
Every month, I’d spend 2+ hours downloading CSV files from multiple banks, cleaning up merchant names, running my custom Python importers, and manually categorizing edge cases. It worked, but it felt like busywork that a computer should handle.
Enter Robotic Process Automation
Last month, I started experimenting with Microsoft Power Automate (part of my company’s Office 365 license), and I’m genuinely excited about the results. I’ve built a flow that:
- Monitors my email for messages from vendors with invoice attachments (PDF or image)
- Extracts invoice data using Power Automate’s AI Builder (OCR + document understanding)
- Validates and structures the data: date, vendor, amount, description
- Generates Beancount transactions in proper format
- Appends to a staging file that I review weekly before merging into my main ledger
Real Results
My monthly bookkeeping time dropped from 2 hours to 15 minutes. The bot handles:
- Utility bills (electricity, water, internet)
- Subscription services (software, streaming)
- Contractor invoices for my rental property
- Receipt photos I forward to a dedicated email
That’s roughly 80% of my recurring transactions, leaving me to focus on the interesting stuff: investment tracking, expense optimization analysis, and FIRE milestone monitoring.
How It Actually Works
The Power Automate flow uses AI Builder’s “Extract information from invoices” model. When an invoice arrives:
Email trigger → Parse attachments → AI Builder invoice processing →
Custom formatting (Python Azure Function) → Beancount transaction →
Append to staging.beancount
The Python function formats the extracted data into valid Beancount syntax:
2026-03-15 * "PG&E" "Electricity - March 2026"
Expenses:Utilities:Electricity 125.43 USD
Assets:Checking:BofA
The Challenges
Not everything is smooth yet:
Accuracy: AI Builder gets about 92-95% of fields correct. I still need weekly review to catch misreads or classification errors.
Format diversity: Some vendors send invoices as images, others as PDFs with weird layouts. The AI model struggles with non-standard formats.
Edge cases: Refunds, partial payments, multi-line items still need manual attention.
Validation: I rely heavily on Beancount’s balance assertions. If automated entries are wrong, my monthly bank reconciliation catches it immediately.
Plain Text + RPA = Best of Both Worlds
Here’s what I love about this approach:
Auditability: Everything ends up in my Git-versioned Beancount ledger
Transparency: I can review every transaction before merging to main ledger
Flexibility: When the bot gets something wrong, I just edit the plain text
Reversibility: Git history means I can always undo bad automation runs
Learning: The AI model improves over time as I provide feedback
Traditional accounting software automates data entry but locks you into their black-box categorization. Beancount + RPA gives me automation without sacrificing control.
Questions for the Community
Is anyone else using RPA tools (UiPath, Power Automate, Zapier) with Beancount?
I’d love to hear about your workflows. Specifically:
- What tools are you using for data extraction?
- How do you handle validation and error correction?
- What percentage of your transactions can you automate?
- Any gotchas or lessons learned?
I’m considering open-sourcing my Power Automate flow and Python formatting function if there’s interest. The setup takes some technical chops, but for anyone processing high volumes of similar documents (freelancers with client invoices, rental property owners, small business owners), the time savings could be massive.
Is this the future of plain text accounting, or am I over-engineering my personal finances? ![]()