{"id":22592122,"url":"https://github.com/maroux/firefly-ynab4-importer","last_synced_at":"2025-10-06T11:12:53.014Z","repository":{"id":57429715,"uuid":"279962540","full_name":"maroux/Firefly-YNAB4-Importer","owner":"maroux","description":"Importer for moving from YNAB4 to Firefly-iii","archived":false,"fork":false,"pushed_at":"2020-08-29T04:04:41.000Z","size":90,"stargazers_count":6,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-07T06:40:05.288Z","etag":null,"topics":["budgeting","firefly","firefly-iii","personal-finance","ynab","ynab-converter","ynab4"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maroux.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-15T19:47:41.000Z","updated_at":"2024-03-17T16:25:20.000Z","dependencies_parsed_at":"2022-08-26T02:42:13.267Z","dependency_job_id":null,"html_url":"https://github.com/maroux/Firefly-YNAB4-Importer","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/maroux/Firefly-YNAB4-Importer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maroux%2FFirefly-YNAB4-Importer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maroux%2FFirefly-YNAB4-Importer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maroux%2FFirefly-YNAB4-Importer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maroux%2FFirefly-YNAB4-Importer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maroux","download_url":"https://codeload.github.com/maroux/Firefly-YNAB4-Importer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maroux%2FFirefly-YNAB4-Importer/sbom","scorecard":{"id":621003,"data":{"date":"2025-08-11","repo":{"name":"github.com/maroux/Firefly-YNAB4-Importer","commit":"e15082bd721d0184df876a9dc432adebfdda6c01"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-21T05:13:15.933Z","repository_id":57429715,"created_at":"2025-08-21T05:13:15.933Z","updated_at":"2025-08-21T05:13:15.933Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278598620,"owners_count":26013291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["budgeting","firefly","firefly-iii","personal-finance","ynab","ynab-converter","ynab4"],"created_at":"2024-12-08T09:15:27.815Z","updated_at":"2025-10-06T11:12:52.962Z","avatar_url":"https://github.com/maroux.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Firefly Importer Importer\n=========================\n\n.. image:: https://img.shields.io/pypi/v/Firefly-YNAB4-Importer.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/Firefly-YNAB4-Importer\n\n.. image:: https://img.shields.io/pypi/pyversions/Firefly-YNAB4-Importer.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/Firefly-YNAB4-Importer\n\n.. image:: https://img.shields.io/pypi/implementation/Firefly-YNAB4-Importer.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/Firefly-YNAB4-Importer\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n    :target: https://github.com/ambv/black\n\nSimple importer for moving from YNAB4_ (You Need A Budget) to `Firefly-iii`_.\n\nWhat?\n-----\n\nThis tool lets you migrate your financial history from YNAB 4 (not nYNAB) to Firefly-iii with minimal manual actions.\nIt's written in Python and has the following features:\n\n- Create asset accounts, budgets, budget history, categories, revenue accounts, expense accounts.\n- Import splits accurately!\n- Automatically verifies the integrity of import by comparing Running Balance in YNAB 4 to Firefly iii\n- Foreign currency support - convert to foreign amounts in Firefly-iii seamlessly. Also gets real amounts from memo if\n  that's part of your YNAB workflow.\n- Idempotent imports! Ran into an error mid-import? Just run it again after correcting the problem.\n- Handle inactive budgets\n- Caches firefly data so re-runs are fast\n\nThese cases are unsupported / not on the roadmap:\n\n- Importing budget limits - YNAB 4's secret sauce is the rules_.\n  One of those rules - live on last month's income doesn't match how Firefly budgets things. So this will require some\n  more thought / investigation on how to set up sanely.\n- Multiple foreign currencies (rare, but possible)\n\nWhy?\n----\n\nYNAB 4 is (was?) a desktop software with support for sharing using external mechanisms like Dropbox or just local file\nsharing like Airdrop. After version 4, YNAB went online with monthly subscription, all data on the cloud and\n`stopped supporting`_ YNAB 4. If you don't like your financial data on the cloud, very few alternatives exist, and\nFirefly is one of the solid ones.\n\nFirefly iii gives you control over where you want to host the application - local / in your own cloud etc, provides\nmost of the features that YNAB 4 did and then some. Reports in particular are :100:.\n\nHowever, if you have historical data in YNAB 4 like I do, starting fresh means throwing away all that history. Firefly\niii does support migration from nYNAB (the cloud version) natively, but not from YNAB 4. There's also a\n`csv importer`_ but it misses a lot of things that this tool fixes, such as:\n\n1. Doesn't import budget history.\n#. Need manual management of accounts (otherwise it gets confused about \"Citi\" the asset account with \"Citi\" the expense\n   account).\n#. Transfers get duplicated because YNAB stores them as two transactions.\n#. Splits are a whole can of worms.\n#. No support for foreign transactions\n#. Flaky import - doesn't really work for imports of more than 500 transactions at a time and fails intermittently.\n\nHow?\n----\n\nPre-requisites:\n\n1. Python 3.8+\n\nSetup:\n\n1. Install: ``pip install Firefly-YNAB4-Importer``\n#. Export YNAB 4 data to local disk\n#. Setup config (see ``config.example.toml`` for documentation)\n#. Backup Firefly iii database! (IMPORTANT!)\n\n   - Either using `Firefly iii export`_, or just backing up your SQL database.\n#. Run import:\n\n   .. code-block:: sh\n\n     export FIREFLY_III_URL=\u003cfirefly url\u003e\n     export FIREFLY_III_ACCESS_TOKEN=\u003cfirefly access token\u003e\n     firefly-ynab4-importer import \u003cconfig file\u003e \"\u003cregister path\u003e\" \"\u003cbudget path\u003e\"\n\n   where:\n\n   - ``\u003cfirefly url\u003e`` is the url for your firefly installation\n   - ``\u003cfirefly access token\u003e`` is the `personal access token`_ for your user\n   - ``\u003cconfig file\u003e`` is the path to config file created earlier\n   - ``\u003cregister path\u003e`` is the path to the YNAB export register file (the one named\n      ``\u003cbudge name\u003e as of \u003ctimestamp\u003e-Register.csv``)\n   - ``\u003cbudget path\u003e`` is the path to the YNAB export budget file (the one\n      named ``\u003cbudge name\u003e as of \u003ctimestamp\u003e-Budget.csv``).\n   - Remember to double quote since that path contains spaces.\n\n#. Additional options:\n\n   - Limit imports to certain dates (this is useful in verifying that import works fine for your use case)\n\n     .. code-block:: sh\n\n       firefly-ynab4-importer import \u003cconfig file\u003e \"\u003cregister path\u003e\" \"\u003cbudget path\u003e\" \"\u003cstart month\u003e\" \"\u003cend month\u003e\"\n\nDevelopment\n-----------\n\nSetup:\n\n1. Install python 3.8+ using favorite tool e.g. Pyenv_.\n#. Optionally create virtualenv using your favorite method e.g. `Pyenv virtualenv`_.\n#. Install requirements: ``pip install -e .[dev]``\n#. Verify `Firefly-YNAB4-Importer` runs cleanly.\n#. Publish new version:\n\n   .. code-block:: sh\n\n     python setup.py sdist bdist_wheel\n\n     twine upload dist/*\n\nBugs\n----\n\nWe use GitHub issues for tracking bugs and feature requests. YNAB 4 and Firefly iii are both fairly complicated\nsoftware. It's not only possible, but likely that you'll run into issues if your setup is moderate to high level of\ncustomization.\n\nIf you find a bug, please `open an issue`_.\n\nContributing\n------------\n\nIf you find this useful and want to contribute, here's a list of feature I'd like to add -\n\n- Import Reconciliation transactions correctly\n- Investigate budget history support\n- Multiple foreign currencies (rare, but possible)\n- Command to clear cache, and move cache to appropriate directory depending on platform (e.g. ``~/.cache`` on Unix)\n- Better error handling - guide user on how to correct problems\n- Testing \n\n  - Set up test fixtures for inputs and expected outputs\n  - Verify all the options in Config work correctly\n- Type checking - mypy checks.\n\n\n.. _YNAB4: https://www.youneedabudget.com/\n.. _Firefly-iii: https://firefly-iii.org/\n.. _rules: https://www.youneedabudget.com/the-four-rules/\n.. _stopped supporting: https://www.youneedabudget.com/ynab-4-support-will-end-october-2019/\n.. _csv importer: https://firefly-iii.gitbook.io/firefly-iii-csv-importer/\n.. _Firefly iii export: https://docs.firefly-iii.org/exporting-data/export\n.. _personal access token: https://docs.firefly-iii.org/api/api#personal-access-token\n.. _Pyenv: https://github.com/pyenv/pyenv-installer\n.. _Pyenv virtualenv: https://github.com/pyenv/pyenv-virtualenv\n.. _open an issue: https://github.com/maroux/YNAB4-Firefly-iii-Exporter/issues/new\n.. _click: https://click.palletsprojects.com/en/7.x/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaroux%2Ffirefly-ynab4-importer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaroux%2Ffirefly-ynab4-importer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaroux%2Ffirefly-ynab4-importer/lists"}