Local-first bookkeeping and tax prep for Canadian small corporations. Your statements, your ledger, your filings — on your machine, and nowhere else.
Quince reconstructs a company's books from raw bank statements and prepares the numbers for the T2 corporate return and the GST/HST return. No cloud accounting service, no uploading statements to anyone's server, no subscription. One local database, deterministic parsers, and an audit trail for every change.
v0.5 — code release. This is the working system, released as code. It is meant to be adapted with an AI coding assistant (Claude Code, Cursor, Codex): point your assistant at this repo, tell it about your accounts, and it configures — or extends — the system for you.
CLAUDE.md/AGENTS.mdis the map written for exactly that. Cross-platform packaging and a self-executable installer are on the roadmap for 1.0.
- Statement import, reconcile-gated. A generic CSV/PDF parser ships; per-bank positional PDF parsers are a one-statement job for your AI assistant, under one house rule: every parser must prove itself against the statement's own running balance — if a single transaction is misread, the import refuses to call it clean. The correctness oracle is the bank's arithmetic, not the parser's confidence.
- Categorization by editable keyword rules (
config/rules.csv), automatic HST extraction, and internal-transfer detection between your own accounts. - Receipt OCR, on-device (macOS Vision at v0.5) — drop receipts in an inbox; they're read locally, renamed, filed, and matched to transactions. Ambiguous matches go to a review pile: on a tax record, a confident wrong link is worse than an honest "not yet."
- Invoices, receipts, bills — YAML → HTML → PDF, auto-numbered, registered, attachable to transactions.
- Reports & filing prep — GST/HST return lines (101/105/108/109), P&L with GIFI codes, balance sheet, and quality checks. An independent audit harness re-derives the numbers from source and fails loudly on any mismatch.
- A full undo/audit log. Every mutation is recorded and reversible.
git clone <this repo> && cd quince
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python3 scripts/db.py init # creates data/quince.db (SQLite, zero setup)
./run_gui.sh # Streamlit GUI at http://localhost:8501Then edit config/accounts.yaml and config/business_profile.yaml for your
company, drop statements in data/statements/<account>/, and import from the
GUI (or python3 scripts/import_statements.py).
- Clone the repo and open it in Claude Code, Cursor, or Codex.
- Say: "Read CLAUDE.md. Set this up for my company: , fiscal year end , these bank accounts: . Here's a sample statement from each."
- The assistant fills the configs and writes a parser for each of your banks from your sample PDFs following the house rule: it must reconcile to the statement's own balance or refuse.
- Import, categorize, review in the GUI. The books stay deterministic; the assistant builds and checks, it never invents a number.
Different assistants stall in different places; the repo assumes nothing about which one you use.
- Local-first, always. Nothing financial leaves the machine. OCR is
on-device; the database is a local file (SQLite by default; optional local
Postgres via
QUINCE_BACKEND=postgres). - The books stay deterministic. Every number comes from a parser, a rule, or a human decision — things you can re-run and get the same answer. An AI assistant is excellent at building and auditing this system; it never becomes the ledger.
- Reconcile or refuse. Parsers self-verify against the statement's printed balance. The importer rejects future-dated transactions. The audit harness recomputes from raw sources.
- Surface, don't guess. High-confidence automation where evidence is unambiguous; everything else goes to a labeled review queue.
- Canada-specific (T2 / GST-HST / GIFI; Ontario defaults, other provinces
via
config/tax_rates.csv). The architecture generalizes; the tax logic is Canadian. - Receipt OCR is macOS-only at v0.5 (everything else runs anywhere Python
does). Windows/Linux OCR backends are roadmap — or a one-module job for your
AI assistant (
scripts/ocr.py). - Not tax advice. Quince prepares books and filing numbers; a professional should review before anything is transmitted. The long tail of one-off transactions still needs a human decision — by design.
- 1.0: cross-platform OCR, double-clickable installers, self-executable package
- Project accounting, contacts & investment-tax GUI (engines already in the code)
- Synthetic demo dataset + guided tour
- Proposal generation
Pull requests are not being accepted at this stage (v0.5 is a code-drop
release) — see CONTRIBUTING.md. Bug reports and questions are welcome as
Issues. Want changes now? Fork it.
Test this against a copy of your own data before you rely on it, and before any commercial use.
Quince is provided as is, without warranty or condition of any kind. grndtech accepts no liability for lost or corrupted data, incorrect figures, missed obligations, or any other loss arising from use of this software — see sections 7 and 8 of LICENSE, which govern. Verifying the output before you act on it is your responsibility.
Quince prepares books and filing numbers. It is not tax, accounting, or legal advice — have a professional review anything before it is transmitted to the CRA.
Apache License 2.0 — see LICENSE. The license covers the code, not the name:
fork freely, but ship your fork under your own name (see NOTICE).
Built by grndtech — the story behind this system is at grndtech.com/quince.