Amex-Monzo: Working dynamic synchronisation!

Hey guys! I’ve just created a Script for synchronising your American Express payments to a Monzo pot! You’ll never miss a payment ever again!!
Here is the README.

Have a look at the Github Repo

Amex-Monzo

A script to synchronise Amex Transactions and Monzo, which can be setup to be run every 15 minutes via cron.

Installation and Setup

  • On your Monzo App, create an American Express Pot

Clone the project into directory


git clone https://github.com/mtthidoteu/amex-monzo.git

  • Create a TrueLayer Account

  • Make sure you are in ‘LIVE’ Mode (upright toggle)

  • Create Data API Client_ID and client_secret add add to .env file

  • 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 Amex Pot’s ID into .env

  • Make note of your ‘account_id’ and add it to .env

  • In Monzo Developers, create a Client with Redirect URL set to http://localhost:5000/callback

  • Add newly created Client ID and Client Secret to .env

  • Install dependencies


pip install -r requirements.txt

  • Run authentication script

python auth.py

  • Following Instructions carefully! Make sure to read each line!

  • If the script has succeeded, you should be good to go!

Running

Once the setup has been completed. You should be able to run a synchronisation by running


python script.py

This will download all your ‘pending transactions’ from your Amex account and add them to our database. It will then deposit that amount into a pot!

Making script run dynamically

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/script.py

FAQ

I am getting Error TypeError: ‘type’ object is not subscriptable

Please upgrade to > Python3.9

How will I know if my tokens have expired?

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 auth.py

After 24 hours, the script stops working

I have noticed that when asking for a token, Monzo does not issue any refresh token, meaning it is hard to sustain the script for longer. However, the script is supposed to refresh the token and if they do fix it, it will work without an update!

6 Likes