Ultrafast and lightweight application to synchornize your TrueLayer transactions to Firefly III
Note
This project is in an experimental stage. Feel free to use it, but be aware that it may not be fully stable or feature-complete. Your feedback and contributions are welcome as work is done towards a more polished release. Raise an issue if you run into any problems or have suggestions for improvements. Thank you for your understanding and support!
This is an asynchronous Python application to synchronize your transactions to Firefly III, via the TrueLayer financial services platform. It offers a user-friendly interface for managing the process and configuration. Its design is to be minimal and efficient.]
TrueLayer2Firefly documentation
You can install the application via Docker Compose or via the Docker command:
services:
truelayer2firefly:
iimage: erwind/truelayer2firefly:latest
container_name: truelayer2firefly
ports:
- "3000:3000" # Update this to your desired port
volumes:
- /YOUR_MOUNT:/app/data # Update this to your mount point
docker run -d \
--name truelayer2firefly \
-p 3000:3000 \
-v /YOUR_MOUNT:/app/data \
erwind/truelayer2firefly:latest
The application will create a basic configuration file to store your settings.
Follow these steps to set up your Firefly III instance:
- Create an OAuth Client in your Firefly III instance. You can do this by going to
Profile > OAuth > OAuth Clients
and clicking onCreate OAuth Client
. Make sure to uncheck theConfidential
option. - Fill in the
Name
andRedirect URI
fields. TheRedirect URL
should be set tohttp://{YOUR_HOST}:{YOUR_PORT}/auth/firefly/callback
. For example, if you are running the application onlocalhost
and port3000
, the redirect URL would behttp://localhost:3000/auth/firefly/callback
. This needs to 100% match the URL you are using to access the application. - In TrueLayer2Firefly, fill in the
API URL
with the URL of your Firefly III instance. For example, if you are running Firefly III onlocalhost
and port8080
, the API URL would behttp://localhost:8080
. Also fill in theClient ID
. You will now be guided through the OAuth flow to authorize the application to access your Firefly III instance. - On completion, you will be redirected to the application and your Firefly III instance will be connected.
Follow these steps to set up your TrueLayer instance. This is a bit more complicated, so follow these steps carefully. You can find more information on the TrueLayer documentation.
- Create an application in the TrueLayer dashboard (sign up if you don't have an account yet).
- Switch your application to
Live
mode. This is done by clicking on theSwitch to Live
button in the top right corner of the dashboard. You can confirm if you're inLive
mode by checking the theClient ID
. This should not start withsandbox-
. - Find your
Client ID
andClient Secret
in the application settings. These can be found in theSettings
tab of your application. If you forgot somehow yourClient Secret
, you can regenerate it in theSettings
tab. - In the
Redirect URI
field, fill in the URL of your TrueLayer2Firefly instance. For example, if you are running the application onlocalhost
and port3000
, the redirect URL would behttp://localhost:3000/auth/truelayer/callback
. This needs to 100% match the URL you are using to access the application. - In TrueLayer2Firefly, fill in the
Client ID
,Client Secret
,Redirect URI
with the values from the TrueLayer dashboard. Again, this needs to 100% match the URL you are using to access the application. You will now be guided through the OAuth flow to authorize the application to access your TrueLayer instance. You can filter per country and then find the banking institutions you want to connect to. - From here, follow the instructions in the application to connect your bank accounts.
- On completion, you will be redirected to the application and your bank accounts will be connected. You can now start synchronizing your transactions!
This is an active open-source project. We are always open to people who want to use the code or contribute to it.
We've set up a separate document for our contribution guidelines.
Thank you for being involved! 😍
The simplest way to begin is by utilizing the Dev Container feature of Visual Studio Code or by opening a CodeSpace directly on GitHub. By clicking the button below you immediately start a Dev Container in Visual Studio Code.
This Python project relies on Poetry as its dependency manager, providing comprehensive management and control over project dependencies.
You need at least:
- Python 3.11+
- Poetry
Install all packages, including all development requirements:
poetry install
Poetry creates by default an virtual environment where it installs all necessary pip packages.
This repository uses the pre-commit framework, all changes are linted and tested with each commit. To setup the pre-commit check, run:
poetry run pre-commit install
And to run all checks and tests manually, use the following command:
poetry run pre-commit run --all-files
It uses pytest as the test framework. To run the tests:
poetry run pytest
To update the syrupy snapshot tests:
poetry run pytest --snapshot-update
MIT License
Copyright (c) 2025 Erwin Douna
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.