How to Self-Host Actual Budget: Personal Finance 2026
TL;DR
Actual Budget (MIT, ~15K GitHub stars, JavaScript) is a zero-based budgeting app — the same methodology as YNAB (You Need a Budget) but self-hosted and free. YNAB charges $14.99/month ($179.88/year). Actual Budget runs on your server, syncs across your devices, and supports bank import via OFX/CSV files or Simplifi/GoCardless integrations. Your financial data stays entirely on your hardware.
Key Takeaways
- Actual Budget: MIT, ~15K stars — zero-based budgeting, reports, reconciliation
- Local-first sync: Changes sync between your devices without sending data to any cloud
- Import transactions: OFX/CSV import from any bank's export feature
- Reports: Spending breakdown, net worth, budget vs actual comparisons
- Rules engine: Auto-categorize transactions based on payee patterns
- vs YNAB: Same methodology, free, self-hosted — no $15/month subscription
Zero-Based Budgeting Basics
Actual Budget follows zero-based budgeting:
- Every dollar has a job — assign all income to categories before spending
- Give every dollar a budget — groceries, rent, car, entertainment, savings
- Track actual spending — import transactions, match to categories
- Budget the future — not last month's income, but this month's actual available money
Income this month: $5,000
Budget:
├── Housing: $1,500
├── Groceries: $500
├── Transportation: $300
├── Utilities: $150
├── Entertainment: $200
├── Eating out: $200
├── Savings: $1,500
├── Emergency fund: $300
└── Buffer/miscellaneous: $350
─────────────────────
Total budgeted: $5,000 ← Every dollar assigned
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_HTTPS_KEY: "" # Leave empty to use Caddy for TLS
ACTUAL_HTTPS_CERT: ""
NODE_ENV: production
volumes:
actual_data:
docker compose up -d
Visit http://your-server:5006
Part 2: HTTPS with Caddy
budget.yourdomain.com {
reverse_proxy localhost:5006
}
Part 3: First Setup
Create your budget
- Visit
https://budget.yourdomain.com - Create new file → name your budget (e.g., "Personal 2026")
- Set password (optional but recommended)
Add accounts
- + Add account
- Name:
Checking,Savings,Credit Card,Investment - Account type: Checking / Savings / Credit card / Asset / Liability
- Starting balance: your current balance
Add budget categories
Default categories to create:
Income
├── Paycheck
└── Freelance income
Housing
├── Rent/Mortgage
└── Utilities
Food
├── Groceries
└── Eating out
Transportation
├── Car payment
├── Gas
└── Public transit
Personal
├── Entertainment
├── Clothing
└── Health/Medical
Savings
├── Emergency fund
├── Retirement
└── Vacation fund
Part 4: Import Bank Transactions
OFX/QFX/CSV import
- Log into your bank → Export transactions → OFX or CSV
- In Actual: Account → Import transactions
- Select your exported file
- Actual auto-maps columns for CSV:
- Date, Payee, Amount (negative = expense)
Auto-import with SimpleFIN Bridge (US banks)
# SimpleFIN Bridge provides bank connectivity for ~$1.50/month:
# 1. Get access token from simplefin.org
# 2. In Actual: Settings → Show advanced settings → Enable SimpleFIN sync
# 3. Add SimpleFIN token
# 4. Link your bank accounts
GoCardless (European banks)
# Add environment variables:
environment:
ACTUAL_NORDIGEN_SECRET_ID: "your-gocardless-secret-id"
ACTUAL_NORDIGEN_SECRET_KEY: "your-gocardless-secret-key"
Part 5: Budget Workflow
Monthly budgeting
- Budget tab → shows current month
- Available to budget → your unassigned income
- For each category: type in how much you're budgeting
- Goal: Available to budget = $0 (every dollar assigned)
Rollover (carryover)
Categories can roll over unspent money:
- Grocery budget: $500, spent $430 → $70 rolls to next month
- Helps smooth irregular expenses
When you overspend a category
Entertainment budget: $200
Spent: $250
Overspent by: $50
Options:
1. Move $50 from another category (e.g., Buffer)
2. Let it reduce next month's available money
Part 6: Transaction Rules
Auto-categorize transactions based on patterns:
- More → Rules → + Create rule
- Condition: Payee contains "TRADER JOE"
- Action: Set category to
Groceries - Apply to: New transactions
Rule examples:
- "NETFLIX" → Entertainment
- "SHELL" or "CHEVRON" → Transportation/Gas
- "AMAZON" → Shopping (or split rule)
- "CVS" or "WALGREENS" → Health
- Payee starts with "EMPLOYER NAME" → Income/Paycheck
Part 7: Reports
Spending breakdown
Reports → Spending → Shows:
- Spending by category (pie chart)
- Spending by month (bar chart)
- Year-to-date totals
Net worth
Reports → Net Worth → Tracks your assets minus liabilities over time:
Assets: Checking + Savings + Investments
Liabilities: Credit cards + Loans
Net worth = Assets - Liabilities
Budget vs actual
Reports → Budget → Compare what you budgeted vs what you actually spent per category.
Part 8: Multi-Device Sync
Actual syncs between your devices using end-to-end encrypted sync:
Desktop app
# Download Actual desktop app:
# actualbudget.org → Downloads
# Windows/Mac/Linux desktop apps available
# Connect to your server:
# File → Connect to server → https://budget.yourdomain.com
Mobile (PWA)
- Open
https://budget.yourdomain.comon your phone - Add to Home Screen (iOS: Share → Add to Home Screen)
- Works as a PWA — near-native experience
Maintenance
# Update:
docker compose pull
docker compose up -d
# Backup:
tar -czf actual-backup-$(date +%Y%m%d).tar.gz \
$(docker volume inspect actual-budget_actual_data --format '{{.Mountpoint}}')
# The backup includes your budget database file (.db)
# Keep multiple backups — financial data is critical
# Logs:
docker compose logs -f actual
See also: Firefly III — double-entry bookkeeping alternative
See all open source finance tools at OSSAlt.com/categories/finance.