# Firefly III

Self-hosted double-entry personal finance manager with a REST API that covers almost everything.

Firefly III tracks accounts, transactions, budgets, categories, bills, piggy banks and rules on your own server. The Builder ships a JSON REST API that mirrors the UI, so an agent can book transactions, manage budgets and pull reports. Bank imports run through a separate Data Importer tool.

Alternative to: YNAB, Quicken

- Capabilities: adaptable, operable
- Vertical: invoicing-finance
- Shape: product
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/firefly-iii/firefly-iii (AGPL-3.0), 24484 stars, last commit 2026-09-02
- Last activity: 2026-09-02
- Page: apps/firefly-iii--firefly-iii.html
- JSON: apps/firefly-iii--firefly-iii.json

## Use it when

- I want my money tracked on my own server and my agent to file transactions and check budgets
- I run a sole trade and need double-entry books without paying for accounting software

## Gotchas

- AGPL-3.0: modifications you host for others must be published
- Personal finance by design; no invoicing, client portal or tax reports
- Bank imports need the separate Data Importer container and its own credentials

## Editions

- Free: Free, open source
  - source: https://github.com/firefly-iii/firefly-iii
  - container: https://docs.firefly-iii.org/how-to/firefly-iii/installation/docker/

## Adaptable: make it yours

Effort: config-only (16 things to edit)

Copy .env.example and set the app key, database, timezone, language and mail driver; optional single sign-on through AUTHENTICATION_GUARD. Behavior beyond deployment (rules, budgets, currencies) is data you create in the app or over the API.

- Env vars: APP_KEY, APP_URL, DB_CONNECTION, DB_HOST, DB_DATABASE, DB_USERNAME, TZ, DEFAULT_LANGUAGE, DEFAULT_LOCALE, MAIL_MAILER, MAIL_HOST, AUTHENTICATION_GUARD, STATIC_CRON_TOKEN, TRUSTED_PROXIES, SITE_OWNER
- Config files: .env
- Prompt files: none
- Accounts you'll need: SMTP or Mailgun provider (optional); GoCardless or Spectre account for bank import through the Data Importer (optional)

## Operable: what an agent can drive

Operability: official. Interface: api at https://api-docs.firefly-iii.org/ (published by the builder, local).

### Reach (partial coverage)

- Accounts and balances: reachable. routes/api.php prefixes v1/accounts, v1/summary
- Book and search transactions: reachable. routes/api.php v1/transactions, v1/transaction-journals, v1/search
- Budgets and budget limits: reachable. routes/api.php v1/budgets, v1/budget-limits, v1/available-budgets
- Categories and tags: reachable. routes/api.php v1/categories, v1/tags
- Rules for automatic transaction handling: reachable. routes/api.php v1/rules, v1/rule-groups
- Recurring transactions and bills: reachable. routes/api.php v1/recurrences, v1/bills, v1/subscriptions
- Piggy banks (saving goals): reachable. routes/api.php v1/piggy-banks
- Reports and charts: reachable. routes/api.php v1/insight/expense, v1/insight/income, v1/chart/*
- Attachments and data export: reachable. routes/api.php v1/attachments, v1/data/export
- Import bank statements: not reachable. import is a separate Firefly III Data Importer tool with its own config; the core API only accepts transactions you already parsed

## Code stack

- Languages: PHP, JavaScript
- Frameworks: Laravel
- Package manager: composer
- Database: MySQL, PostgreSQL, SQLite
- Hosting target: Docker, Kubernetes, VM, Cloudron, YunoHost

## Evidence and confidence

- formFactor: Laravel web app, Docker image (README) (confidence 0.95)
- executionModel: no model at runtime (confidence 0.95)
- operability: README: 'REST JSON API that covers almost every part of Firefly III'; api-docs.firefly-iii.org published by the Builder; routes/api.php in repo (confidence 0.95)
- effort: .env.example in repo lists deployment variables (confidence 0.85)
- editions: README: free and open source, donations only (confidence 0.95)
- active: GitHub pushedAt 2026-09-02
- reach:  (confidence 0.85)

## Open questions

- api-docs.firefly-iii.org returned 403 to the fetcher; Reach was read from routes/api.php instead
- Which MCP wrapper (Knuckles-Team/firefly-iii-mcp or scarela/rs-fireflyiii-mcp) is worth naming for MCP-only clients

## Sources

- https://github.com/firefly-iii/firefly-iii (sourcing:invoicing-finance:github)
- https://github.com/firefly-iii/firefly-iii/blob/main/routes/api.php (analysis:invoicing-finance)
- https://api-docs.firefly-iii.org/ (sourcing:invoicing-finance:github)
