← All articles
PRODUCTIVITY Self-Hosting Firefly III: A Free Alternative to Mint... 2026-02-09 · firefly-iii · personal-finance · budgeting

Self-Hosting Firefly III: A Free Alternative to Mint and YNAB

Productivity 2026-02-09 firefly-iii personal-finance budgeting money-management

After Mint shut down in early 2024, millions of people found themselves looking for a personal finance tool they could actually trust to stick around. YNAB costs $99/year. Every free alternative seems to either sell your data or pivot to a paid model within a few years.

Firefly III is a self-hosted personal finance manager that solves this permanently. It's free, open source, and runs on your own server. Your financial data never touches anyone else's infrastructure, and no company can decide to shut it down or change the pricing.

What Firefly III Does

Firefly III is a full-featured personal finance application. Despite the name suggesting it's a third iteration, it's actually the only version -- the "III" is just part of the brand. Here's what it handles:

Docker Compose Setup

Firefly III requires a database (MySQL or PostgreSQL) and optionally a data importer for pulling transactions from your bank.

# docker-compose.yml
services:
  firefly:
    image: fireflyiii/core:latest
    container_name: firefly
    ports:
      - "8080:8080"
    volumes:
      - firefly_upload:/var/www/html/storage/upload
    environment:
      - APP_KEY=CHANGE_ME_32_CHAR_RANDOM_STRING_
      - DB_HOST=firefly-db
      - DB_PORT=5432
      - DB_CONNECTION=pgsql
      - DB_DATABASE=firefly
      - DB_USERNAME=firefly
      - DB_PASSWORD=change_this_password
      - APP_URL=http://localhost:8080
      - TRUSTED_PROXIES=**
      - TZ=America/New_York
    depends_on:
      - firefly-db
    restart: unless-stopped

  firefly-db:
    image: postgres:16
    container_name: firefly-db
    volumes:
      - firefly_db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=firefly
      - POSTGRES_USER=firefly
      - POSTGRES_PASSWORD=change_this_password
    restart: unless-stopped

  data-importer:
    image: fireflyiii/data-importer:latest
    container_name: firefly-importer
    ports:
      - "8081:8080"
    environment:
      - FIREFLY_III_URL=http://firefly:8080
      - FIREFLY_III_ACCESS_TOKEN=  # Generate after first login
    depends_on:
      - firefly
    restart: unless-stopped

volumes:
  firefly_upload:
  firefly_db:

Generate the APP_KEY before starting:

head -c 32 /dev/urandom | base64 | head -c 32

Replace CHANGE_ME_32_CHAR_RANDOM_STRING_ with the output, then start everything:

docker compose up -d

Open http://your-server:8080, create your account, and you're in.

Firefly III data flow Bank CSV / API exports Data Importer CSV mapping GoCardless / Spectre Firefly III REST API Rule engine PostgreSQL Transactions & accounts Dashboard Reports Budgets & charts All financial data stays on your server — no third-party access

Understanding Double-Entry Bookkeeping

Firefly III uses double-entry bookkeeping, which sounds intimidating but is actually intuitive once you see it. Every transaction has two sides:

In practice, this means:

Paycheck: Revenue:Employer → Asset:Checking ($3,000)
Rent:     Asset:Checking → Expense:Housing ($1,200)
Savings:  Asset:Checking → Asset:Savings ($500)

You don't need to understand accounting theory to use Firefly III. The interface handles the double-entry mechanics for you -- when you record buying groceries, it automatically creates the proper withdrawal from your checking account to the groceries expense category.

Importing Transactions

Manual entry works for some people, but most want to import transactions from their bank. Firefly III supports several methods:

CSV Import

Most banks let you export transactions as CSV. The data importer (running on port 8081 in the compose file above) handles CSV mapping:

  1. Generate a Personal Access Token in Firefly III (Options > Profile > OAuth)
  2. Add the token to the FIREFLY_III_ACCESS_TOKEN environment variable and restart the importer
  3. Upload your bank's CSV file
  4. Map columns (date, amount, description, etc.) to Firefly III fields
  5. Save the mapping configuration for future imports

Automated Bank Imports via GoCardless

For automated bank syncing (primarily European banks), the data importer supports GoCardless (formerly Nordigen):

  1. Create a free GoCardless account
  2. Add your NORDIGEN_ID and NORDIGEN_KEY to the data importer environment
  3. Connect your bank through the importer's web interface
  4. Schedule imports with a cron job
# Run import daily at 6 AM
0 6 * * * docker exec firefly-importer php artisan importer:auto-import /import-configs/

Spectre / Salt Edge (Worldwide)

For banks outside Europe, Spectre by Salt Edge provides similar connectivity, though it requires a paid plan for full access.

Setting Up Budgets

Firefly III's budgeting approach is straightforward:

  1. Create budget categories: Groceries, Dining Out, Transportation, Entertainment, etc.
  2. Set monthly limits: Assign a dollar amount to each budget
  3. Track spending: As you record transactions, Firefly III shows remaining budget per category
  4. Review: Monthly reports show where you went over or under budget

Budgets reset monthly by default. You can set different amounts for different months if your spending varies (holiday season, vacations, etc.).

Unlike YNAB's envelope method where every dollar gets assigned a job, Firefly III's budgeting is more traditional -- you set limits on categories you want to control and let the rest flow through unbudgeted.

Piggy Banks (Savings Goals)

Piggy banks are virtual savings containers linked to an asset account. They don't move real money -- they just help you mentally allocate funds:

Each piggy bank shows a progress bar and tracks contributions over time. You add or remove money from piggy banks when you record transactions or transfers.

The REST API

Firefly III has a comprehensive REST API that opens up significant automation possibilities:

# List all accounts
curl -s -H "Authorization: Bearer YOUR_TOKEN" \
  http://localhost:8080/api/v1/accounts | jq '.data[].attributes.name'

# Create a transaction
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  http://localhost:8080/api/v1/transactions \
  -d '{
    "transactions": [{
      "type": "withdrawal",
      "date": "2026-02-09",
      "amount": "45.99",
      "description": "Grocery run",
      "source_name": "Checking Account",
      "destination_name": "Groceries"
    }]
  }'

Useful API automations:

Firefly III vs the Alternatives

Feature Firefly III YNAB Actual Budget Mint (defunct)
License AGPLv3 (free) Proprietary ($99/yr) MIT (free) Proprietary (free)
Self-hosted Yes No Yes No
Bank sync Via importer Built-in GoCardless Built-in
Budgeting method Traditional Envelope (every dollar) Envelope Traditional
Double-entry Yes No No No
Multi-currency Yes Limited No No
API Full REST API Limited API Sync API None
Mobile app None (responsive web) Native iOS/Android None (responsive web) Native iOS/Android
Learning curve Medium Medium Low Low
Data privacy Complete Cloud-hosted Complete Third-party access

When to Choose Firefly III

When to Choose YNAB Instead

When to Choose Actual Budget

Practical Tips

Backup Your Database

Financial data is irreplaceable. Back up the PostgreSQL database regularly:

docker exec firefly-db pg_dump -U firefly firefly > firefly_backup_$(date +%Y%m%d).sql

Use Rules for Automatic Categorization

Under Automation > Rules, set up rules like:

Rules run on new transactions and can be applied retroactively to existing ones.

Set Up Recurring Transactions

For predictable bills (rent, subscriptions, loan payments), create recurring transactions. Firefly III will auto-create them on the scheduled dates, saving you from manual entry every month.

Verdict

Firefly III is the most complete self-hosted personal finance tool available. It takes more effort to set up than signing up for YNAB, and it lacks the polish of a commercial product -- particularly on mobile. But it gives you something no commercial service can: permanent, complete ownership of your financial data with no recurring fees and no risk of the product shutting down. For anyone who has been burned by a financial service disappearing (looking at you, Mint), that stability matters.