It seems a little complicated.
I tried to find a quick way in nodejs, then making a new project with it sucked. I tried to vibe code it with nodejs and got some errors.
Garmin’s SDK download gives you code examples: https://developer.garmin.com/fit/download/
But it isn’t easy to get running. I’d like to give it a file path and it parses and shows data. Their starting point is a byte array… Now obviously I could load a file to a byte array in like 2 lines but the friction is still there.
I then remembered OG ChatGPT had a solution for me using python. Worked great - even though hardcoded for steps. Just worked.
import os
from collections import defaultdict
from fitparse import FitFile
GARMIN_MONITOR_DIR = "/home/lane/Documents/2026-02-04-garmin-watch/Monitor"
def get_steps_per_day(path):
fit_files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith(".FIT")]
if not fit_files:
raise FileNotFoundError("No .FIT files found in Garmin Monitor folder")
steps_per_day = defaultdict(int)
for f in sorted(fit_files):
fitfile = FitFile(f)
for msg in fitfile.get_messages("monitoring"):
data = {d.name: d.value for d in msg}
steps = data.get("steps")
ts = data.get("timestamp")
if steps is not None and ts is not None:
day = ts.date()
# keep the max steps seen that day (since it's cumulative)
steps_per_day[day] = max(steps_per_day[day], steps)
# Print results sorted by date
for day in sorted(steps_per_day.keys()):
print(f"{day}: {steps_per_day[day]} steps")
if __name__ == "__main__":
get_steps_per_day(GARMIN_MONITOR_DIR)
I want to put this in my db and visualize at some point. I’ll need a pipeline to do all this as well.