MoneyWiz → Firefly III migration
A command-line tool that migrates your full MoneyWiz transaction history into Firefly III using a MoneyWiz CSV export.
It parses accounts, currencies, payees, categories, tags, payments and transfers, links the two sides of each transfer back together, stores everything in a local SQLite "staging" database, and then pushes it to a Firefly III instance through the REST API.
⚠️ Investment / brokerage and crypto accounts are not properly supported. MoneyWiz exports those in a way that doesn't map cleanly onto Firefly III's model. Expect to handle them manually.
Why I built this
I'd tracked every transaction in MoneyWiz since 2011 — over a decade of history: 25,000+ transactions across 100+ accounts in a handful of currencies, accumulated as life moved across countries and banks. Then I switched from iPhone to Android, and discovered that the otherwise-excellent MoneyWiz team had dropped their Android app — leaving me with 13 years of finances and no way to keep using them. So I decided to move to self-hosted Firefly III instead.
Re-entering all of that by hand was obviously off the table, and the importers I tried choked on the scale, the cross-currency transfers, or MoneyWiz's two-rows-per-transfer export format. So I wrote this.
The part I'm happiest with: across all of those rows I had to hand-edit only about three dozen — roughly one line in a thousand. Nearly all were transfers whose two halves carried slightly mismatched timestamps (or two transfers between the same accounts in the same minute); I nudged one side by a minute so the linker could pair them up. A couple were single-cent corrections. Everything else — every payee, category, split, tag, currency, opening balance and loan payment — imported and exported untouched.
If your MoneyWiz data looks anything like mine, expect a similarly tiny amount of manual cleanup.
How it works
The migration runs in two phases that share a local SQLite database (the "staging DB").
MoneyWiz CSV ──(import)──▶ SQLite staging DB ──(export)──▶ Firefly III (REST API)- Import (default mode) — parse the CSV, link transfer pairs, deduplicate, and write
normalized records into the staging DB. Nothing touches Firefly III yet.
- Export (--export) — read the staging DB and create the matching currencies,
accounts, categories, tags, payees and transactions in Firefly III. The Firefly ID of every created object is written back to the staging DB.
Because Firefly IDs are stored back into the staging DB, export is idempotent: re-running it only sends records that haven't been exported yet (those with no fireflyid). Combined with --dedup on import, you can run the migration incrementally as you add more MoneyWiz data.