Skip to main content

How to Self-Host Actual Budget: YNAB Alternative 2026

·OSSAlt Team
actual-budgetynabpersonal-financebudgetingself-hostingdocker2026

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

FeatureActual BudgetYNABFirefly III
LicenseMITProprietaryAGPL 3.0
CostFree (hosting)$99/yearFree (hosting)
Zero-based budgetingYesYesNo (envelope)
Bank syncGoCardless/SimpleFINYes (built-in)Yes (Nordigen)
Local-firstYesNoNo
Mobile appPWAiOS/AndroidPWA
GitHub Stars~15K~14K
Data ownershipFullYNAB's serversFull

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

  1. Visit https://budget.yourdomain.com
  2. Create server password (protects access to the sync server)
  3. Create budget — Start fresh or import from YNAB
  4. 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

  1. Click on account → + Add Transaction
  2. Date, payee, category, amount
  3. 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):

  1. Sign up at simplefin.org
  2. Connect your bank accounts
  3. In Actual → Settings → Advanced → Enable Bank Sync
  4. Enter your SimpleFIN Access URL

GoCardless (European Banks)

For European banks:

  1. Sign up at GoCardless (free tier available)
  2. Get API ID and Secret Key
  3. 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:

  1. On a second device, visit https://budget.yourdomain.com
  2. Enter server password
  3. 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:

  1. In YNAB: Export Budget (Settings → Export Budget Data)
  2. In Actual: File → Import → YNAB4 or YNAB5
  3. Select your exported .json file
  4. 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.

Comments