How to Self-Host Actual Budget: YNAB Alternative 2026
TL;DR
Actual Budget (MIT, ~15K GitHub stars, TypeScript/Node.js) is a local-first, privacy-respecting personal finance app with zero-based budgeting (the same methodology as YNAB). Your data lives on your server — no subscription, no telemetry, complete ownership. YNAB costs $99/year. Self-hosted Actual is free. The sync server stores encrypted budgets so all your devices stay in sync.
Key Takeaways
- Actual Budget: MIT, ~15K stars, TypeScript — zero-based budgeting, local-first
- Local-first: Budget data is stored locally (SQLite) and synced via the server — not in a cloud database
- YNAB methodology: Zero-based budgeting — every dollar gets a job
- Bank sync: Optional GoCardless/SimpleFIN integration for automatic transaction import
- Mobile: Web app (PWA) — works as a home screen app on iOS/Android
- Privacy: End-to-end encrypted sync — your server never sees budget contents
Actual Budget vs YNAB vs Firefly III
| Feature | Actual Budget | YNAB | Firefly III |
|---|---|---|---|
| License | MIT | Proprietary | AGPL 3.0 |
| Cost | Free (hosting) | $99/year | Free (hosting) |
| Zero-based budgeting | Yes | Yes | No (envelope) |
| Bank sync | GoCardless/SimpleFIN | Yes (built-in) | Yes (Nordigen) |
| Local-first | Yes | No | No |
| Mobile app | PWA | iOS/Android | PWA |
| GitHub Stars | ~15K | — | ~14K |
| Data ownership | Full | YNAB's servers | Full |
Part 1: Docker Setup
# docker-compose.yml
services:
actual:
image: actualbudget/actual-server:latest
container_name: actual-budget
restart: unless-stopped
ports:
- "5006:5006"
volumes:
- actual_data:/data
environment:
ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB: "20"
ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB: "50"
volumes:
actual_data:
docker compose up -d
Visit http://your-server:5006.
Part 2: HTTPS with Caddy
HTTPS is required for Actual's service worker (PWA functionality and offline sync):
budget.yourdomain.com {
reverse_proxy localhost:5006
}
Part 3: Initial Setup
- Visit
https://budget.yourdomain.com - Create server password (protects access to the sync server)
- Create budget — Start fresh or import from YNAB
- Add your accounts:
- Checking account
- Savings account
- Credit cards
Part 4: Budget Setup (Zero-Based Method)
The zero-based budgeting principle: Income − Budgeted = $0
Every dollar you receive gets assigned to a category:
Budget Categories
INCOME THIS MONTH: $5,000
BILLS:
Rent/Mortgage: $1,500
Utilities: $150
Internet: $60
Phone: $60
NECESSITIES:
Groceries: $600
Gas: $150
SAVINGS:
Emergency Fund: $500
Vacation Fund: $200
DISCRETIONARY:
Dining Out: $200
Entertainment: $100
Shopping: $150
DEBT:
Car Payment: $350
TOTAL BUDGETED: $4,020
REMAINING: $980 ← assign to savings or next month
Adding Transactions
- Click on account → + Add Transaction
- Date, payee, category, amount
- Or import a CSV from your bank
Part 5: Bank Sync (Automatic Import)
SimpleFIN (US Banks)
SimpleFIN connects to US bank accounts ($1.50/month):
- Sign up at simplefin.org
- Connect your bank accounts
- In Actual → Settings → Advanced → Enable Bank Sync
- Enter your SimpleFIN Access URL
GoCardless (European Banks)
For European banks:
- Sign up at GoCardless (free tier available)
- Get API ID and Secret Key
- In Actual → Settings → Bank Sync → GoCardless
Manual Import (Any Bank)
Download transactions as CSV from your bank:
- Actual → Account → Import → Select CSV file
- Map columns: date, payee, amount
Part 6: Reports
Actual includes built-in reports:
- Net Worth: Track total assets vs liabilities over time
- Cash Flow: Monthly income vs expenses chart
- Spending Breakdown: Category breakdown for any period
- Custom Reports: Filter by account, category, date range
Part 7: Multi-Device Sync
All devices connect to your self-hosted sync server:
- On a second device, visit
https://budget.yourdomain.com - Enter server password
- Open existing budget → data syncs automatically
All sync data is end-to-end encrypted using a client-side encryption key. The server stores only ciphertext.
Part 8: YNAB Migration
Import your YNAB budget into Actual:
- In YNAB: Export Budget (Settings → Export Budget Data)
- In Actual: File → Import → YNAB4 or YNAB5
- Select your exported
.jsonfile - Budget categories, accounts, and transactions are imported
Advanced: Self-Hosted SimpleFIN Bridge
Run your own SimpleFIN-compatible bridge for free (requires your bank credentials):
services:
actual-sync:
image: ghcr.io/actualbudget/actual-server:latest
ports:
- "5006:5006"
volumes:
- actual_data:/data
See Actual Bridge for the self-hosted SimpleFIN alternative.
Maintenance
# Update Actual Budget:
docker compose pull
docker compose up -d
# Backup (SQLite files in volume):
tar -czf actual-backup-$(date +%Y%m%d).tar.gz \
$(docker volume inspect actual_actual_data --format '{{.Mountpoint}}')
# The backup contains encrypted budget files per user
# Logs:
docker compose logs -f actual
See all open source personal finance tools at OSSAlt.com/alternatives/ynab.