Fitness trackers collect some of the most sensitive personal data: your heart rate, sleep patterns, menstrual cycle, workout locations, and daily activity levels. Fitbit/Google, Garmin Connect, and Strava sell or expose this data. This guide covers open-source alternatives that keep your biometric data under your control.
Why Commercial Fitness Apps Are Dangerous
- Fitbit/Google - Google acquired Fitbit in 2021. Fitbit data is subject to US law enforcement requests
- Strava: The 2018 global heatmap accidentally revealed classified military base layouts from soldiers’ GPS tracks
- Garmin Connect: Data exposed in a 2020 ransomware attack; the company paid the ransom
- Apple Health: Stays on-device with strong encryption, but iCloud sync exposes it
Gadgetbridge (Android. Open Source)
Gadgetbridge uses fitness wearables without any manufacturer app or cloud sync. All data stays on your device.
- Source: codeberg.org/Freeyourgadget/Gadgetbridge
- Available on F-Droid
- Supports 200+ devices including Mi Band, Amazfit, PineTime, Bangle.js
- No network permissions required
- Data stored in SQLite on-device
Setup:
- Install from F-Droid
- Enable Bluetooth → Pair your device in Gadgetbridge
- Never install the manufacturer app
Export data for analysis:
import sqlite3
import pandas as pd
conn = sqlite3.connect('gadgetbridge.db')
steps = pd.read_sql_query("""
SELECT DATE(TIMESTAMP/1000, 'unixepoch') as date,
SUM(STEPS) as total_steps
FROM MI_BAND_ACTIVITY_SAMPLE
GROUP BY date
ORDER BY date DESC
LIMIT 30
""", conn)
print(steps.to_string())
OpenTracks (Android. Open Source)
Records GPS-based activities with no cloud sync:
- Source: github.com/OpenTracksApp/OpenTracks
- Available on F-Droid
- Exports to GPX, KML, and CSV
- No network permissions
Traccar Self-Hosted GPS Server
Install Traccar
curl -o traccar.zip https://www.traccar.org/download/traccar-linux-64.zip
unzip traccar.zip && sudo ./traccar.run
sudo systemctl enable --now traccar
Open at http://localhost:8082
Use the Traccar Client app (on F-Droid) to send GPS data to your own server instead of any commercial platform.
Manual Logging Script
#!/bin/bash
fitlog.sh. simple local fitness log
LOG="$HOME/.fitness/log.csv"
mkdir -p "$HOME/.fitness"
if [ ! -f "$LOG" ]; then
echo "date,activity,duration_min,distance_km,notes" > "$LOG"
fi
DATE=$(date +%Y-%m-%d)
read -p "Activity (run/cycle/walk/swim): " ACTIVITY
read -p "Duration (minutes): " DURATION
read -p "Distance (km, optional): " DISTANCE
read -p "Notes: " NOTES
echo "${DATE},${ACTIVITY},${DURATION},${DISTANCE:-},${NOTES}" >> "$LOG"
echo "Logged: $ACTIVITY on $DATE"
Device Recommendations for Privacy
| Device | Privacy Pairing | Cloud Required |
|---|---|---|
| PineTime | Gadgetbridge + InfiniTime | No |
| Xiaomi Mi Band 7/8 | Gadgetbridge | No |
| Amazfit Band 5/7 | Gadgetbridge | No |
| Bangle.js 2 | Gadgetbridge | No |
| Fitbit (any) | None (cloud-only) | Yes |
| Apple Watch | Apple Health (local) | Optional |
PineTime is fully open hardware with open-source firmware. the most privacy-respecting option, though more limited in features than commercial devices.
Privacy Analysis - What Each App Collects
Fitbit (Google):
- Heart rate, blood oxygen, sleep (stored on Google’s servers)
- GPS location for all outdoor activities
- Weight, nutrition, medication data
- Subject to US government requests without warrant (via ECPA 2018 ruling)
- Data used to train Google’s health ML models
- Retention: Indefinitely unless you delete manually
Garmin Connect:
- Complete activity history with GPS
- Heart rate variability data (used for stress assessment)
- Sleep data
- Incident reporting (crashes, falls)
- Smart notifications (who called, which apps notified)
- Subject to US law enforcement requests
- Retention: 7 years minimum
Strava:
- GPS for every exercise
- 2018 data breach: Soldiers’ activities revealed classified military bases globally
- Recent focus on competitive leaderboards (shares activity data)
- Social graph (your friends, followers)
- Location data sold to urban planners and governments
- Retention: Indefinitely
Apple Health:
- Data stays on your device by default
- Optional iCloud sync encrypts with your key, but Apple has master key for legal access
- Data cannot be exported easily
- Better than cloud fitness services but still proprietary
Gadgetbridge - Complete Setup Guide
Gadgetbridge is a single Android app that replaces all manufacturer fitness apps. After setup, delete the original app completely.
Full Installation Steps
1. Install F-Droid (the privacy-respecting app store)
Download from f-droid.org on your Android device
2. In F-Droid, search for "Gadgetbridge"
Install the latest version
3. Enable Bluetooth and ensure your wearable is nearby
The app will prompt you to pair during first run
4. DO NOT install the manufacturer's app (Mi Fit, Amazfit, Garmin)
Gadgetbridge handles all communication
5. Verify no network access (on Android 12+):
adb shell dumpsys package nodomain.freeyourgadget.gadgetbridge | grep "INTERNET\|NETWORK"
Should show nothing or "false"
Export All Fitness Data for Personal Analysis
Gadgetbridge stores data in SQLite. Extract it for analysis:
Database location
/sdcard/Android/data/nodomain.freeyourgadget.gadgetbridge/files/gadgetbridge.db
Via adb
adb pull /sdcard/Android/data/nodomain.freeyourgadget.gadgetbridge/files/gadgetbridge.db
Analyze with Python
python3 -c "
import sqlite3
import pandas as pd
conn = sqlite3.connect('gadgetbridge.db')
List available tables
tables = conn.execute(\"SELECT name FROM sqlite_master WHERE type='table'\").fetchall()
print('Available tables:', [t[0] for t in tables])
Steps last 30 days
steps = pd.read_sql_query('''
SELECT DATE(TIMESTAMP/1000, \"unixepoch\") as date,
SUM(STEPS) as steps
FROM MI_BAND_ACTIVITY_SAMPLE
WHERE TIMESTAMP > strftime(\"%s\", \"now\", \"-30 days\") * 1000
GROUP BY date
ORDER BY date DESC
''', conn)
print('\\nSteps (last 30 days):')
print(steps)
Export to CSV
steps.to_csv('steps_30days.csv', index=False)
"
This gives you full data ownership for personal analytics.
Self-Hosted Fitness Data Server
For advanced users, store fitness data on your own server:
Option 1 - Traccar (tracks GPS, shows location history)
wget https://www.traccar.org/download/traccar-linux-64.zip
unzip traccar-linux-64.zip
sudo ./traccar.run install
Access at http://localhost:8082
Add device UUID from Traccar Client app on your phone
Option 2 - Immich (photo-based activity tracking)
Docker-based photo storage with timeline view
Pairs well with OpenTracks (exports GPX files)
OpenTracks exports to GPX, which can be imported to your self-hosted server for long-term storage and analysis.
Wearable Selection Strategy
If you own Xiaomi Mi Band 7/8 or Amazfit:
- Use Gadgetbridge immediately
- Delete the original app
- Never create a Xiaomi account
- Data stays on your phone forever
If you own Fitbit/Apple Watch/Samsung Galaxy Watch:
- Cloud sync is mandatory
- Choose the lesser evil:
- Apple Watch (on-device storage + optional iCloud)
- Fitbit (accept Google access)
- Samsung (accept Samsung access)
- Do not use commercial fitness apps with these
If buying a new device:
- Prioritize Gadgetbridge compatibility
- Prefer open hardware: PineTime or Bangle.js
- Xiaomi Mi Band offers best balance of features + Gadgetbridge support
Monthly Privacy Audit
Once per month, verify your setup:
1. Confirm no fitness app has internet permission
adb shell pm list packages | grep -i "fit\|health\|activity\|garmin\|strava"
For each result, check:
adb shell dumpsys package [PACKAGE_NAME] | grep "android.permission.INTERNET"
2. Confirm Gadgetbridge still has zero network access
adb shell dumpsys package nodomain.freeyourgadget.gadgetbridge | grep "INTERNET"
3. Check device storage for synced data
adb shell "find /sdcard -type f -name '*fitness*' -o -name '*activity*' -o -name '*health*' 2>/dev/null" | head -20
4. Review Gadgetbridge data export
Weekly export to encrypted USB backup
Related Reading
- Privacy Risks of Fitness Apps and Wearables
- Privacy-Focused Maps and Navigation Apps
- Privacy-Focused Weather App Alternatives
- Best Privacy-Focused Email Alternatives to Gmail 2026
- AI Coding Assistant Session Data Lifecycle
- Best Local LLM Alternatives to Cloud AI Coding Assistants
Built by theluckystrike. More at zovo.one