What Actual Does
Actual provides a comprehensive budgeting experience:
- Envelope Budgeting: Allocate every dollar to a category, carry forward or roll over between months
- Transaction Management: Manual entry or import from bank (QIF, OFX, CSV) with smart categorization
- Bank Sync: Optional automated bank connection via GoCardless/SimpleFIN for transaction import
- Multi-device Sync: Encrypted sync between devices via self-hosted server
- Reports: Spending by category, net worth tracking, cash flow analysis
- Rules: Auto-categorize transactions based on payee, amount, or notes
- Split Transactions: Split a single transaction across multiple categories
- Scheduled Transactions: Recurring bills and income with reminders
Architecture
┌──────────────┐ ┌──────────────┐
│ Browser │────▶│ Actual │
│ (React PWA) │ │ Server │
│ Local SQLite│ │ (Node.js) │
└──────────────┘ │ Sync Engine │
└──────────────┘Key design: Data lives in a local SQLite database in your browser (IndexedDB). The server is only needed for multi-device sync. You can use Actual entirely offline.
Self-Hosting
Docker Compose
services:
actual:
image: actualbudget/actual-server:latest
ports:
- "5006:5006"
volumes:
- actual-data:/data
restart: unless-stopped
volumes:
actual-data:That's it — no database to configure, no dependencies. The server just handles sync.
With Bank Sync
services:
actual:
image: actualbudget/actual-server:latest
ports:
- "5006:5006"
environment:
ACTUAL_NORDIGEN_SECRET_ID: your-gocardless-id
ACTUAL_NORDIGEN_SECRET_KEY: your-gocardless-key
# Or SimpleFIN:
# ACTUAL_SIMPLEFIN_TOKEN: your-simplefin-token
volumes:
- actual-data:/data
volumes:
actual-data:Key Features
Envelope Budgeting
Income: $5,000
├── Housing: $1,500 (assigned)
├── Groceries: $600 (assigned)
├── Transport: $300 (assigned)
├── Savings: $1,000 (assigned)
├── Entertainment: $200 (assigned)
├── Utilities: $200 (assigned)
└── Unassigned: $1,200 (left to budget)Every dollar of income gets assigned to a category. Overspending in one category borrows from another, keeping you accountable.
Smart Rules
Auto-categorize transactions:
If payee contains "Starbucks" → Category: Coffee
If payee contains "Amazon" and amount > $50 → Category: Shopping
If payee contains "Netflix" → Category: SubscriptionsReports
- Net Worth: Track assets vs liabilities over time
- Spending by Category: Monthly and yearly breakdowns with trends
- Cash Flow: Income vs expenses visualization
- Custom date ranges: Compare any time periods
Local-First Benefits
- Speed: Instant UI — no waiting for server responses
- Offline: Works without internet connection
- Privacy: Data stays on your device, encrypted at rest
- Resilience: No server downtime affects your access
Actual vs Alternatives
| Feature | Actual | YNAB | Mint | Monarch |
|---|---|---|---|---|
| Open Source | Yes (MIT) | No | No | No |
| Self-hosted | Yes | No | No | No |
| Offline | Yes (local-first) | No | No | No |
| Bank sync | GoCardless/SimpleFIN | Plaid | Plaid | Plaid |
| Pricing | Free (self-host) | $14.99/mo | Free (discontinued) | $9.99/mo |
| Envelope budgeting | Yes | Yes | No | Yes |
FAQ
Q: How does Actual compare to YNAB? A: Actual implements YNAB's core envelope-budgeting methodology with a very similar UI and UX. Main differences: Actual is free, open source, and self-hostable; YNAB is a SaaS subscription. YNAB has richer bank connections and community tutorials; Actual is stronger on privacy and autonomy.
Q: Does it support Chinese banks? A: Automatic bank sync (GoCardless/SimpleFIN) mainly covers European and U.S. banks. Chinese users can import bank statements manually (CSV format).
Q: Is my data safe? A: Yes. Data is stored locally in your browser, and sync uses end-to-end encryption. Even if a self-hosted server is compromised, attackers cannot read your financial data.