Mint is dead. YNAB costs $99/year. Your bank’s budgeting tools are terrible. Actual Budget is the answer — a fast, privacy-first budgeting app you can self-host for free.

Originally a paid product, Actual was open-sourced in 2022 and is now maintained by a thriving community. It’s one of the best self-hosted finance tools available, with envelope budgeting, bank sync, and a beautiful UI that works on desktop and mobile.

Why Actual Budget?

  • Envelope budgeting — assign every dollar a job (YNAB-style)
  • Bank sync — automatic transaction imports via GoCardless (free for personal use)
  • Fast — local-first architecture, syncs in the background
  • Multi-device — access from any browser, sync across devices
  • Import — migrate from YNAB, Mint, or any CSV/OFX/QFX export
  • Reports — spending trends, net worth, cash flow charts
  • Rules — auto-categorize transactions
  • 100% private — your financial data never leaves your server

Prerequisites

  • A Linux server with Docker and Docker Compose
  • ~128MB RAM (very lightweight)
  • A domain or local IP for access

Step 1: Create the Project Directory

mkdir -p ~/actual-budget && cd ~/actual-budget

Step 2: Docker Compose Setup

Create docker-compose.yml:

services:
  actual:
    image: actualbudget/actual-server:latest
    container_name: actual-budget
    ports:
      - "5006:5006"
    volumes:
      - ./data:/data
    restart: unless-stopped

That’s it. Actual is refreshingly simple to deploy.

Step 3: Start the Server

docker compose up -d

Step 4: Initial Setup

  1. Open http://your-server-ip:5006 in your browser
  2. Create a password — this encrypts your budget file
  3. Click Create a budget (or import from another app)

Important: Remember this password. It encrypts your data at rest. There’s no recovery if you lose it.

Step 5: Set Up Your Budget

Create Categories

Actual uses envelope budgeting. Start with these category groups:

  • Fixed Expenses — Rent, utilities, insurance, subscriptions
  • Variable Expenses — Groceries, gas, dining, entertainment
  • Savings Goals — Emergency fund, vacation, new laptop
  • Debt — Credit cards, loans

Add Your Accounts

Go to Accounts → Add Account:

  • Checking account
  • Savings account
  • Credit cards
  • Cash (for tracking physical spending)

Enter current balances for each.

Budget Your Income

When you get paid:

  1. Go to the current month’s budget
  2. Click Ready to Assign (the money waiting to be budgeted)
  3. Assign dollars to each category until Ready to Assign hits $0

The goal: every dollar has a job before you spend it.

Step 6: Enable Bank Sync (Optional)

Actual supports automatic bank sync through GoCardless (formerly Nordigen):

  1. Go to GoCardless Bank Account Data
  2. Sign up for a free account (90-day transaction history, personal use)
  3. Create a new secret and ID
  4. In Actual: Settings → Show advanced settings → GoCardless
  5. Enter your secret ID and key
  6. Link each account to your bank

Transactions will sync automatically. You’ll still need to categorize them (or set up rules).

Auto-Categorization Rules

Go to Accounts → [Account] → Rules:

IIIfffppaaamyyoeeueentccooinnsttaaeiixnnassct""lGNyREOT-CF1EL2RI0YX0""ssseeetttcccaaattteeegggooorrryyytttooo"""RGSerunobtcs"ecrriiepst"ions"

Rules save massive time once you’ve been running for a month.

Step 7: Set Up Mobile Access

Actual works great in mobile browsers. For the best experience:

  1. Put Actual behind a reverse proxy with HTTPS (see our Caddy guide or Traefik guide)
  2. On your phone, open the URL and Add to Home Screen
  3. It behaves like a native app

Example Caddy config:

b}udgerte.vyeorusred_opmraoixny.cloomca{lhost:5006

Step 8: Backups

Your budget data lives in ./data/. Back it up regularly:

# Simple backup script
#!/bin/bash
tar -czf ~/backups/actual-$(date +%Y%m%d).tar.gz -C ~/actual-budget data/
# Keep only last 30 backups
ls -t ~/backups/actual-*.tar.gz | tail -n +31 | xargs rm -f 2>/dev/null

Add to cron for daily backups:

crontab -e
# Add:
0 3 * * * /home/user/backup-actual.sh

Migrating from Other Apps

From YNAB

  1. In YNAB: Export Budget (Settings → Export)
  2. In Actual: Import → YNAB4 or nYNAB
  3. Categories, transactions, and balances transfer automatically

From Mint (CSV)

  1. Download your Mint transaction CSV
  2. In Actual: Accounts → Import → CSV
  3. Map columns (date, payee, amount, category)

From any bank (OFX/QFX)

  1. Download statements from your bank in OFX or QFX format
  2. In Actual: Accounts → Import → OFX/QFX

Resource Usage

Actual is extremely lightweight:

MetricUsage
RAM~80MB
CPUMinimal (spikes during sync)
Disk~50MB + your data
NetworkLow (sync only)

It’ll run happily on a Raspberry Pi alongside your other services.

Troubleshooting

Can’t connect from other devices

  • Check firewall: sudo ufw allow 5006
  • Use your server’s LAN IP, not localhost
  • For remote access, set up a reverse proxy + VPN/Tailscale

Bank sync not working

Budget file corrupted

  • Actual auto-saves backups in ./data/backups/
  • Restore: replace the main budget file with a backup copy
  • Your external backups (Step 8) are additional safety

Slow with many transactions

  • Actual handles 10,000+ transactions fine
  • If sluggish, close other budget files you’re not using
  • Clear old closed accounts you don’t need for reporting

Actual vs the Competition

FeatureActualYNABMint (RIP)Firefly III
PriceFree$99/yrFree (was)Free
Self-hosted
Bank sync
Envelope budgetingPartial
Mobile appPWANativeNativePWA
Speed⚡ FastGoodSlowModerate
Privacy✅ Full❌ Cloud❌ Ads✅ Full
Setup difficultyEasyN/AN/AModerate

Conclusion

Actual Budget is proof that self-hosting can be better than paid alternatives. It’s faster than YNAB, more private than Mint ever was, and costs nothing to run.

If you’re serious about budgeting and serious about owning your data, Actual is a no-brainer. Set it up in 5 minutes, import your accounts, and take control of your finances — on your own terms.