{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "actualbudget--actual",
    "name": "Actual Budget",
    "tagline": "Local-first envelope budgeting with an official Node API package and CLI.",
    "shortTagline": "Envelope budgeting with a CLI",
    "description": "Actual is a free, MIT-licensed budgeting app with a sync server you can self-host. The Builder publishes @actual-app/api, which opens a budget file (local or against your server) and exposes accounts, transactions, budgets, categories, payees, rules, schedules, bank sync and an ActualQL query engine. Personal finance, at the edge of this vertical.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "invoicing-finance",
    "alternativeTo": [
      "YNAB",
      "Monarch Money",
      "Mint"
    ],
    "shape": "product",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "TypeScript",
        "JavaScript"
      ],
      "frameworks": [
        "React",
        "Electron",
        "Express"
      ],
      "packageManager": "yarn",
      "database": [
        "SQLite"
      ],
      "hostingTarget": [
        "Docker",
        "Fly.io",
        "PikaPods",
        "desktop installers"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/actualbudget/actual",
        "owner": "actualbudget",
        "name": "actual",
        "license": "MIT",
        "stars": 28532,
        "lastCommit": "2026-09-02"
      }
    ],
    "interface": {
      "kind": "sdk",
      "url": "https://actualbudget.org/docs/api/",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Envelope budgeting by month",
        "reachable": true,
        "evidence": "API methods getBudgetMonths, setBudgetAmount, setBudgetCarryover"
      },
      {
        "job": "Accounts and balances",
        "reachable": true,
        "evidence": "getAccounts, createAccount, closeAccount, getAccountBalance"
      },
      {
        "job": "Add, import and edit transactions",
        "reachable": true,
        "evidence": "addTransactions, importTransactions, getTransactions, updateTransaction"
      },
      {
        "job": "Categories, groups, payees and tags",
        "reachable": true,
        "evidence": "getCategories, createCategoryGroup, mergePayees, getTags"
      },
      {
        "job": "Rules for automatic categorization",
        "reachable": true,
        "evidence": "getRules, createRule, updateRule"
      },
      {
        "job": "Scheduled transactions",
        "reachable": true,
        "evidence": "getSchedules, createSchedule, updateSchedule"
      },
      {
        "job": "Bank sync (GoCardless, SimpleFIN)",
        "reachable": true,
        "evidence": "runBankSync; the bank link itself is set up once in the UI"
      },
      {
        "job": "Import from YNAB and other apps",
        "reachable": true,
        "evidence": "runImport, importBudget, exportBudget"
      },
      {
        "job": "Ad-hoc queries over your data",
        "reachable": true,
        "evidence": "runQuery with ActualQL"
      },
      {
        "job": "Custom reports and dashboards",
        "reachable": false,
        "evidence": "reports are built in the UI; the API returns data through runQuery but does not create report widgets"
      }
    ],
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/actualbudget/actual"
          },
          {
            "kind": "container",
            "url": "https://actualbudget.org/docs/install/docker"
          },
          {
            "kind": "binary",
            "url": "https://actualbudget.org/download/"
          },
          {
            "kind": "installable",
            "url": "https://www.npmjs.com/package/@actual-app/api",
            "command": "npm install @actual-app/api"
          }
        ]
      },
      {
        "name": "PikaPods managed hosting (third party)",
        "price": {
          "amount": 2,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://www.pikapods.com/pods?run=actual"
          }
        ]
      }
    ],
    "skills": {
      "kind": "contributor",
      "paths": [
        ".claude/skills/*/SKILL.md",
        ".agents/skills/"
      ],
      "install": null,
      "note": "Repo carries contributor-facing development skills (commits, PR review, VRTs, docs, release notes), not skills for end users of the budgeting app. [contributor tooling, not adopter-facing]"
    },
    "customization": {
      "summary": "The sync server reads config.json or ACTUAL_* env vars for port, data directories, login method (password, header or OpenID) and upload limits. Budget behavior is data inside the budget file; there is nothing else to edit unless you fork.",
      "envVars": [
        "ACTUAL_PORT",
        "ACTUAL_HOSTNAME",
        "ACTUAL_DATA_DIR",
        "ACTUAL_CONFIG_PATH",
        "ACTUAL_SERVER_FILES",
        "ACTUAL_USER_FILES",
        "ACTUAL_LOGIN_METHOD",
        "ACTUAL_ALLOWED_LOGIN_METHODS",
        "ACTUAL_HTTPS_KEY",
        "ACTUAL_HTTPS_CERT",
        "ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB",
        "ACTUAL_TRUSTED_PROXIES",
        "ACTUAL_TRUSTED_AUTH_PROXIES"
      ],
      "configFiles": [
        "config.json"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 14
    },
    "useWhen": [
      "I want a budget my agent can post transactions into and read balances from, with the file on my own machine",
      "I am moving off YNAB and want an app I can script"
    ],
    "accounts": [
      "GoCardless or SimpleFIN account for bank sync (optional)"
    ],
    "active": true,
    "lastActivity": "2026-09-02",
    "gotchas": [
      "Personal budgeting; no invoicing, clients or tax reporting",
      "The API opens the budget file directly and should not run against the same file the desktop app has open in some setups; read the API docs on sync",
      "A finished product: the Customization surface is deployment only"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "web client plus sync server; Electron desktop build in the same repo",
      "executionModel": "no model at runtime",
      "operability": "@actual-app/api and packages/cli shipped in the repo; docs at actualbudget.org/docs/api/reference",
      "effort": "actualbudget.org/docs/config lists config.json and ACTUAL_* variables",
      "editions": "README: 100% free and open source; PikaPods and Fly listed as paid hosting",
      "active": "GitHub pushedAt 2026-09-02"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.95,
      "operability": 0.95,
      "effort": 0.9,
      "reach": 0.9,
      "editions": 0.9
    },
    "openQuestions": [
      "Whether the in-repo packages/cli is published and documented for end users, or internal"
    ],
    "sources": [
      {
        "url": "https://github.com/actualbudget/actual",
        "foundBy": "sourcing:invoicing-finance:github"
      },
      {
        "url": "https://actualbudget.org/docs/api/reference",
        "foundBy": "analysis:invoicing-finance"
      },
      {
        "url": "https://actualbudget.org/docs/config/",
        "foundBy": "analysis:invoicing-finance"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Official SDK with near-complete Reach and MIT license. Adaptable 2: the surface is deployment config on a finished product. Personal finance, edge of vertical.",
      "disputed": []
    },
    "url": "apps/actualbudget--actual.html",
    "coverage": "partial",
    "paid": true,
    "source": "research/verified/actualbudget--actual.json"
  }
}
