# Intervals-summits: the summits, huts and passes of your activities in Intervals.icu, plus your own summit log (open source)

**URL:** <https://forum.intervals.icu/t/intervals-summits-the-summits-huts-and-passes-of-your-activities-in-intervals-icu-plus-your-own-summit-log-open-source/133380>\
**Category:** External Projects\
**Created:** [1 November 2026 11:22 UTC](https://forum.intervals.icu/t/intervals-summits-the-summits-huts-and-passes-of-your-activities-in-intervals-icu-plus-your-own-summit-log-open-source/133380 "2026-11-01T11:22:30Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Andreas\_Schnederle-W](https://forum.intervals.icu/user_avatar/forum.intervals.icu/andreas_schnederle-w/32/37514_2.png) [@Andreas\_Schnederle-W](https://forum.intervals.icu/u/Andreas_Schnederle-W)\
**Post date:** [1 November 2026 11:22 UTC](https://forum.intervals.icu/t/intervals-summits-the-summits-huts-and-passes-of-your-activities-in-intervals-icu-plus-your-own-summit-log-open-source/133380/1 "2026-11-01T11:22:30Z")

</div>

Hi all,

if you hike, ski tour or ride mountain passes, you probably know peak-bagging tools for Strava. For Intervals I had nothing like that, so I built one: **intervals-summits**.

It looks at the GPS track of every activity, finds the named **summits, huts and passes** in OpenStreetMap, and puts them into your Intervals activities. It also builds a **summit log** of all your tours:

 ![The summit log (made-up demo data)](https://forum.intervals.icu/uploads/default/original/3X/c/5/c5350e5e9dac63c74e2148ef6be51c2c3e7ad47e.png)

**What lands in Intervals**

- `Summits`: e.g. _Ackerlspitze (2329 m), Maukspitze (2231 m)_, in the order you reached them. The field shows on the activity above the charts.
- `SummitCount`: summed per day, so a fitness chart shows summits per week, month or year.
- `HighestPoint`: the highest point of the activity, only where it is empty. Intervals fills it from FIT files itself; this covers GPX/TCX and old activities.
- Optionally `HutsPasses`, and a line `⛰️ Summits: …` in the description, so that Intervals’ search finds every tour that reached a summit (see _Search_ below).

* * *

![An activity in Intervals with its summits](https://forum.intervals.icu/uploads/default/original/3X/3/9/39920ca2d16d2c3beb52c0eb6383e3c255c3c979.png)

* * *

The fields are created on first use. Codes are the same for everyone, so charts can be shared; the names are English or German, and you can rename them freely. **Values you edit stay** : the tool only ever updates what it wrote itself.

**The summit log page**

- **Timeline:** every summit by height over the years. Hover shows what it was; a click keeps it, with a link to the activity.
- **Top lists:** your top 10/20/50/100, most visited or highest.
- **Per year:** a count per year.
- **Log:** searchable and sortable.

It comes in English and German, light and dark. Open it in the browser (`ui`), in the Home Assistant sidebar, or save it as one HTML file to keep or share.

**How a summit counts**

- **Peaks:** the track comes within 100 m, and the track’s altitude there is at most 80 m below the summit. The path below the summit does not count; the gondola to the top does.
- **Huts and passes:** within 60 m.
- **Your call:** all four numbers can be set (`SUMMITS_PEAK_RADIUS`, `SUMMITS_PEAK_BELOW`, `SUMMITS_HUT_RADIUS`, `SUMMITS_PASS_RADIUS`, also in Home Assistant), e.g. 50 m and 30 m below for only the summits you really stood on.

**Any source, all of your history**

- It works on every Intervals activity with a GPS track: Garmin, Wahoo, Coros, Suunto, Polar, a Strava import or a file upload.
- `backfill --from 2010-01-01` goes through your whole history once. On mine, 16 years with about 1,800 outdoor activities, that is roughly half an hour (mostly downloading the tracks at a polite pace) and 18 OpenStreetMap queries.
- After that it checks for new activities every 15 minutes, or right after the bridge has seen one (below).

**Search: every tour that reached a summit**  
Intervals’ search looks at the name and the description, but not at custom fields. Switch on `SUMMITS_DESCRIPTION=true` and the tool adds one line `⛰️ Summits: …` to the description. Then searching a summit finds every tour that reached it, also the ones where it is not in the title. On my account, “Schatterberg” finds over a hundred tours, and not one of them has it in its name:

 ![Intervals' search for a summit that is in no title](https://forum.intervals.icu/uploads/default/original/3X/0/a/0af9b114a954b9c1b295a621305b1ca7a1a8263a.png)

The tool reads the description again right before writing, adds its line at the end and leaves your text exactly as it is. Where the description lists the summits already, it adds nothing. I’ve also asked for custom text fields to become searchable: [Search custom activity text fields (quick search and list search)](https://forum.intervals.icu/t/search-custom-activity-text-fields-quick-search-and-list-search/133379).

**Running it**

- **Docker** (NAS, server): `compose.yaml` in the repo. The summit log is on port 8766.
- **Home Assistant** : add the repository as an app repository and enter your Intervals API key. The summit log appears in the sidebar.
- **Your computer** : `pip install intervals-summits`, then `intervals-summits run --apply --ui`.
- **Next to [garmin-intervals-bridge](https://forum.intervals.icu/t/garmin-intervals-bridge-your-complete-garmin-fit-files-and-wellness-data-in-intervals-icu-with-or-without-the-official-garmin-integration-now-also-with-garmin-s-personal-api/132863)**: same API key, same settings file. Nothing to configure twice. From bridge 0.12.9 on, `BRIDGE_NOTIFY_URL` lets the bridge tell it when there is something new: the summits are in Intervals right after the bridge’s own work, and summits stops asking Intervals every 15 minutes itself. It does not need the bridge though.
- **With the [Futureweb Intervals MCP](https://github.com/futureweb/intervals-mcp-server)**: ChatGPT, Claude or any MCP client read the `Summits` fields like any other, so you can ask which summits you climbed this year, or how often.

It always starts as a dry run: the summit log fills, and nothing is written to Intervals until you say `--apply` (or switch on _Write to Intervals_ in Home Assistant).

**Privacy and fair use**

- Your data stays on your machine and in your Intervals account; there is no server in between.
- OpenStreetMap only learns which 22 × 15 km cells you need, never a track. The cells are cached for half a year.
- The Intervals key is used gently and shared fine with the bridge.

**Code, docs and install:** [GitHub - futureweb/intervals-summits: Finds the summits, huts and passes on your Intervals.icu activities (any source, all your history), writes them into activity fields and builds your own summit log. Runs next to garmin-intervals-bridge. · GitHub](https://github.com/futureweb/intervals-summits) (MIT)

Feedback welcome, here or as a GitHub issue (there is a template for a missed summit), especially:

- a summit it missed: is it in OpenStreetMap under that name?
- a summit it found but you never reached: which activity?
- what you’d like on the summit log next. A map is on my list.

Map data © OpenStreetMap contributors.
