Programming with Microsoft Money

I’ve used Microsoft Money for years – ever since I started using MS Money 97 at Uni. I can’t imagine how I’d keep on top of finances without it.

The tricky bit is having to enter transactions into the software every time you buy something – something which lends itself perfectly to a mobile solution. Rather than waiting until you next get to your computer, enter the transaction immediately by jotting a quick note on your mobile.

I bought a copy of Spb Finance. It’s almost perfect…. except that the syncing between PDA and PC sucks*. I’ve tried everything to get it to work – including working with the support guys at Spb, collecting trace and log files for them and multiple re-installs in different configurations. No joy – syncing is still unreliable, has corrupted my Money file a few times, and even when it works it has a habit of chewing up all remaining CPU cycles on the computer, making my ThinkPad run scarily hot.

So I thought I’d have a go at writing something for myself.

screenshot screenshot

I don’t normally blog about every Windows Mobile app I throw together, mainly because it’s…. well, basically fairly trivial. Drag-and-drop programming.

But this one was a bit interesting because of the data I wanted to collect.

After some fruitless Googling, it seems that there is no API for getting at my Money data. This surprised me… after writing all sorts of bits of pieces using Internet Explorer, and a bunch of MS Office apps, in a variety of languages, I kinda assumed that Microsoft would have published an API for accessing the database behind MS Money.

But apparently not. Spoilsports. 🙁

screenshot So I’ve gone for a compromise – by creating Open Financial Exchange (OFX) files. OFX is a data-stream format for exchanging financial information. Typically, you download OFX files from your online banking service, and import it into Microsoft Money. But I don’t see any reason why I can’t use this to get my information into the app.

screenshotI found the specification for the format of OFX files on the OFX website. Not the most user-friendly doc in the world, but the information is all in there to write an app which generates OFX statements.

I don’t think it’s really meant for this sort of thing… it’s really meant for a more definitive statement of account transactions than as a way of importing user input.

For example, the OFX specification requires the current balance at the time of the statement was generated. As I’m talking about doing a one-way sync of PDA to computer, I can’t really do this – so am just setting this to 0 and hoping it doesn’t cause MS Money any problems.

screenshotThe other issue is that the OFX spec doesn’t include categories – the bit that says how the money was spent, such as “Groceries” or “Gas bill”. On the plus side, this means one less box needed for my app. It saves a bit of data entry for each transaction, and frees up space to make all the other controls a bit bigger.

And Microsoft Money does a neat job of guessing categories for transactions based on the shop name (e.g. transactions at “Esso” get prefilled with a category of “Petrol”). So it’s not all bad.

screenshot screenshot

On the plus side, including the account number and sort code in the OFX file lets Microsoft Money match up transactions with the right account in MS Money.

Other than that, it was just a job of creating an interface that minimises effort and doesn’t need a stylus (chunky date boxes that you can either tap on – tap on the top to roll it up, on the bottom to roll it down – or just use the D-Pad… big finger-jabbable on-screen number buttons when you tap on the value box… that sorta thing), and rejigging the buttons around if the screen is rotated.

* Oh – about SPB Finance… I should be fair. Although I can’t help being a little annoyed at paying money for software that I can’t actually use, it’s probably not entirely their fault.

My money file is old – it’s been upgraded twice (from MS Money 97 to 2001, and then again to 2005), so who knows what random bits of crap got left in the file that don’t conform exactly to the current MS Money spec.

And the file is big – it has all of my finance records since 1999. I don’t like to have to archive older stuff, because it’s just hassle. So maybe their solution just isn’t suited to trying to juggle a data source that big. For all I know, a new clean file that isn’t 20 megs in size might sync perfectly.

As an aside… I wonder how SPB get their access to the MS Money database. Reverse engineering? Or do they just ask Microsoft nicely? 😉

11 Responses to “Programming with Microsoft Money”

  1. dale says:

    I got a few emails asking for copies of this… if anyone else is interested, I’ve put it up here:

  2. Nic Martens says:

    How does one access the database tables and relationships of MSMoney?
    I need to understand the structure (reverse engineering is somewhat beyond my ability) to interface the data with an Access database, and don’t have a clue. I’m still using MSMoney ’98 as it does the job.
    Can anyone help?

  3. dale says:

    You might want to have a look at

    It’s not really an answer… but it might help explain why it is so hard to get an answer!

  4. Nic Martens says:

    Thank you for your time Dale.
    It seems I will have to find another way of working it out, although the way the splits are done could be a mission. The rest seems pretty logical.

  5. Mike Mullen says:

    Dale, I had the samer problems as you with SPB Finance. Again I have a large file that’s been upgraded several times. The answer was

    install Inesoft’s Cash Organiser –

    It works a treat – absolutekly no problems with syncing for me now. You also get a mini-app just for entering single transaction data straight obn your mobile.

  6. dale says:

    @Mike – thanks very much for the heads-up, I’ll definitely give that a go

  7. Carl Tierman says:

    I’m suprised at your comment about Cash Organizer. I’ve used it since 2003 and it’s been a good application until I upgraded to CO2007. I’m using AS 4.5 and CO2007 crashes it every time. Everything else syncs fine, just CO2007. I’ve removed and reinstalled countless times to no avail. I tried syncing with another laptop using AS4.1 and it worked until I entered a Budget line item and it crashed the syncronization with that computer until I removed the budget item then it works fine. I’ve given up on CO2007. Inesoft will not even respond to support emails or user group entries. I don’t know what is going on. I’m using XP SP2 with AS 4.5.

  8. Roland says:

    Hello Dale,

    I just discovered your Blade Money… tried it… and like it ! Thank you for your Job ! Exactly what i need, and search for.

    But probem : i cannot synchronise with Money, because i use “euro’s” (not GBP, nor USD). Must say, i’m french, and live in France, so…

    So, is it a possibility to implement Euro in “currency” ?

    If yes, i would be grateful.

  9. dale says:

    @Roland – Thanks for your kind comments. I’ve had a go at adding another currency and emailed you a modified version. Hope that helps.

  10. Roland says:

    Thank you for adding “euro” to the currencies !

  11. ISIK TABELA says:

    I need to understand the structure (reverse engineering is somewhat beyond my ability) to interface the data with an Access database, and don’t have a clue. I’m still using MSMoney ‘98 as it does the job.
    Can anyone help?