01 May 2026
Tiller2QIF — A Better Way to Get Tiller Data Into GnuCash
If you prefer to track your finances in your own software and are looking for a solution to easily import transactions from multiple accounts, Tiller is an affordable service that will gather all of your data into spreadsheets. Tiller2QIF bridges the gap between spreadsheet and your software. It takes the CSV transaction export Tiller produces and turns it into a single QIF file that imports cleanly into GnuCash or anything else that reads QIF.
The post Why I Wrote Tiller2QIF covers the workflow problems and my reasoning for writing the tool. This piece is about what the tool actually does.
The full documentation lives on CPAN: Finance::Tiller2QIF.
One Import for Every Account
GnuCash’s OFX/QFX importer is slick, but it expects one file per account. Ten accounts means ten imports, and splitting a single download into ten OFX files is a limitation of the OFX/QFX format itself. The QIF importer is older and less polished, but it accepts every account in a single file. Tiller2QIF takes full advantage of that — one CSV export from Tiller becomes one QIF file with every transaction across every account.
Three-Phase Pipeline
Tiller2QIF breaks the work into three phases, each of which can run on its own:
- Ingest — parses the Tiller CSV and loads it into a SQLite database.
- Map — applies user-defined rules to translate categories, rewrite payees, or filter transactions.
- Emit — writes the QIF file from the processed data.
The run command executes all three in order, automatically backing up your Tiller2QIF transaction database in case something goes wrong. Each phase is independent, and the intermediate state is just a SQLite database. You can stop, run a one-off SQL query against your transactions between phases, and then continue. That’s powerful when you need to do something the mapping rules don’t cover.
A Straightforward Mapping Language
Tiller’s category guesses are usually close, but they’re not your chart of accounts. The mapping file lets you fix that with regex-based rules:
[AccountFilter] field | pattern | destination
- Account filter is optional and supports alternation, so
[Checking|Savings]scopes a rule to those accounts. - Fields you can match on: category, payee, memo, date, amount.
- Patterns are case-insensitive regexes, which can be escaped with forward slashes when you need alternation in the regex.
- Destinations can be a category you specify,
sourceto keep what Tiller had,blankto leave the category empty, orskipto drop the transaction entirely.
The skip destination is handy for filtering out transfers that Tiller surfaces twice, or for dropping transactions that are otherwise unwanted.
Emit
The Emit process uses the database to track transaction ids which have already been exported, once a transaction is exported, it won’t be exported again, and you won’t have to match it in import to the previous instance.
Options may be given on either the command line or kept in a config file
All of the option flags, like input file and output file, can be saved in a JSON config file, so your command can be tiller2qif run -c ~/myconfig.json. Tiller2QIF will generate an empty config or database if you ask it to. The checkpoint option creates a backup of the database (automatically done for the run command). The checkpoint feature will save you if something goes wrong in your import, but is also useful if you’re working on your mapping rules.
Not Just for Tiller
Although the tool is named for Tiller, the ingest phase is the only piece that cares about Tiller’s specific CSV layout. If you have CSV from a different source, a small custom script can remap its fields into the schema Tiller2QIF expects, and the rest of the pipeline—mapping, checkpointing, QIF emission—works unchanged. The tool is a CSV-to-QIF engine with a Tiller-shaped front door.
Installation
It’s on CPAN as Finance::Tiller2QIF. Runtime dependencies are popular Perl modules that are available as OS packages on Debian and Ubuntu. On other platforms, including Windows Strawberry Perl, you’ll need to install the dependencies from CPAN.
Conclusion
If you’ve been downloading data one OFX file at a time, or perhaps using Tiller and wanting to get that data to a more robust accounting platform, Tiller2QIF is the solution you need.