DEV Community

Cover image for How I Built a Free Tool to Visualize Garmin Health Data in Grafana Dashboards
Arpan Ghosh
Arpan Ghosh

Posted on • Edited on

How I Built a Free Tool to Visualize Garmin Health Data in Grafana Dashboards

Garmin devices collect an impressive amount of health and fitness data: heart rate, sleep, stress, respiration, SpO2, and more. But if you’re like me, you’ve probably wished for more flexibility in how that data is presented — and ideally, a way to combine it with other self-tracking sources.

So I built Garmin-Grafana: an open-source Python application that fetches Garmin data and feeds it into InfluxDB, so you can create rich, customizable health dashboards using Grafana. This script is available as a containerized docker application for easy deployment.

It’s free, open-source, and designed for people who love data — athletes, biohackers, or developers like me who want full control over their health visualizations.

What Garmin-Grafana Does

At its core, Garmin-Grafana automates the process of:

  1. Authenticating your Garmin account
  2. Fetching health, heart rate, sleep data, and activity data periodically
  3. Storing the data in InfluxDB database
  4. Visualizing the data using Grafana dashboards

You can track:

  • Heart Rate Data
  • Hourly steps Heatmap
  • Daily Step Count
  • Sleep Data and patterns (SpO2, Breathing rate, Sleep movements, HRV)
  • Sleep regularity heatmap (Visualize sleep routine)
  • Stress Data
  • Body Battery data
  • Calories
  • Sleep Score
  • Activity Minutes and HR zones
  • Activity Timeline (workouts)
  • GPS data from workouts (track, pace, altitude, HR)
  • And more…

You can easily pull your past historical data using this tool, no matter how far it goes back. So if you are a long term Garmin user, this tool will serve you well.

Data is yours. Host it privately. Visualize it however you want.

Why I Built It

I wanted a personal health dashboard that could:

  • Go beyond Garmin Connect’s limited graphs — the Grafana panels are infinitely customizable.
  • Be fully open, self-hosted, and free of cloud lock-in
  • Keep a local copy of my own health data for long term trend analysis

InfluxDB and Grafana are perfect for time-series data — but Garmin doesn’t provide a public API for personal health data access. So I wrote a workaround using the unofficial Garmin API that syncs the data on a schedule and populates it in the InfluxDB database.

How to Get Started

It’s surprisingly easy to set up if you’re familiar with Python and Docker. Otherwise, following the detailed guide will still get you there.

Please check out the GitHub project page for the installation instructions.

Example Dashboards

Here’s a quick look at what you can build. I have provided this sample dashboard JSON as a quick start.

Dashboard Preview 1

Dashboard Preview 2

Dashboard Preview 3

Dashboard Preview 4

Dashboard Preview 5

Dashboard Preview 6

Dashboard Preview 7

Dashboard Preview 8

Privacy First

Your health data stays local. No third-party services. No cloud sharing (You share it only with Garmin as they are the service provider). If you’re privacy-conscious or just want ownership over your data, this setup is for you.

Feedback or Collaboration?

I’d love to hear from you! Whether you’re using the tool, customizing it, or want to contribute — feel free to open an issue or drop me a message.

If you’re into self-tracking, open data, or wearable hacking, I hope this helps you dig deeper into your Garmin insights. Follow me for more open-source tools and personal data projects.

Let’s keep exploring what our devices can really tell us.

Top comments (1)

Collapse
 
arlejtech profile image
Arlej

Hey, this is seriously impressive! I love how you’re tackling the “my data, my dashboards” problem head-on — the sleep regularity heatmap and the GPS workout tracks are exactly the kind of deep dives Garmin Connect keeps locked away. The containerized Docker approach makes it super approachable too.

Your project resonates a ton with something I’ve been building. I made a Windows desktop app called Neurova that also takes your daily biometric data (HRV, resting HR, deep sleep%, REM%, stress score) but instead of visualizing it, it uses it to generate a unique therapeutic soundscape every morning — binaural beats, physical-modeled instruments, breath guides, and story arcs that adapt to your recovery state. It’s all local, offline, and the audio is procedurally synthesized (no static samples). The “fingerprint” idea is similar: your metrics directly shape the output, so the session you get at HRV 22 is fundamentally different from the one at HRV 61.

Imagine a pipeline where your Garmin-Grafana setup automatically exports the latest metrics into a format Neurova could consume — turning a dashboard into a daily personalized soundscape generator. Right now I’m on manual import/spreadsheet.
Just wanted to share because I think the “use your own data to power something meaningful” ethos is the same. Really clean work — I’ll be following the repo closely. Keep hacking!