Import troubleshooting
Start here when a preview looks wrong or an import did not match the source balances. The importer never overwrites existing rows without the review step. The whole import is one undo.
The format is wrong
Detection uses the file contents, not the extension.
- QIF starts with
!Type:or!Account - OFX/QFX starts with
OFXHEADER:or<OFX> - CSV has a header row and a repeating delimiter
- JSON has
accountsandtransactions
If detection is "unknown", open the file in a text editor. A Word document or a PDF will not import. Save a real export.
Dates or signs are wrong
US bank files usually use month-first dates. A first number larger than 12 is treated as a day. ISO dates (2026-11-05) always win. OFX dates are YYYYMMDD.
If every amount is flipped, you may have a credit-card CSV that lists charges as positive. The Amex preset inverts those. Other files can wait for a later map, or you can export OFX instead.
Duplicates
Exact matches use FITID when the file has one, otherwise a hash of account, date, amount, payee, check number, and memo. Re-importing the same OFX is a no-op.
Possible duplicates (amount, date ±2 days, similar payee) are listed and skipped unless you opt in. Opting in still leaves them Uncategorized so you can merge them by hand.
Balances do not match
- A transfer was imported twice because the other account's name differed by a letter. Pairing needs the same names.
- Opening Balance was missing, so the register starts at zero. Set the opening on Accounts.
- You compared a liability's raw total to the sidebar's owed figure. The sidebar shows what you owe.
Export
Export writes JSON (fcr-ledger-1), a per-account CSV, QIF, or OFX. You can also copy the SQLite file. JSON is the documented open schema and can be re-imported.