Plain text and local-first
Firefly III
A self-hosted, open-source personal finance manager with double-entry books, a rules engine, a full REST API and a separate data importer.
firefly-iii.org · founded 2012 (started by James Cole for his own finances) · The Netherlands (a single maintainer) · researched 2026-10-10
- Scope
- Personal double-entry finance: asset, expense, revenue and liability accounts, budgets, categories, tags, piggy banks, recurring transactions, bill prediction, rules, webhooks and reports, in any currency. A separate Data Importer brings in CSV and CAMT files and pulls from bank data providers. The project says it is not for businesses: no small-business accounting or payroll, no stock portfolios, no forecasting, no subcategories or sub-accounts, and no shared administrations between users.
- Backing
- No company or outside funding. One developer, James Cole, builds it as a side project, supported by Patreon, GitHub Sponsors, Ko-fi and Liberapay. TestMu AI sponsors browser testing, and Hostinger and PikaPods pay small referral fees per hosting customer.
- Serves
- consumer
- Covers
- personal, ledger, bank, reporting
- To ownpurse
- Kin. Like ownpurse, it is self-hosted and private, and its API and importer reach many bank providers. But it is a personal ledger that keeps only the normalized, mapped transaction. Its duplicate check hashes the mapped result, which ownpurse avoids.
What it is
Firefly III is a free, self-hosted personal finance manager. James Cole, a developer in the Netherlands, started it in 2012 to manage his own money and still maintains it as a side project. It uses double-entry books underneath: asset, expense, revenue and liability accounts, budgets, categories, tags, piggy banks, recurring transactions, a rules engine, webhooks and reports in any currency. Its README sums it up as ‘No AI, no cloud and privacy-friendly’. The project is clear about what it is not: no business accounting or payroll, no stock portfolios, no forecasting, no subcategories, and no shared administrations between users.
How it works
You run it yourself as a PHP/Laravel web app: in Docker, on Kubernetes or on a plain server, against MySQL, PostgreSQL or SQLite. A separate Data Importer (also AGPL) brings data in from CSV, CAMT.052 and CAMT.053 files. It also pulls from bank data providers: GoCardless, Enable Banking, SimpleFIN, Lunch Flow, basiq, Sophtron, Teller and FinTS. It can run on a schedule from the CLI or by POST, so new transactions arrive and rules categorize them with no one watching.
Duplicate detection works two ways. The importer can skip a transaction whose unique identifier is already in Firefly. Firefly III also hashes each transaction the importer submits, after your mappings and column roles are applied but before rules and webhooks run. As a result, a changed mapping, a changed column role, different capitalization or a reissued bank id each produce a new hash, and the same bank line comes in twice. Editing a transaction afterwards does not update its hash. This is the pattern ownpurse avoids: identity depends on your interpretation, not on what the source said.
Data and access
The REST JSON API covers almost the whole app and is documented in Swagger. You authenticate with OAuth2 clients or personal access tokens. No scopes or rate limits are documented. The database is yours and nothing is metered. Bank providers charge on their own terms: SimpleFIN Bridge, for example, costs users $1.50 a month or $15 a year. There is no official hosted plan. PikaPods runs it from about $2.70 a month, and LumaDock and Hostinger also host it.
Agents
Firefly III has no AI features, and the maintainer’s stance is skeptical. Agents still find it easy to drive because the API is complete. About 45 community MCP repositories wrap it, the largest with 86 stars and one with 140 tools. Writes go straight in with a token. There is no review step, and rules and webhooks fire on whatever arrives.
Customers
Users are technically capable individuals and households who self-host. The main repository has 24.9k GitHub stars and 2.3k forks (10 October 2026). On AlternativeTo it rates 3.2/5 from 8 ratings. People praise its privacy, depth, rules and API. They complain about Docker-heavy setup, a strict CSV importer, the lack of subcategories, and a maintainer who declines many feature requests.
History
Firefly III is the third iteration of a project started in 2012. It has grown into one of the most-starred self-hosted finance apps, with frequent releases: v6.7.8 shipped on 10 October 2026, alongside daily develop builds. Bank access has followed the European market. GoCardless (formerly Nordigen) was the free route, and the importer added Enable Banking, Lunch Flow and others as GoCardless closed new sign-ups for bank data in July 2025.
For ownpurse
Firefly III shows that a single maintainer can sustain a rich self-hosted finance app with a complete API, and that a separate importer with small per-provider adapters is a workable shape. ownpurse should borrow the identifier-first duplicate check, the saved import configs and the unattended CLI runs. Its central lesson is a warning, though. Because the hash is taken after mapping, identity depends on the mapping. ownpurse identifies an observation by what the source sent (its id, a natural key, or the SHA-256 of the raw bytes in the drawer) and treats mapping as a projection that can be rerun. Firefly also lets any token or rule write straight to the books. ownpurse’s rule that agents propose and people post is the difference.
Data and access
- Public API
- Yes. REST JSON API (JSON:API-style media types), documented in Swagger/OpenAPI at api-docs.firefly-iii.org. It covers almost the whole application and adds webhooks with JSON delivery.
- Auth
- OAuth2 clients created on the profile page (confidential or public, through /oauth/authorize and /oauth/token), or personal access tokens sent as Bearer tokens. The docs describe no fine-grained scopes.
- Limits
- No documented rate limits on your own install. The public demo may block heavy use.
- What access costs
- Free on your own install. Bank providers set their own prices (for example, SimpleFIN Bridge charges users $1.50 a month or $15 a year as of 2026-10-10). GoCardless, Enable Banking and others have their own terms.
- Export
- The whole database is yours (MySQL, PostgreSQL or SQLite). Everything is also readable through the API. The app offers a CSV export of transactions.
- Notes
- The API changelog was not kept consistently before v6.4.0. Diffs are published from there on.
Price
- Model
- Free, open source, self-hosted. Third parties sell managed hosting.
- Entry
- $0 self-hosted. PikaPods from about $2.70 a month (2026-10-10).
- Top
- $0 for the software. Hosting and bank-data provider fees are separate.
- Notes
- There is no official hosted service. LumaDock offers hosting that includes the data importer. Hostinger and PikaPods pay the maintainer per referral.
Agents
- MCP
- community
- AI features
- None. The README tagline is 'No AI, no cloud and privacy-friendly', and it says the README was written without LLMs.
- Agent writes
- Yes, through the REST API with a token: create and edit transactions, accounts, budgets, rules and more. Community MCP servers wrap it, such as etnperlong/firefly-iii-mcp (86 stars) and daften/fireflyiii-mcp (140 tools).
- Approval
- None in Firefly III. A token can write directly. Rules and webhooks fire on new transactions with no review step.
- Notes
- The maintainer's stance on AI is skeptical, so agent support will probably stay community-built on the general API.
Integration and customers
- Connects to
- Data Importer: CSV, CAMT.052 and CAMT.053 files. Bank data providers include GoCardless, Enable Banking, SimpleFIN, Lunch Flow, basiq.io, Sophtron, Teller, and FinTS / Open Banking (HBCI). It also takes JSON import configs, a CLI, POST-based automated imports and notifications. Firefly itself exposes the REST API and webhooks.
- Notes
- There are two duplicate checks. The importer can skip a transaction whose unique identifier (external id, notes, description or internal reference) is already present. Firefly III also hashes each submitted transaction after the importer's mappings and roles are applied, but before rules and webhooks run. So changing a mapping, a column role or capitalization, or a bank reissuing an id, produces a different hash and a duplicate. Editing a transaction after import does not update its hash.
- Scale
- 24.9k GitHub stars and 2.3k forks for the main repo, and 845 stars for the data importer (2026-10-10). Stable v6.7.8 shipped on 10 October 2026, with daily develop builds.
- Ratings
- AlternativeTo: 3.2/5 from 8 ratings, 36 likes (2026-10-10). Firefly III has no G2, Capterra or Trustpilot listing with meaningful volume that we could confirm.
- What customers say
- Users praise privacy, self-hosting, a deep feature set, double-entry rigour, the rules engine and the API, and they like the PWA on phones. Complaints: setup is hard without Docker or database experience, the CSV importer is strict, there are no subcategories, budgeting is weaker than envelope apps, and the maintainer often declines feature requests.
Timeline
- 2012
James Cole starts the project to manage his own finances.
- 2026-01 (approx.)
v6.4.0. From here the API changelog is published as diffs.
- 2026-10-10
v6.7.8 stable: category colours, a release notes endpoint, and a fix for a static access token written to the logs in full.
Borrow and avoid
- Borrow
- Identifier-first duplicate detection with a content check behind it. A data importer kept separate from the ledger, with saved JSON configs and a CLI for unattended runs. One small adapter per bank-data provider. Webhooks on new transactions. A full, documented API with personal access tokens.
- Avoid
- Hashing after mapping: identity that depends on your current column roles and capitalization breaks the moment a mapping changes. Hashes that go stale after an edit. Writes from a token or a rule with no review. Keeping only the mapped row and throwing away the raw line it came from.
Sources
- Firefly III home page
- Firefly III on GitHub
- Firefly III releases
- Firefly III Data Importer on GitHub
- Firefly III docs: duplicate detection
- Firefly III docs: API reference
- Firefly III docs: API authentication
- Firefly III docs: what it is not
- Firefly III docs: support and maintainer
- Firefly III docs index (data importer providers)
- PikaPods app prices
- SimpleFIN Bridge pricing
- GitHub search: firefly-iii mcp
- Firefly III on AlternativeTo
Not confirmed against a primary source
- The exact date of v6.4.0. Only the API changelog note was seen, so the timeline date is approximate.
- The in-app CSV export and any CLI export command were not confirmed in current docs. The export docs URL returned 404.
- Whether Firefly III keeps an audit log of changes to transactions.
- G2, Capterra, Trustpilot and Reddit sentiment. Those sites blocked automated access, so sentiment comes from AlternativeTo and the docs.
- The link between the importer adding providers and GoCardless closing new sign-ups is an inference, not a project statement.
ownpurse is not affiliated with Firefly III or any company named here. Names are their owners' trademarks. Figures come from the company's own pages and the press, as linked, as of 2026-10-10; scores are our reading of them against the definitions in the landscape. This is not legal or financial advice.