Unofficial MoneyDashboard API


The OpenBanking specification is brilliant. It allows you to aggregate all of your financial accounts in one place. You can give read or write access to apps and services. Magic!

API access is restricted to registered financial institutions. That's good, because it puts up a barrier to entry preventing dodgy companies slurping up your data and sending all your money to scammers.

But, whether by design or not, it means that you as an individual cannot get API access to your bank. Most financial institutions restrict API access to other financial institutions. Grrr!

Luckily, I've found a slightly cheeky hack to let you get Read-Only JSON feeds of all your transactions!

Sign up to MoneyDashboard (referral link) and authorise it to read your bank and credit card statements.

Once done, they have an API which lists your transactions and other things. I found this by the dark art of... opening developer tools and seeing what the page was requesting. 1337!

Here's my (light) attempt to document it. Note: This uses the MoneyDashboard Classic account. I haven't mapped their "Neon" service yet.

List of Transactions

This gets up to 999 transactions in JSON. You get a reasonable amount of metadata with each one.

https://my.moneydashboard.com/transaction/GetTransactions?limitTo=999

Here's a sample response, redacted for privacy:



{
    "5": {
        "Id": 123456789,
        "Description": "MORRISONS               BRADFORD",
        "OriginalDescription": "MORRISONS               BRADFORD",
        "Amount": -168.35,
        "Date": "/Date(1601683200000)/",
        "OriginalDate": "/Date(-62135596800000)/",
        "IsDebit": true,
        "TagId": 257,
        "MerchantId": 194245,
        "AccountId": 987654,
        "Notes": null,
        "NativeCurrency": "GBP",
        "NativeAmount": -168.35,
        "CurrencyExchange": null,
        "AvailableCurrencyExchanges": []
    }
}

Pretty simple!

  • The Date is in UNIX Epoch milliseconds.
  • I don't know what OriginalDate is.
  • There's a separate API call for folksonomy tags.

That's most of what I want. The ability to list all my transactions. But there are a few other interesting bits of the API

List of Accounts

https://my.moneydashboard.com/api/Account/

Returns all the accounts you have associated with MoneyDashboard:

{
    "2": {
        "Id": 123456,
        "Name": "Platinum Cashback Credit Card",
        "Institution": {
            "RealmId": 0,
            "RealmName": null,
            "DateProviderTypeId": 4,
            "Name": "American Express",
            "IconUrl": "https://media.moneydashboard.com/img/institution/ic_amex.svg",
            "LogoUrl": "https://media.moneydashboard.com/img/institution/ic_amex.svg",
            "Id": 7,
            "ShowAccounts": true
        },
        "Balance": 0,
        "Added": "2019-11-31T11:53:10.9095627Z",
        "LastRefreshed": "2020-01-20T10:20:21Z",
        "AccountTypeId": 2,
        "Colour": "#9e9d24",
        "Overdraft": 0,
        "IsClosed": true,
        "IncludeInCalculations": true,
        "IsIncludedInCashflow": true,
        "Position": 0,
        "IncludeInSidebar": true,
        "NativeCurrency": "GBP",
        "NativeBalance": -123.45,
        "CurrencyExchange": null,
        "AllowAccountMigration": false,
        "ShowAccountMigrationAlert": false,
        "IsOpenBanking": false,
        "OpenBankingMigratedDate": null,
        "LastRefreshStatus": 0,
        "OAuthTokenCreatedDate": null
    }
}

Mostly, I'm interested in the NativeBalance to see how much I've spent on my card.

Spend by Merchant

You can see exactly how much you've spent with each company over a specific period:

https://my.moneydashboard.com/api/merchant/getspend?FromDate=2020-09-01&GroupingInstruction=1&ToDate=2020-09-30



{
    "2": {
        "Amount": -38.49,
        "TransactionCount": 2,
        "Id": 123456,
        "Name": "Debenhams Store",
        "ImageFile": "icon_merchant.svg",
        "MobileIcon": "ic_merchant",
        "TagDisplayCategoryName": null,
        "DisplayColour": "#7C3E3E"
    }
}

Spend by Group

MoneyDashboard allows you to tag your transactions. This shows spending by group and tag:

https://my.moneydashboard.com/api/OutgoingsByGroup?fromDate=2020-09-01&includeCredit=true&toDate=2020-09-30

{
    "1": {
        "TagId": 123,
        "Amount": 8.6
    }
}

Balance Over Time

Rather than plotting your own graphs, MoneyDashboard will show you your balances across your accounts:

https://my.moneydashboard.com/api/balanceHistory?EndDate=2020-10-31&StartDate=2019-10-01



{
    "2": {
        "Date": "2019-10-04T00:00:00Z",
        "Balances": [
            {
                "Balance": -8.06,
                "AccountId": 123456
            },
            {
                "Balance": -718.78,
                "AccountId": 789012
            }
        ]
    }
}

List of Tags

If you are interested in how your spend is categorised - arguably the whole point of MoneyDashboard - you can get a list of all the in-built tags and sub-tags:

https://my.moneydashboard.com/TaggingRules/getTags



{
    "0": {
        "TagId": 237,
        "TagName": "Appearance",
        "ParentTagId": 0,
        "ParentTagName": null,
        "ParentTag": null,
        "ChildTags": [
            {
                "TagId": 247,
                "TagName": "Clothes - Designer or Other",
                "ParentTagId": 237,
                "ParentTagName": "Appearance",
                "ParentTag": null,
                "ChildTags": [
                    {
                        "TagId": 120,
                        "TagName": "Accessories",
                        "ParentTagId": 247,
                        "ParentTagName": "Clothes - Designer or Other",
                        "ParentTag": null,
                        "ChildTags": [],
                        "ImageFile": "ic_person.svg",
                        "MobileIcon": "ic_person",
                        "TagDisplayColour": "#039BE5",
                        "IsSystemTag": true
                    }
        ],
        "ImageFile": "ic_person.svg",
        "MobileIcon": "ic_person",
        "TagDisplayColour": "#039BE5",
        "IsSystemTag": true
    }
}

And self-created tags:

https://my.moneydashboard.com/CustomTags/GetListOfTags



{
    "0": {
        "TagId": 3,
        "TagName": "Vehicle insurance",
        "ParentTagId": 0,
        "ParentTagName": null,
        "ParentTag": null,
        "ChildTags": [],
        "ImageFile": "ic_car_bump.svg",
        "MobileIcon": null,
        "TagDisplayColour": "#F57C00",
        "IsSystemTag": true
    }
}

Getting Authorised

OK, so you want to do this? How do you authenticate yourself against the API? This is the tricky bit.

In the source code for the login page, you'll see something like this:



<input
   name="__RequestVerificationToken"
   type="hidden"
   value="cykGysmBr1vpUY1" />

The actual value is much longer.

You will also need the Cookie which is set when you request the login page.

Your username and password are POSTed in a JSON payload, like so:



curl 'https://my.moneydashboard.com/landing/login'\ 
 -H 'User-Agent: Mozilla/5.0'\
 -H 'Accept: application/json, text/plain, */*'\
 -H 'Accept-Language: en-GB,en;q=0.5'\
 --compressed\
 -H 'X-Requested-With: XMLHttpRequest'\
 -H '__RequestVerificationToken: cykGysmBr1vpUY1'\
 -H 'Content-Type: application/json;charset=utf-8'\
 -H 'Origin: https://my.moneydashboard.com'\
 -H 'DNT: 1'\
 -H 'Connection: keep-alive'\
 -H 'Referer: https://my.moneydashboard.com/landing'\
 -H 'Cookie: COOKIEDATA'\
 -H 'TE: Trailers'\
 --data-raw '{"OriginId":"1","Password":"Passw0rd123","Email":"you@example.com","CampaignRef":"","ApplicationRef":"","UserRef":""}'

Once done, you can make API GET calls using the __RequestVerificationToken header.

Or, you can use a Python Library for MoneyDashboard

What Next?

I was thinking of building a passive dashboard to show me the state of my current account.

Or, maybe...

Alexa? Ask MoneyDashboard what the balance is on my credit cards.
Alexa? Ask MoneyDashboard how much I spent at Wagamamas last month?

Too much?

Enjoyed this post?

If you've found this useful, please sign up to MoneyDashboard using my referral link.

Or, you can:

Or, just leave a supportive comment.


Share this post on…

8 thoughts on “Unofficial MoneyDashboard API”

  1. George says:

    This is great, thank you so much! Do you have any suggestions how to achieve authentication in Google Sheets?

    Reply
  2. RonaldB says:

    Hi,

    Thank you for this. This looks like it will be very helpful for me and i look forward to getting it working.

    I have been following this tutotial and have got as far as finding the "_RequestVerificationToken" header in the source code. However, I am not sure clear on the next steps. Please could you help explain.

    How do I access/ view the Cookie? what do I do with it?

    Also how do I find the JSON? Can you also show an example of how to make the API GET call please?

    I appreciate i am asking a lot of Q, which may be obvious, but i am a newby into the python world.

    Reply
    1. @edent says:

      Hi Ronald,

      In Firefox, open up the page inspector (usually right click on the page). Click on the "Network" tab. Now log in to the page. You should see a network request in the inspector. Click on it. Then select the "Cookies" tab. That should show you a list of all the cookie values. You can copy and paste that into your code.

      As you navigate around MoneyDashboard, you'll see various URLs appear in the Network tab. Some of those will be marked as "JSON". Or, use the URls in the blog post like `https://my.moneydashboard.com/TaggingRules/getTags`

      Thanks for reading - and good luck!

      Reply
  3. RonaldB says:

    Hi @Edent,
    Thank you for your response. I have used your reply and firefox's 'copy as CuRL (BASH) feature. This worked. However, i then had to re-copy this evenning as it was saying : "Message": "Authorization has been denied for this request."

    How often do you have to reauthenticate? and how do you reauthenticate? do you go and recopy the GET request from firefox everytime, or can you do this programmatically?

    Thanks again

    Reply
    1. @edent says:

      Hi RonaldB - as this isn't an official API (and I don't work for MoneyDashboard) I don't know how often you need to reauthenticate. Sorry.

      Reply

What links here from around this blog?

What are your reckons?

All comments are moderated and may not be published immediately. Your email address will not be published.Allowed HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre> <p> <br> <img src="" alt="" title="" srcset="">