I recently had to consolidate three different Google accounts' Fit histories onto a single Pixel for a friend who’d been logging workouts under different email addresses for years. It wasn’t straightforward, but with a mix of no-code apps and a little scripting I managed to keep most of the workout history intact. Below I’ll walk you through the approaches that work today: a simpler app-based path for most people, and a more complete (but technical) method using Google Takeout + the Google Fit REST API if you want maximum fidelity.

Quick note on expectations

Google Fit wasn’t really designed for cross-account migration. Some items migrate cleanly (activity sessions, route GPX/TCX), while other data (continuous heart-rate samples, raw sensor streams, and certain derived metrics) can be tricky or impossible to bring over perfectly. You should expect to preserve workout sessions, timestamps, durations, distances, and most GPS tracks. Be ready for some cleanup and de-duplication afterwards.

Method A — No-code / app-based (best for most users)

This is the friendliest option and usually fast enough if your workouts are mostly runs, rides, walks, and structured sessions. It uses Android apps that sync between fitness providers.

What you’ll need:

  • An Android phone (your target Pixel).
  • Access to each Google account that currently holds Fit data (source accounts).
  • Health Sync (paid but affordable on the Play Store) or FitToFit (if available) — they operate differently depending on exact account/OS versions.
  • Steps:

  • Install Health Sync on the Pixel from the Play Store.
  • Open Health Sync and choose Google Fit as the destination.
  • For the source, choose Google Fit (you’ll be asked to sign in to the source Google account). Health Sync will ask for permissions to read that source account’s Fit data.
  • Allow the app to sync. It will copy workout sessions from the source Google Fit into the Pixel’s Google Fit account. Repeat for each source account.
  • Verify sessions in the Google Fit app on the Pixel. Some duplicates might show up if the same session already exists — most sync apps offer a “skip duplicates” setting.
  • Pros:

  • No programming required.
  • Good for typical workouts and GPS routes.
  • Cons:

  • Sometimes misses advanced sensor streams or continuous heart-rate samples.
  • Health Sync needs access to each source account — if you don’t want to sign into those accounts on the Pixel, use Method B.
  • Method B — Export via Google Takeout and import to the target account (advanced, higher fidelity)

    When you want full control and maximum preservation of data, Google Takeout + a programmatic import to Google Fit is the way to go. This is the method I used when I needed to move large volumes of historic data without trusting a third-party app to do everything cleanly.

    What you’ll need:

  • Access to each source Google account to run Google Takeout.
  • A Google Cloud project and a target Google account with Fitbit/Google Fit enabled.
  • Basic familiarity with Python (or willingness to follow the script steps below).
  • Steps — export:

  • Sign in to the source Google account and go to Google Takeout (takeout.google.com).
  • Select only “Fitness” data (uncheck everything else) to keep the export focused. Create export and download the archive when ready.
  • Repeat for each source account and collect all the downloaded zip files. Inside you'll find JSON files and possibly individual activity files in GPX/TCX.
  • Steps — prepare the target account and tools:

  • Create a Google Cloud project and enable the Fitness API for that project.
  • Under “APIs & Services”, create OAuth 2.0 credentials for a desktop app and download the client_secret.json.
  • On your machine, install Python (3.8+) and pip. Then install google-auth-oauthlib and requests.
  • High-level script approach (what I ran):

  • Unzip each Takeout archive and locate the Fitness JSON files (usually in a folder labelled Fit or Fitness).
  • Parse the JSON to extract sessions (activities), data points (heart rate, calories, steps), and track files (if there are GPX/TCX files, extract them).
  • Use the Google Fit REST API’s sessions and datasets endpoints to recreate sessions and upload data points. For GPS tracks, upload the activity as a session and insert data points with location fields using the datasets API.
  • Authenticate using OAuth with the target Google account and the credentials you created. Request the https://www.googleapis.com/auth/fitness.activity.write and fitness.body.write scopes at minimum.
  • Important implementation notes:

  • Work in UTC timestamps and keep original start/end times — Google Fit uses nanoseconds from epoch in many endpoints, so watch the formats.
  • Break large datasets into smaller dataset inserts (the API caps on dataset size). I uploaded in daily chunks to avoid timeouts and rate limits.
  • If you have GPX/TCX files, you can convert them to the data point format expected by the API (latitudeE7/longitudeE7 or floats depending on the chosen schema).
  • Resources and shortcuts:

  • If you don’t want to write everything from scratch, search for open-source repos like “fit-data-importer” or community scripts that parse Google Takeout Fit JSON and use the Fitness API; I adapted one such script to match my needs rather than starting from zero.
  • Test with a small subset first (one workout) so you can confirm session creation, timestamps, and GPS lines are imported correctly before running a full import.
  • De-duplication and cleanup

    After migrating, you’ll likely need to handle duplicates. Google Fit sometimes recognizes duplicates, but not always. Here’s what I do:

  • Scroll through the Google Fit timeline and flag obvious duplicates.
  • Use an API script to query sessions by ID/time range and remove duplicates programmatically — deleting by sessionId is more reliable than manual deletion for large sets.
  • For overlapping heart-rate samples, consider keeping the higher-resolution stream (if available) and deleting the lower-resolution one.
  • Common problems and troubleshooting

    Permissions denied: Make sure the OAuth client has the correct scopes and you’ve granted those scopes to the target account.

    Missing GPS tracks: Check the Takeout archive for GPX/TCX files. If they’re missing, the original device may not have recorded a track; you can’t recover what wasn’t exported.

    Data types not supported: Some proprietary sensor streams (like cadence from a third-party device) might not map cleanly. You can still keep session-level metadata (duration, calories, distance).

    Privacy and safety

    Keep your Takeout archives secure while you work with them — they contain health data and location history. Delete temporary files and revoke OAuth credentials when you’re done. If you’re using third-party apps (like Health Sync), check the privacy policy and only grant the minimum permissions needed.

    If you’d like, I can paste a minimal Python example that authenticates with Google Fit and creates a simple running session from a GPX file — that’s what I used as a template before expanding to full dataset uploads. Tell me if you prefer a copy-ready script or step-by-step screenshots for the Health Sync route.