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
- Open
http://your-server-ip:5006in your browser - Create a password — this encrypts your budget file
- 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:
- Go to the current month’s budget
- Click Ready to Assign (the money waiting to be budgeted)
- 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):
- Go to GoCardless Bank Account Data
- Sign up for a free account (90-day transaction history, personal use)
- Create a new secret and ID
- In Actual: Settings → Show advanced settings → GoCardless
- Enter your secret ID and key
- 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:
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:
- Put Actual behind a reverse proxy with HTTPS (see our Caddy guide or Traefik guide)
- On your phone, open the URL and Add to Home Screen
- It behaves like a native app
Example Caddy config:
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
- In YNAB: Export Budget (Settings → Export)
- In Actual: Import → YNAB4 or nYNAB
- Categories, transactions, and balances transfer automatically
From Mint (CSV)
- Download your Mint transaction CSV
- In Actual: Accounts → Import → CSV
- Map columns (date, payee, amount, category)
From any bank (OFX/QFX)
- Download statements from your bank in OFX or QFX format
- In Actual: Accounts → Import → OFX/QFX
Resource Usage
Actual is extremely lightweight:
| Metric | Usage |
|---|---|
| RAM | ~80MB |
| CPU | Minimal (spikes during sync) |
| Disk | ~50MB + your data |
| Network | Low (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
- GoCardless tokens expire after 90 days — reauthorize in settings
- Some banks have maintenance windows; retry in a few hours
- Check Actual’s bank compatibility list
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
| Feature | Actual | YNAB | Mint (RIP) | Firefly III |
|---|---|---|---|---|
| Price | Free | $99/yr | Free (was) | Free |
| Self-hosted | ✅ | ❌ | ❌ | ✅ |
| Bank sync | ✅ | ✅ | ✅ | ✅ |
| Envelope budgeting | ✅ | ✅ | ❌ | Partial |
| Mobile app | PWA | Native | Native | PWA |
| Speed | ⚡ Fast | Good | Slow | Moderate |
| Privacy | ✅ Full | ❌ Cloud | ❌ Ads | ✅ Full |
| Setup difficulty | Easy | N/A | N/A | Moderate |
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.