Tech Digest

Migration

Replace Mint or YNAB with something you host

Mint is gone and YNAB costs more every year, but the replacement is not one tool. It is two tools that look similar and answer completely different questions.

Last reviewed

What can I use instead of Mint or YNAB if I self-host?

Actual Budget if you came from YNAB: it is zero-based envelope budgeting, local-first, one container, and it keeps working when the server is down. Firefly III if you came from Mint and want a ledger that reconciles: it is double-entry bookkeeping, four containers, and a genuine learning curve. The biggest loss in both cases is automatic bank feeds. YNAB includes them in the subscription; here you pay a separate aggregator or you import CSV files by hand.

Two things brought you here and they are not the same problem. Mint disappeared on 23 March 2024. YNAB still works and costs more every year. Choosing a replacement on price rather than on model is the mistake this page exists to prevent.

What you are actually giving up#

YNAB's method is half the product and the software is the other half. The four rules, the workshops, the community that talks you through a month where the numbers do not work: that is what changes behavior, and Actual Budget ships none of it. Actual implements the mechanics of envelope budgeting faithfully and then leaves you alone. If YNAB fixed your spending, be honest about which half did the fixing.

Automatic bank feeds. This is the concrete loss and it is bigger than people expect. YNAB includes direct import in the subscription. Self-hosted, you have three options and none is free and universal:

  • SimpleFIN Bridge, North America, 1.50 US dollars a month or 15 a year. It pulls at most 90 days of data per linked account, not all of them have 90 days available, and it updates roughly once every 24 hours at a time that varies by bank.
  • GoCardless Bank Account Data, Europe, which Actual's own documentation now lists as not accepting new accounts. Enable Banking is the current European route, with Akahu for New Zealand and Pluggy.ai for Brazil.
  • CSV by hand. Download, import, categorize. Firefly III's import rules classify and split automatically once trained, and this is the path most self-hosters end up on.

Mint's "it does it for you" property. Automatic categorization, bill reminders, credit score, net worth across every account you ever linked. None of it comes back. Firefly III reconciles to the cent, but only because you told it what everything was.

The mobile app. Actual is a responsive web app you install to a home screen and Firefly III has community clients. Neither has a widget or a share sheet.

Get your data out first#

If you are leaving YNAB, there are two different files and you want both.

  1. YNAB's own export, from the budget settings, gives you a zip with a register CSV and a budget CSV. This is your permanent human-readable archive. Keep it forever. It is not what Actual imports.
  2. The nYNAB JSON, which is what Actual's importer actually wants. Actual's documentation points at a json-exporter web tool that authorizes against your YNAB account, or you can generate a Personal Access Token in YNAB's developer settings and pull it yourself with the ynab-export CLI, the API documentation interface, or curl.

Then import: open Actual, use the dropdown to Close File, choose Import file, choose nYnab, and select the JSON.

What survives: accounts, categories, category groups and transactions. What needs hand work, and Actual's docs are direct about it:

  • Credit card debt is recategorized by hand. Actual does not carry debt over the way YNAB does, and this is the largest single cleanup task.
  • Leftover money in To Budget is expected after an import and has two common causes; you reconcile it rather than assume the import failed.
  • Duplicate category names get renamed with a -1 suffix rather than merged.
  • Budget allocations for historical months are the part that reproduces least faithfully. Check three past months against YNAB before you cancel.

If you are leaving Mint, there is nothing left to export and Credit Karma does not restore your history. A transactions.csv saved before the shutdown has date, description, amount, category and account, and both tools take it. Otherwise download everything your bank still offers, usually 12 to 24 months, and accept that your history starts there.

For Firefly III, imports go through fireflyiii/data-importer, a separate container by design. It takes CSV, camt.053 and aggregator connections over the API, and needs FIREFLY_III_URL set to the address reachable on the container network (http://app:8080 in the official compose). Any other value returns a 500 rather than a useful message.

Which one to run#

Pick on the question you ask your money, not on the feature list. If the question is "can I afford this next week", that is envelope budgeting and it is Actual. If the question is "where did 40,000 go last year and does it balance", that is a ledger and it is Firefly III.

Your situationRunWhy
You are coming from YNAB and liked the methodActual BudgetSame envelope model, nYNAB importer, one container, no database service
You want the app to work when the server is downActual BudgetLocal-first: every device holds a full copy and edits apply locally first
You reconcile against real statements to the centFirefly IIIDouble-entry means balances hold rather than approximate
Multi-currency, many accounts, a household ledgerFirefly IIIBuilt for it; Actual's reporting is deliberately narrower
Your bank offers CSV or camt.053 and no APIFirefly IIIThe data importer plus import rules is the strongest part of the product
You will not run a cron containerActual BudgetFirefly III silently stops materializing recurring transactions without one

Actual Budget vs Firefly III goes through the day-to-day differences.

What the migration actually costs#

Actual Budget: about an hour to stand up. One container, no database service, publish 5006, mount one volume at /data, set a server password on first visit. Then 3 to 8 hours cleaning up the YNAB import, mostly credit cards and historical budget months. Watch ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB, which defaults to 20: Actual stores every mutation in the budget file, so it grows steadily even when transaction count does not, eventually hits the ceiling, and presents as sync failures rather than a size warning. The fix is Reset Sync, which compacts history and forces every other device to revert and re-download.

Firefly III: half a day, then a month. Four containers in the shape most people land on: fireflyiii/core on 8080, a mariadb:lts, a small Alpine container running crond, and the data importer published separately. APP_KEY must be exactly 32 characters, STATIC_CRON_TOKEN exactly 32 characters, DB_CONNECTION must match your database because it defaults to mysql and a Postgres stack that skips it fails at startup with a connection error that names nothing useful, and TRUSTED_PROXIES=** behind any reverse proxy or you get http:// links inside an HTTPS site and login loops that look like session bugs.

Ongoing, both: a backup that you have restored. For Actual that is /data, holding server-files/account.sqlite and user-files/, plus a scheduled export from the app itself (Settings, Export Data), which is the only readable artifact that survives losing the server. For Firefly it is a mysqldump or pg_dump, the upload volume at /var/www/html/storage/upload, and APP_KEY, because Laravel uses it for encrypted values and a dump restored under a different key leaves data you cannot fully read.

Firefly III also has an upgrade scar worth knowing: v6.6.0 invalidated every OAuth token and client, so the data importer and any script talking to the API had to be reconfigured with newly generated tokens in the same window.

What breaks and how to tell early#

  • Bank sync, on day one. Link one account and see what arrives. On SimpleFIN, note the 90 day ceiling before you assume you can backfill a year.
  • Phone. Add a transaction at a checkout. If that takes longer than pocketing the receipt, you will stop reconciling.
  • Sharing with a partner. Actual handles a household sharing one budget across devices; real multi-user needs its preview OIDC login. Firefly III trusts a proxy-injected header and dropped LDAP, so Authelia in front is the pattern.
  • Restores that undo themselves. Actual's server holds change history, so restoring an older local file and letting it sync pulls you straight back. The order is restore, reset sync from that device, then revert every other device.
  • The silent cron. For Firefly III, put a check on the cron container. Nothing else tells you it stopped.

The point of no return#

One rule dominates everything else here.

Write the Actual encryption password into Vaultwarden or a password manager the moment you set it, and store a printed copy somewhere physical. It cannot be reset, recovered or brute-forced. The server cannot help because the server cannot read the data. Bank sync credentials, incidentally, are stored on the server and explicitly not covered by that encryption, so an encrypted budget still leaves live banking connections on that disk.

Then, before you cancel YNAB:

  1. Restore /data (or your Firefly dump plus upload volume plus APP_KEY) onto a different machine and open last month's budget.
  2. Reconcile one full month against a real bank statement and get it to zero.
  3. Export from the app itself, not just the server volume, and keep it offsite with restic.
  4. Keep the YNAB register and budget CSVs forever. They are the only copy that opens in ten years without any of this software.

Next#

Read Backups that actually restore and Backing up a running database before your first month closes, because a finance ledger is the one thing on your server where a silent corruption is worse than an outage. The rest of the category is in Productivity.

Questions#

What is the actual difference between Actual Budget and Firefly III?

Actual is envelope budgeting: you give every dollar a job this month, categories hold balances, and overspending in one envelope means moving money from another. That is YNAB's model. Firefly III is double-entry accounting: every transaction moves value between two accounts, so a salary is a deposit from a revenue account into checking and groceries are a withdrawal to an expense account. Firefly tells you what happened with arithmetic that reconciles to the cent. Actual tells you what you are allowed to spend next week.

Which one should a YNAB user pick?

Actual Budget, without much hesitation. It implements the same mental model, it imports an nYNAB export, and it is one container at 120 MB idle with no database service. Firefly III will feel wrong to a YNAB user because budgets there are a reporting overlay on a ledger rather than the primary object, and the usual outcome is abandoning it after a month of fighting the model.

Can I lose my data with Actual's end-to-end encryption?

Yes, permanently, and people confuse this with the server login password. The server login password can be reset with no data loss. The encryption password cannot be reset, recovered or brute-forced: the key is derived from it on your device and the server holds only opaque blobs. If you still have a local copy you can reset the key, which forces a sync reset. If you have neither the password nor a local copy, user-files/ is noise. Encryption is also one-way and cannot be turned off.

Do I get automatic bank transactions?

Only through a third-party aggregator, and the options are regional. Actual supports SimpleFIN Bridge for North America at 1.50 US dollars a month or 15 a year, pulling at most 90 days per account and updating roughly once daily. In Europe, GoCardless Bank Account Data is listed as not accepting new accounts, with Enable Banking as the alternative; Akahu covers New Zealand and Pluggy.ai covers Brazil. Firefly III's separate data importer takes CSV, camt.053 and aggregator connections with your own credentials.

Is my Mint data recoverable?

No. Intuit announced Mint would close on 31 December 2023, moved the date to 23 March 2024, and pushed users to Credit Karma, which does not restore Mint's transaction history or categories. If you downloaded the transactions CSV before the shutdown, that file is your history and both tools will import it. If you did not, your bank's own statement downloads are the only source, and most banks only offer 12 to 24 months.

Why do my Firefly III recurring transactions never appear?

Because Firefly III ships no scheduler. The official compose adds a small Alpine container whose crontab fetches /api/v1/cron/$STATIC_CRON_TOKEN at 03:00 daily, and that token must be exactly 32 characters or the endpoint refuses it. Without that container running, recurring transactions never materialize and bills are never marked paid or due, with no warning at all. You find out weeks later when the numbers stop matching reality.

Sources#

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.