Building a better Fitbit dashboard: From heart scare to health analytics

Tldr: After experiencing heart palpitations, I bought a Fitbit charge 6 to monitor my heart rate. The stock app only showed 5min averages for daily views and daily averages for weekly views. I built a free Streamlit dashboard that displays every single data point your Fitbit records, second by second, with continuous visualizations, PDF export, and complete privacy.


Last month, my heart started acting up. Nothing dramatic, just enough irregular beats to make me pay attention. I bought a Fitbit Charge 6 to track what was happening. The device worked fine. The app frustrated me immediately.

Fitbit’s native app gives you two views. Daily view shows 5min averages. Weekly view shows daily averages. That is it. If you want to see your actual heart rate at 3:47 PM last Tuesday, you cannot. The data exists. Fitbit records it every few seconds. The app just will not show it.

I am a premium subscriber. I paid for the full experience. The granularity I needed was not there.

What the tool does

I built this Fitbit analytics dashboard to solve this. It is a free web application running on Streamlit. You upload your Fitbit Takeout export (the ZIP file Fitbit emails you), and the dashboard generates continuous visualizations of every data point.


(Mock data used for the above screenshot, sorry for not having a more realistic dataset that I can share. My data is for me, google and the doctor only)

The dashboard processes several data streams:

  • Heart rate: Every reading, typically every 3-5 seconds, plotted continuously
  • Activity: Steps and calories tracked minute by minute
  • Sleep: Full sleep stages with deep, light, REM, and awake periods
  • Heart Rate Variability: RMSSD scores and NREM heart rate trends
  • Blood Oxygen: SpO2 saturation levels with min/max ranges
  • Stress: Daily stress scores broken down by sleep and exertion components

The interface uses Plotly for interactive charts. You can zoom into specific time periods, pan across dates, and hover for exact values. A histogram shows your heart rate distribution across the entire dataset.

Privacy first

Health data is sensitive. The dashboard processes everything in memory. Nothing uploads to a server. Nothing persists after your session ends. The ZIP file you upload gets extracted temporarily, parsed, and discarded.

This was non-negotiable for me. I did not want my heart rate data sitting on someone else’s database. (Aside of Google’s servers but that’s because i’m forced due to how Fitbits work)

PDF Export for Medical Consultations

One feature I needed: printable reports. The dashboard generates a formatted PDF report with all charts and metrics. You can bring this to a doctor. It includes your basic stats, health alerts, and continuous visualizations formatted for A4 printing.

The PDF generation uses WeasyPrint with embedded PNG charts. It works in any browser. Print to PDF or send directly to a printer.

Technical stack

The entire application is under 2,000 lines of Python. It runs on Streamlit with Pandas for data processing and Plotly for visualization. The architecture is simple: parse JSON exports, build DataFrames, render charts.

Fitbit’s export format is straightforward. Heart rate data comes as JSON files with timestamp and bpm fields. Sleep data includes stages and efficiency scores. HRV and SpO2 export as CSV files. The parser handles all of this automatically.

How to use it

  1. Request your data export from Fitbit’s settings page (takes up to 24 hours)
  2. Download the ZIP file
  3. Open the dashboard and upload the file
  4. Browse your data and generate reports

No registration required. No data retention. The tool is live at the Streamlit Community Cloud.

Why This Matters

Consumer health devices collect enormous amounts of data. The hardware is excellent. The software often treats that data as an afterthought. Aggregated views hide patterns. Averages smooth over spikes that might matter.

If you are tracking your health for a specific reason, you need granularity. You need to see that your heart rate spiked at 2 AM (Fitbit ‘shows’ that if you check the daily, the weekly would hide it lol), not that your daily average was 72 bpm.

This dashboard fixes that gap. It gives you access to your own data at the resolution Fitbit actually records it.


The dashboard is free and open source. If you have a Fitbit and want to actually see what it records, try it. Your data stays yours and you get more insights about your health (only issue is that the dashboard is currently in French, but if there’s interest, I can translate it to english).