Running Activity Analysis

Recorded running distance, routes, pace, heart rate, and time of day.

Loading activity history…

Last updated

Cumulative distance by year

Recorded distance from January 1, aligned by calendar date.

Recorded routes

GPS tracks overlaid by region. Line intensity increases with overlapping tracks.

Loading route data…

Monthly pace distributions

Distribution of activity-average moving pace in each month.

Each run contributes one pace, regardless of distance. Curves use a shared density scale; dots mark medians and n gives the number of runs. Months with no runs have no curve.

Pace and heart rate

Recorded average heart rate versus activity-average moving pace.

Jan–MarApr–JunJul–SepOct–Dec

Running probability by time of day

Estimated fraction of time spent running in each 15-minute interval.

Select timelocal time
07:00–07:15 —

Estimated running probability

Each 15-minute bin measures estimated running minutes divided by available minutes across fully covered dates, including days without runs.

Daily and weekly distance

Total recorded distance by local start date.

Weekly totals use Monday–Sunday. Faded bars indicate partial weeks or incomplete coverage. Underlined calendar cells contain runs with incomplete coverage.

Methods and data coverage

Dates and clock times remain local to each activity. Separate activities retain their original IDs, including multiple runs on one day.

Running intervals are estimated from local start time plus moving duration. Exact pause timing is unavailable. Intervals crossing midnight are split, and overlapping intervals count once. Probability is occupied time within each 15-minute interval divided by available time across fully covered dates, including dates without runs. Today and dates with incomplete coverage are excluded from probability and cumulative comparisons.

Total distance includes all imported runs in the selected year through today. Complete coverage means the exporter reports retrieving every running activity for that date; the page cannot independently verify this claim. Dates without coverage are unknown. Weekly bars distinguish partial weeks and incomplete coverage.

Cumulative lines stop at the first date without complete coverage. Year comparisons use the last calendar date covered by both years. Monthly pace curves use Gaussian smoothing with a fixed bandwidth of 12 seconds per kilometer; each run has equal weight, and all months share the same density scale. These are distributions of activity averages, not within-run pace samples.

Route and heart-rate data come from a bulk export matched to the site's 2025–2026 activity summary. There are 571 usable GPX tracks and 578 recorded average heart rates among 601 runs. Thirteen GPX files have no usable track, eleven activities have no GPX file, and six FIT files have not been decoded. Missing routes and heart rates are omitted. Tracks use a local geographic projection, 20-meter simplification, and separate segments across GPS jumps over 1 km. Region labels are approximate.

Imported files are stored in this browser. Export a snapshot to retain a copy. Updating the site's default history requires replacing the activity snapshot in the repository.

Inspired in part by No Days Off.

Activity data

Import a running activity summary to update the plots. Imported files stay in this browser. Route and heart-rate figures use a separate dataset for the site's history.

Exporting data from an MCP connection

Use this request in a chat with access to your activity history, then import the returned file. Retrieval happens in the connected chat.

JSON and CSV formats

JSON snapshots include local date coverage for the probability and cumulative plots. Replace the template's example records and remove its demo flag when using verified history. Existing activity snapshots and planner backups with activity history are supported.

CSV files use the template's meter and second columns. They have no coverage declaration, so probability and cumulative comparisons are unavailable. Convert native exports to this format before importing, resolving units and timezones at the source.