I love the idea of the Quantified Self movement. I love collecting data, trying to see connections and monitoring my self improvement process. I’ve been collecting GPX traces while running for quite a while, so it isn’t all that unexpected that the fitbit was a gadget that was right up my alley. It allows you to record the amount of steps you take like every other pedometer, but thanks to a few more sensors, it also can tell you how many floors you’ve climbed, how many kilometers ou traveled and even how often you worke up while sleeping.
It syncs wirelessly, the battery lasts a long time and it is small enough that it isn’t an annoyance to carry arround all day.
The only downside is the webservice itself. It’s not that I dislike their site itself, quite to the contrary. The annoying part is that I’d have to subscribe to their premium plan to get a hold of my raw data. I’m not actually looking to use any of the other premium features, so just paying 50$/yr because they hold my data hostage was kind of a pain.

The nice part however is, that they provide an API that allows you to programmatically grab at least an overview of activity and sleep stats. It misses the actual timeframes (“you walked 1000 steps between 3 and 3,15”, “you woke up at 3, 3:45 and 5”) but it provides you with an ok summary (steps per day, fell asleep at time x, …).

I was a bit afraid that I’d have to screen scrape their site to get to my data, but not only didn’t I have to do that, I also didn’t have to deal with the oauth stuff myself either.

Zachery Moneypenny (“whazzmaster”) had already created a client library for their API and provided a bit of sample code.
Using that library I was able to whip up a quick incremental backup script that saves the activities and sleep data as something machine readable.
This is an example of what the activity data looks like:

$ cat 2012_09_10_activities.yaml 
activities: []
  activeScore: 1000
  caloriesOut: 3092
  distance: 8.05
  floors: 10
  steps: 10000
  activeScore: 762
  activityCalories: 1362
  caloriesOut: 2885
  - activity: total
    distance: 6.43
  - activity: tracker
    distance: 6.43
  - activity: loggedActivities
    distance: 0
  - activity: veryActive
    distance: 2.25
  - activity: moderatelyActive
    distance: 3.36
  - activity: lightlyActive
    distance: 0.81
  - activity: sedentaryActive
    distance: 0
  elevation: 9.14
  fairlyActiveMinutes: 102
  floors: 3
  lightlyActiveMinutes: 139
  marginalCalories: 913
  sedentaryMinutes: 651
  steps: 8114
  veryActiveMinutes: 33

And the sleep data:

$ cat 2012_09_10_sleep.yaml 
- awakeningsCount: 8
  duration: 30900000
  efficiency: 97
  isMainSleep: true
  logId: 16236289
  minutesAfterWakeup: 1
  minutesAsleep: 471
  minutesAwake: 16
  minutesToFallAsleep: 27
  startTime: '2012-09-10T00:56:00.000'
  timeInBed: 515
  totalMinutesAsleep: 471
  totalSleepRecords: 1
  totalTimeInBed: 515

You can find the script in my github repo. It’s not properly packaged and the Readme could use some polish, but this is more of a ‘scratching my own itch’ thingy that I thought might just save somebody 15 minutes.