finds.dev← search

// the find

deb-sig/double-entry-generator

★ 705 · Go · Apache-2.0 · updated Jul 2026

Rule-based double-entry bookkeeping importer (from Alipay/WeChat/Huobi etc. to Beancount/Ledger).

A Go CLI that converts bank and payment exports (Alipay, WeChat, ICBC, and about 15 others) into Beancount or Ledger format using YAML rule files. It's for developers doing plain-text accounting who want to stop manually categorizing transactions from Chinese financial platforms. The provider + IR + compiler pipeline is clean and genuinely extensible.

The provider/IR/compiler separation is the right architecture — adding a new bank or output format means implementing one interface, not touching the rest. Coverage of Chinese financial platforms is unusually broad: major banks, brokerages, crypto exchanges, and payment apps all in one tool. The YAML rule matching (by peer, category, time window) handles the messy reality of how Alipay transactions are described. WASM build target means it can run client-side in a browser, which matters for people who don't want to pipe sensitive financial CSVs through a server.

The --ignore-invalid-tx-types escape hatch is a smell: silently dropping transactions you can't parse is dangerous in accounting software, where a missing entry means wrong books. No reconciliation output or balance assertions — you get the Beancount entries but nothing that tells you whether the import matched your actual account balance. Provider coverage is almost entirely China-focused; the two Canadian banks (BMO, TD) feel bolted on and the pattern doesn't generalize well to other Western banks where export formats vary by account type and even by year. Rule matching uses string equality and regex against merchant names, which breaks the moment Alipay changes how it formats a counterparty name — there's no fuzzy matching or normalization layer.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →