Free Your Data from Cardmunch
I loathe business cards.
I meet many people at work and at technical conferences but the worst part is that every time someone hands me a business card I have this piece of paper that will eventually live at the bottom of my bag with the rest of my junk, never to be seen again.
I print my own business cards as well ( or make work print them ), adding to this problem. Who knows what people do with my cards? Maybe they are too destined for the bottom of a dirty bag or briefcase. In any event, this whole business card madness has got stop.
Many years ago someone invented QR codes. I’m told they were initially designed to track automobiles in manufacturing, but they’re everywhere now. While they might be a way to link the real world to the online world they are rarely on business cards. They’re ugly and they frequently do not contain all relevant contact data. Worse yet, nearly every mobile phone reader will put data from the QR code into different fields in the phone’s address book, if they’re able to be read at all.
A startup known as CardMunch had a novel solution to this problem – Take a photo of the card, ship that photo to some rat-trap, manual, human data entry hole in a foreign country and then send you back a fully populated iPhone address book entry. Sounds awesome, right? Aside from the privacy concerns with shipping your data off, that is. Cardmunch used to allow the export of scanned data to the iPhone address book and a download option allowed you to have your contacts as a CSV.
Right on! Problem Solved!
Well, no. Along comes LinkedIn. They buy Cardmunch back in Janurary 2011, which should make everyone happy, because now you can take the LinkedIn data and merge it with the business cards you’ve just scanned. “Excellent! Sign me up!”, says the business guy, or musician, or someone who values relationships. Finally this business card bullshit is mostly over and you’ve got extremely detailed meta data on your new friends.
Cardmuch used to charge for this service by the business card, but that option is now gone as LinkedIn decided to make the service free with a ridiculous caveat — Once your data is in the cardmunch DB, it’s not coming out. They shut down the Cardmunch website and the associated data exfiltration tool. They removed the “mass add” which allowed addition of all of the contacts back into your address book and forced you back into the application to see your contacts. The only way to move a pile of contacts from their app to the iphone app is one-by-one, or, by adding them one-by-one to linked in and using their site.
The scanned contacts don’t show up in the main Linkedin site unless you’ve made a connection to the person on the card, so the standard way of exporting data isn’t going to work here.
Let’s get our data back.
Step 1. Jailbreak your iPhone ( I know, this sucks, but I bet you’ve already done this. )
Step 2. Install OpenSSH from Cydia to the phone
Step 3. Install sqllite3 from Cydia (optional)
Step 4. SSH into your iphone.
Step 5. Get the data
CardMunch’s UUID for the new version of the iPhone app is 85882CAE-2582-407E-84E0-7188F7447B75
The software stores everything locally into a sqllite3 database (like most iPhone Apps) for local usage. Your data is most likely in:
Step 6: SCP this file to your local macintosh, or wherever you’ve got a copy of sqlite3 handy
Step 7: Explore the data
Startup sqllite3 and open up the DB with “sqlite3 Cardmunch.sqlite”
There’s a few tables, but only one that we’re really interested in:
SQLite version 3.7.7 Enter ".help" for instructions sqlite> .tables ZACCEPTEDCONTACT ZUNMATCHEDDATA Z_METADATA Z_PRIMARYKEY sqlite>
ZACCEPTEDCONTACT are the contacts which Cardmunch has scanned and accepted. It’s where your data lives.
To get the schema for this data, you can do .schema ZACCEPTEDCONTACT. Once we have our schema, we can write basic SQL to extract the data we need. The schema is fairly complex, but there are basic fields you can use depending on the detail you’d like from each record. Note that some of these fields are marshalled NSObjects which will require further decoding.
Let’s get a basic person list:
sqlite> select ZFIRSTNAME, ZLASTNAME, ZCOMPANYNAME from ZACCEPTEDCONTACT; John|Smith|Systems, Inc. Bob|Dobbs|Systems, Inc. ... etc ...
It’s easy from here. Enjoy!