Your craft is physical.
Your books should be durable.
A simple, subscription-free alternative to QuickBooks Online. Double-entry accounting designed for builders, woodworkers, artists, and independent contractors who want to own their data.
Why we built this.
We believe your business financials should be as long-lasting as the furniture, tools, or products you build.
Local & Durable
Your books are a single SQLite file on your computer. Your receipts live in a standard directory. No cloud accounts, no subscriptions, and zero telemetry. It will run in ten years with nothing but Python installed.
Proper Double-Entry
Every dollar has a source and a destination. The ledger maintains balanced journal entries internally, but you interact with a non-accountant UI. No accounting jargon—just simple income, expenses, and transfers.
AI as an Accelerator
Use local AI (via Ollama) or an optional Claude API key to automatically parse statement PDFs, read receipt photos, and suggest categories. If you're offline, CSV importing and keyword rules still work perfectly.
See how it works.
Click the tabs to preview the main components of the local app workspace.
Imported Statement Review
The 20-minute bookkeeping loop.
QuickBooks drains hours of your month. ShopBooks uses a streamlined checklist designed for simple needs.
Import
Download monthly PDF/CSV statements from your bank and card sites, and drop them in the app.
Review
Confirm suggested categories. Add permanent rules so the app remembers payees next month.
Receipts
Drop receipt images or snapshots. They are matched to posted ledger entries automatically.
Tax ZIP
Run the year-end pre-flight check, and download a ZIP containing clean PDFs, CSVs, and all receipt files.
Created for Outlier Workshop.
ShopBooks started in a woodworking shop. The owner, Ben, was tired of paying high monthly subscription fees to QuickBooks Online for basic invoicing and bank matching. QBO felt slow, was bloated with ads, forced cloud upgrades, and came with the risk of data lock-in when canceling a subscription.
"I wanted accounting that works like my tools. Durable, localized, under my direct control. I build tables to last decades—my financial records should do the same."
ShopBooks was built to solve this. It fits on a USB drive, performs lightning-fast local SQLite queries, sends emails via your own SMTP, and outputs simple CSV and image collections for your accountant at tax time.
No Subscriptions
Buy it once or build it from source. ShopBooks runs offline and has no recurring fees or monthly maintenance.
Plain Files, Not Cloud Databases
Everything sits in a folder on your machine. You can view your books using standard SQLite clients or text editors.
One Person, One Workshop
Optimized for freelancers and contractors. No multi-currency bloat, payroll schemes, or heavy inventory systems.
Frequently Asked Questions
Simple, honest answers about the technology and design choices.
Is my data secure?
Yes. Your data never leaves your computer. Since ShopBooks is a local web application running entirely on localhost (127.0.0.1), your financials are as secure as your operating system's files.
How do bank feeds work?
You can import raw statements downloaded from your bank (PDF or CSV). If you prefer automated feeds, ShopBooks supports the secure, open-standard SimpleFIN protocol to stage bank balances directly.
Will my accountant accept these reports?
Yes. ShopBooks outputs standard Double-Entry balance sheets and profit & loss statements in clean CSV format. At the end of the year, the app aggregates every single receipt photo and transaction line item into one organized ZIP package.
What is the technology stack?
ShopBooks is built on FastAPI (Python), SQLite (for database storage), and Jinja2 (for server-side rendering). It relies on zero external javascript frameworks, ensuring a lightweight footprint and long-term maintainability.
Ready to own your bookkeeping?
Clone the codebase, run the command, and take control of your financial records in seconds.
Requirements: Python 3.9+ (Pip is verified automatically on first load).