Last updated In Fitbit API to Google Health API Migration

Although the data Fitabase receives is changing shape behind the scenes, we're keeping exports as consistent as possible. Most fields map the same way as before, and the Exports page itself isn't changing.

To check which exports include Google Health API data yet, see Dataset Availability.

New UTC and time zone columns

Exports will include UTC time and time zone columns alongside the existing local time columns.

This makes it easier to navigate around:

  • Daylight saving time, when an hour is lost or repeated
  • Participants who travel between time zones during a study
  • Comparing data across participants in different time zones

With a standardized UTC time and the participant's time zone recorded, you can line up data accurately across all of these situations.

New source column

A new source column shows which API each row came from: the Fitbit Web API or the Google Health API. This is useful for studies that span the transition. The Google Health API may also add new data sources in the future, and this column will identify them too.

Existing column names aren't changing

We aren't renaming or removing existing columns. The new columns are added.

Activity intensity minutes: Fitbit API vs. Google Health API

When you compare activity data from the legacy Fitbit Web API with data from the Google Health API, the minutes spent at each intensity level for the same activity may differ slightly. In our testing, the differences were usually one minute at the start or end of an activity.

Why the numbers can differ

The two APIs report activity intensity in different ways:

  • Fitbit API (legacy activity log): Each logged activity comes with its own totals for minutes at each intensity level, calculated by Fitbit.
  • Google Health API: Intensity is reported as minute-by-minute intervals. To get totals for a single activity, you count the intervals that fall inside the activity's start and end times.

Activities rarely start or end exactly on the minute. A walk that starts at 4:20:24 PM only partly covers the 4:20 minute, so whether that minute is counted depends on how the edges of the window are rounded. Fitbit and Google Health don't always handle this the same way. As a result, one source may include or classify an edge minute differently from the other.

What you might see

  • A one-minute difference in a single intensity level. For example, a 30-minute walk showed 7 fairly active (moderate) minutes in the Fitbit activity log and 8 in Google Health. The extra minute was the partial minute at the start of the walk.
  • An edge minute classified at a different level. In another walk, Fitbit counted an edge minute as sedentary, while Google Health reported it as vigorous.
  • Minutes with no interval. Google Health may not return an interval for some minutes inside an activity. Decide in advance how your analysis will treat these gaps, either as sedentary or as missing data.

What this means for your study

These differences are small and come from how each API defines the boundaries of an activity, not from a change in how intensity is measured. They are most noticeable in short activities, where one minute is a larger share of the total.

Important:

If your study combines data from before and after the migration, or compares the two sources directly, account for edge-minute differences of about ±1 minute per activity. Also document how you handle gaps in the Google Health intervals.

We plan to provide intensity minutes from both the Fitbit API and the Google Health API wherever both are available. Guidance on exporting each version is coming soon.

Recommendation: make your scripts tolerate new columns

If you use scripts or automations to process Fitabase exports, check that they select columns by name rather than by position. As long as your analysis asks for columns like the date/time and steps columns by name, the added columns won't break anything.

Tip:

If a script reads columns by position (for example, "the third column is steps"), update it now to use column names so it keeps working through the transition.

The Fitabase API isn't changing

If you pull data through the Fitabase API, you don't need to change your integration.