Mint.com backup

Mint.com is a great personal finance tool. I started using it once I made the switch to Linux at home. I used to use Quicken, but I really didn't want to configure WINE for that one application. Besides, Quicken is getting really crusty; it looks like it's still the same codebase from the Windows 95 days.

My only gripe with Mint is that your data is "in the cloud". I want a local copy! Mint has a handy link that you can use at the bottom of your transaction list to download a CSV copy. But I wanted to automate it...

Want to backup Mint.com? Here is a quick Python script to download your entire transaction history into a CSV file.

import os
import urllib
import urllib2
import cookielib
from optparse import OptionParser
import datetime

class mintlib():
    
    def __init__(self):
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())  # need cookies for the JSESSION ID
        urllib2.install_opener(self.opener)
    
    def login(self, username, password):
        request = urllib2.Request("https://wwws.mint.com/loginUserSubmit.xevent?task=L",  urllib.urlencode(locals()))
        request.add_header("User-Agent", "Mozilla/5.0") # Mint kicks to a "Upgrade to IE 7.0" page without this
        response = self.opener.open(request)
        
    def download(self, file):
        # write CSV file of all Mint transactions for this account to a file
        response = self.opener.open("https://wwws.mint.com/transactionDownload.event?") 
        open(file, "w").write(response.read())
        
    def logout(self):
        response = self.opener.open("https://wwws.mint.com/logout.event")         

def getOptions():
    arguments = OptionParser()
    arguments.add_options(["--username", "--password", "--file"])
    arguments.set_default("file", "mint_backup_%s.csv" % str(datetime.date.today()))
    return arguments.parse_args()[0] # options

if __name__ == '__main__':    
    options = getOptions()
    mint = mintlib()
    mint.login(options.username, options.password)
    mint.download(options.file)
    print "Done"
The command to run it looks like:
python mint.py --username=foo --password=bar


I'm currently working at NerdWallet, a startup in San Francisco trying to bring clarity to all of life's financial decisions. We're hiring like crazy. Hit me up on Twitter, I would love to talk.

Follow @chase_seibert on Twitter