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.