A script to synchronise Credit Card Transactions and Monzo, which can be setup to be run every 15 minutes via cron.
- Monzo Account
- Support Credit Card
- Python >3.9 (Virtual Env is recommended!)
- American Express
- Barclaycard (untested*)
- Capital One (untested*)
- Tesco Bank (untested*)
I haven't personally tested all of these but I don't see why it shouldn't work! The truelayer api is pretty straightforward
| ❗ Attention ❗ |
|---|
| The issue with the refresh token I had highlighted was in fact a misconfiguration! When you are creating your Monzo 'client', make sure to make it 'Confidential"! |
- GUI for setting up and monitoring
To run this project, you will need to add the following environment variables to your .env file
-
truelayer_client_id -
truelayer_client_secret -
monzo_client_id -
monzo_client_secret -
pot_id -
monzo_account_id -
database_file
- On your Monzo App, create an American Express Pot
Clone the project into directory
git clone https://github.com/mtthidoteu/credit-monzo- Create a TrueLayer Account
- Make sure you are in 'LIVE' Mode (upright toggle)
- Create Data API Client_ID and client_secret add add to
.envfile - Login to Monzo Developers and login with Monzo Account
- In Monzo Playground, make a GET request to
/pots?current_account_id=$account_id - Locate and Add your Credit Pot's ID into
.env - Make note of your 'account_id' and add it to
.env - In Monzo Developers, create a Client with
Redirect URLset tohttp://127.0.0.1:5000/callbackand 'Confidentiality' set to 'Confindetial'! - Add newly created Client ID and Client Secret to
.env - Install dependencies
pip install -r requirements.txt- Run authentication script
python script.py auth- Following Instructions carefully! Make sure to read each line!
- If the script has succeeded, you should be good to go!
Once the setup has been completed. You should be able to run a synchronisation by running
python script.py runThis will download all your 'pending transactions' from your Credit Card account and add them to our database. It will then deposit that amount into a pot!
You will probably have noticed but this script doesn't monitor transactions it only checks the transactions once and exists. What I would recommend if having a cronjob or something similar have the script run every 15 minutes for instance.
For example:
*/15 * * * * /path/to/python/or/venv /path/to/cloned/repository/app.py runPlease upgrade to > Python3.9
Currently I haven't implemented a very good error notification system and the script won't really throw errors. It'll just keep trying. However, if you notice it stops working, re-run python script.py auth