Unofficial MoneyDashboard API

by @edent | # # # # # | 4 comments | Read ~575 times.

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.

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

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": "",
            "LogoUrl": "",
            "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:

    "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:

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

Balance Over Time

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

    "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:

    "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:

    "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:

   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 ''\ 
 -H 'User-Agent: Mozilla/5.0'\
 -H 'Accept: application/json, text/plain, */*'\
 -H 'Accept-Language: en-GB,en;q=0.5'\
 -H 'X-Requested-With: XMLHttpRequest'\
 -H '__RequestVerificationToken: cykGysmBr1vpUY1'\
 -H 'Content-Type: application/json;charset=utf-8'\
 -H 'Origin:'\
 -H 'DNT: 1'\
 -H 'Connection: keep-alive'\
 -H 'Referer:'\
 -H 'Cookie: COOKIEDATA'\
 -H 'TE: Trailers'\
 --data-raw '{"OriginId":"1","Password":"Passw0rd123","Email":"","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.

4 thoughts on “Unofficial MoneyDashboard API

  1. So pleased to see Open Banking doing what it was intended to do 😃 :… (by

  2. Love this. I do wish their planner accounted for mortgages and interest so you can see future balances ….

  3. That’s pretty cool, nice find!

  4. George says:

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

Leave a Reply

Your email address will not be published. Required fields are marked *