How Scoring Works
Your SummitScore is a number from 1 to 100 that reflects how well you performed on a hike relative to its difficulty. This page is the complete reference for every formula and calculation the app uses.
Contents
1. Your Summit Score (0-100)
Your SummitScore is a single number that captures the full picture of a hike: how demanding the trail was, how fast you moved, how efficiently your body worked, and how well you held up from start to finish.
The score is built from four weighted components, each scored 0-100 independently, then combined:
The final score is always clamped between 1 and 100, rounded to one decimal place.
2. The Four Components
Effective Demand 35% of score
This measures how hard the hike itself was -- not how you performed, but what the trail demanded from anyone who did it. A steep 14er in a snowstorm scores higher here than a flat nature trail on a sunny day.
How the base demand is calculated
The base demand is a blend of GPS-measured difficulty and AI-estimated difficulty. The blend depends on whether GPS stream data is available:
baseDemand = (gpsDemand x 0.60) + (aiDemand x 0.40)
// Without GPS data:
baseDemand = aiDemand
After calculating the base demand, the conditions modifier is applied (see Section 4). This can boost the demand by up to 15% if weather or trail conditions made the hike harder.
// Result clamped to 1-100
Base demand = (65 x 0.60) + (58 x 0.40) = 39 + 23.2 = 62.2
Conditions modifier = 1.0 + 0.015 (cold) + 0.04 (wet) = 1.055
Effective Demand = 62.2 x 1.055 = 65.6
Execution 30% of score
This measures how much ground you covered per hour, accounting for both horizontal distance and elevation gain. It rewards faster, more productive movement.
The formula
Elevation gain is converted into equivalent distance: every 500 feet of climbing counts as 1 extra mile of output. Then your output per hour determines the score.
outputRate = output / movingTimeHours
executionScore = outputRate x 25
// Result clamped to 1-100
What typical scores look like
Output = 8 + (2,000 / 500) = 12
Output rate = 12 / 4 = 3.0
Execution = 3.0 x 25 = 75
If moving time is zero or missing, Execution defaults to 50.
Efficiency 20% of score
This measures how much output you got for the effort your body put in. If two hikers cover the same ground at the same speed, but one does it at 140 bpm and the other at 170 bpm, the first hiker was more efficient and scores higher.
The formula
Your raw Execution score is divided by the percentage of your max heart rate that you used. A lower heart rate for the same output means better efficiency.
hrPercent = avgHeartRate / maxHR // floored at 0.40
efficiencyScore = (executionRaw / hrPercent) x 0.75
// Result clamped to 1-100
Note: The formula uses the raw Execution score before the performance ceiling is applied. The HR percentage has a floor of 0.40 to prevent extreme values from very low heart rates.
What typical scores look like
Max HR = 220 - 30 = 190
HR % = 148 / 190 = 0.779
Efficiency = (75 / 0.779) x 0.75 = 72.2
If no heart rate data is available (no HR monitor connected), Efficiency defaults to 60 -- a neutral score. Heart rate values below 60 bpm are treated as invalid and also default to 60.
Resilience 15% of score
This measures how well you held up over the course of the hike. Did you slow down significantly in the second half? Did your heart rate spike even though the terrain got easier? Resilience catches that.
How it works
Your hike is split into four equal segments (quartiles) by distance. For each segment, SummitScore calculates the average pace (seconds per meter), average heart rate, and average grade. Then it compares the first quarter to the last quarter, adjusting for terrain changes.
The score starts at 80 ("good") and adjusts from there based on three checks:
A. Pace fade (Q1 vs Q4)
If you slowed down at the end, the algorithm checks whether the terrain explains it. For every 1% increase in average grade from Q1 to Q4, an 8% pace slowdown is expected and not penalized. Only unexplained fade counts.
expectedFade = (Q4grade - Q1grade) x 0.08
unexplainedFade = paceFade - expectedFade
Unexplained fade = 0.25 - 0.08 = 0.17 (17%)
Penalty = 0.17 x 40 = -6.8 points
B. Heart rate drift (Q1 vs Q4)
Same concept. If your heart rate climbed, the algorithm checks if steeper terrain explains it. A 5% HR increase is expected per 1% grade increase. Only unexplained drift is penalized.
expectedHrChange = (Q4grade - Q1grade) x 0.05
unexplainedDrift = hrDrift - expectedHrChange
Only positive unexplained drift is penalized. If your HR dropped or the terrain fully explains the increase, there is no penalty. Requires valid HR data (above 60 bpm) in both Q1 and Q4.
C. Pacing consistency (all four quarters)
The coefficient of variation (CV) measures how consistent your pace was across all four quarters. CV is the standard deviation divided by the mean -- a lower number means steadier pacing.
Penalty = (0.25 - 0.15) x 30 = -3 points
Requires at least 3 valid quartile paces for the CV check, and at least 20 data points overall. If no GPS stream data is available, Resilience defaults to 70.
3. Performance Ceiling
Your Execution and Efficiency scores are capped based on how hard the trail was. This prevents easy hikes from yielding unrealistically high scores -- you can't earn a 95 Execution on a flat 2-mile loop, no matter how fast you walk it.
execution = min(executionRaw, performanceCeiling)
efficiency = min(efficiencyRaw, performanceCeiling)
How the cap plays out
Resilience is not subject to the performance ceiling. The ceiling only applies to Execution and Efficiency.
4. Conditions Modifier
The conditions modifier is a multiplier applied to the base demand score. It starts at 1.0 (no adjustment) and increases when weather or trail conditions made the hike harder. The maximum is 1.15 (+15% boost).
Multiple conditions stack together, but the total is capped at 1.15. All weather data comes from Open-Meteo, matched to the hours you were actually on the trail.
Temperature
Only extreme temperatures trigger a modifier. Normal hiking weather (25-95 degrees F) has no effect.
modifier += (25 - temp) / 200
// Hot (above 95 degrees F):
modifier += (temp - 95) / 200
Precipitation
Only significant precipitation counts. Trace amounts (under 0.1 inches) are ignored.
modifier += min((precip - 0.1) x 0.04, 0.10)
Wind
Only strong winds matter. Anything under 20 mph has no effect.
modifier += (wind - 20) / 200
Severe weather codes
Specific weather conditions detected during the hike add a fixed bonus:
The most severe weather code during the hike window is used. Clear sky, partly cloudy, overcast, drizzle, rain, and rain showers have no modifier.
Trail surface
Selected when logging the hike (from the questionnaire):
Pack weight
Pack weight uses continuous scaling when you enter a specific weight in pounds. A typical daypack (10 lbs or less) has no effect. Above 10 lbs, each additional pound adds 0.2% to the modifier, up to a cap of +10%.
modifier += min((packWeightLbs - 10) x 0.002, 0.10)
For older hikes that used the category picker instead of exact weight, the legacy values apply: "20-35 lbs" = +4%, "35+ lbs" = +8%.
5. Trail Difficulty Rating
Every trail gets a difficulty score from 1 to 100. This represents the trail itself -- it stays the same no matter who hikes it or when. It feeds into the AI portion of Effective Demand.
How it works
SummitScore searches the web for trail information (using Brave Search for up to 20 results from AllTrails, hiking forums, and topographic sources), then sends everything to Claude AI. Claude evaluates six factors and assigns a single difficulty number, calibrated against a set of real anchor trails.
Scoring factors
Anchor trails (calibration reference)
The AI is given these real trails as fixed reference points so scores stay consistent:
| Score | Trail | Stats |
|---|---|---|
| 8 | Easy paved nature loop | 1-2 mi, flat |
| 20 | Typical "easy" AllTrails trail | 3-4 mi, 400-600 ft gain |
| 35 | Typical "moderate" AllTrails trail | 5-7 mi, 800-1,200 ft gain |
| 45 | Blood Mountain, GA | 6.1 mi, 1,700 ft gain |
| 52 | Brasstown Bald via Jack's Gap, GA | 6-7 mi, 1,800 ft gain, steep switchbacks |
| 62 | Mount LeConte via Alum Cave, TN | 11 mi, 2,800 ft gain |
| 72 | Half Dome with cables, CA | 16 mi, 4,800 ft gain, cable ladder |
| 80 | Mount Whitney Main Trail, CA | 22 mi, 6,100 ft gain, 14,505 ft altitude |
| 88 | Longs Peak Keyhole Route, CO | 15 mi, 5,100 ft gain, Class 3, 14,259 ft |
| 95 | Capitol Peak, CO | 17 mi, 5,200 ft gain, Class 4 knife-edge, 14,130 ft |
Partial hikes
If you only hiked part of a trail (your Strava distance is shorter than the full trail), the AI scores the portion you actually hiked using your actual distance and elevation, but still references the trail's terrain, exposure, and altitude from web search data.
6. GPS Demand Calculation
When GPS stream data is available, SummitScore calculates its own difficulty rating from the raw data. This uses square-root scaling so that gains diminish -- going from 2 to 10 miles matters more than going from 30 to 38 miles.
The four components
distComponent = sqrt(miles) x 8.0
// 2. Elevation (square-root scaled)
elevComponent = sqrt(elevationGainFeet) x 0.8
// 3. Steep grade bonus (% of segments steeper than 15%)
steepBonus = steepPercent x 0.3
// 4. Altitude bonus (only above 8,000 ft)
altBonus = (maxAltitudeFt - 8000) / 500
gpsDemand = distComponent + elevComponent + steepBonus + altBonus
// Result clamped to 1-100
Distance component examples
Elevation component examples
Steep grade bonus examples
Altitude bonus examples
Distance: sqrt(10) x 8 = 25.3
Elevation: sqrt(3000) x 0.8 = 43.8
Steep: 20 x 0.3 = 6.0
Altitude: (12000 - 8000) / 500 = 8.0
GPS Demand = 25.3 + 43.8 + 6.0 + 8.0 = 83.1
"Steep" is defined as any GPS segment with a grade above 15% (in either direction -- both steep uphills and downhills count). Altitude is read from the GPS elevation stream and converted from meters to feet.
7. Score Predictions
On the Predict tab, you can get a predicted SummitScore for any trail before you hike it. Predictions are generated by AI (Claude) based on your personal hike history and the trail's difficulty.
What the prediction considers
The AI receives the following about you:
Difficulty tiers for history analysis
Confidence levels
The maximum confidence the prediction can have is capped by how many hikes you have logged:
Confidence is also adjusted downward if the target trail's difficulty is very different from what you've hiked before, or if a heavy pack adds unusual load. The predicted score is always between 1 and 100.
8. Weather Data
Weather conditions are fetched automatically from Open-Meteo for every hike. Weather affects your score through the conditions modifier (see Section 4) and is also displayed on your hike detail page for context.
Location resolution
The system uses the most precise location available, in this order:
Time window matching
SummitScore tries to get weather for the exact hours you were on the trail. If that fails, it uses a series of fallbacks:
Data source and fallbacks
The system tries the archive API first (best for hikes more than a week old). If that returns no data, it falls back to the forecast API (covers the last 7 days plus future forecasts).
What is collected
| Measurement | Aggregation |
|---|---|
| Temperature | Average across hike hours |
| Feels-like temperature | Average |
| Humidity | Average |
| Dew point | Average |
| Cloud cover | Average |
| Precipitation | Sum (total during hike) |
| Snowfall | Sum (converted from cm to inches) |
| Wind speed | Maximum (peak gust matters most) |
| Wind gusts | Maximum |
| Sunshine duration | Sum (converted from seconds to minutes) |
| Weather condition | Most severe WMO code during hike |
| UV index | Maximum (peak exposure) |
| Air Quality Index (AQI) | Average |
| PM2.5 particulates | Average |
WMO weather codes
Open-Meteo returns numeric weather codes. SummitScore converts them to readable conditions:
| Code(s) | Condition |
|---|---|
| 0 | Clear sky |
| 1 | Mainly clear |
| 2 | Partly cloudy |
| 3 | Overcast |
| 45, 48 | Foggy |
| 51, 53, 55 | Drizzle |
| 61, 63 | Rain |
| 65 | Heavy rain |
| 71, 73 | Snow |
| 75, 77 | Heavy snow |
| 80, 81, 82 | Rain showers |
| 85, 86 | Snow showers |
| 95 | Thunderstorm |
| 96, 99 | Thunderstorm with hail |
9. Heart Rate & Max HR
Heart rate data is used by two scoring components: Efficiency (average HR during the hike) and Resilience (HR drift from Q1 to Q4).
Estimated max heart rate
The standard formula is used:
HR percentage in Efficiency
Your average heart rate is expressed as a percentage of your max HR. This percentage has a floor of 0.40 (40%) to prevent calculation issues with unusually low heart rates. Heart rate readings below 60 bpm are treated as invalid sensor data and cause Efficiency to default to 60.
Heart rate in Resilience
Resilience uses the per-segment average heart rate from the GPS stream (not the overall average). Only segments with HR values above 60 bpm are included. If either Q1 or Q4 lacks valid HR data, the HR drift check is skipped entirely (no penalty, no bonus).
10. Achievements
Achievements are milestones you earn as you hike. Each category has four tiers: Bronze, Silver, Gold, and Platinum. Once earned, achievements are permanent.
Achievements are checked and awarded automatically every time you log a new hike.
Hikes Logged
| Tier | Title | Requirement |
|---|---|---|
| Bronze | First Steps | 1 hike |
| Silver | Trail Regular | 10 hikes |
| Gold | Trail Veteran | 50 hikes |
| Platinum | Trail Legend | 200 hikes |
Total Miles
| Tier | Title | Requirement |
|---|---|---|
| Bronze | Getting Started | 10 miles |
| Silver | Distance Hiker | 100 miles |
| Gold | Long Hauler | 500 miles |
| Platinum | Ultra Trekker | 1,000 miles |
Total Elevation
| Tier | Title | Requirement |
|---|---|---|
| Bronze | Hill Climber | 5,000 ft |
| Silver | Mountain Goat | 50,000 ft |
| Gold | Peak Bagger | 250,000 ft |
| Platinum | Everest Conqueror | 1,000,000 ft |
Summit Score (best single hike)
| Tier | Title | Requirement |
|---|---|---|
| Bronze | Solid Outing | Score 50+ |
| Silver | Strong Summit | Score 70+ |
| Gold | Elite Hiker | Score 85+ |
| Platinum | Perfect Summit | Score 95+ |
Single Day Miles (best single hike)
| Tier | Title | Requirement |
|---|---|---|
| Bronze | Day Tripper | 5 miles |
| Silver | Long Day Out | 15 miles |
| Gold | Marathon Hiker | 25 miles |
| Platinum | Ultra Distance | 35 miles |
Single Day Elevation (best single hike)
| Tier | Title | Requirement |
|---|---|---|
| Bronze | Uphill Battle | 1,000 ft |
| Silver | Ridge Runner | 3,000 ft |
| Gold | Summit Seeker | 5,000 ft |
| Platinum | Vertical King | 8,000 ft |
Streak (consecutive weeks with at least one hike)
| Tier | Title | Requirement |
|---|---|---|
| Bronze | Getting Regular | 2 weeks |
| Silver | Habit Forming | 8 weeks |
| Gold | Half-Year Streak | 26 weeks |
| Platinum | Year-Round Hiker | 52 weeks |
Weeks are counted Monday through Sunday. Consecutive means no gap of more than 7 days between week starts that contain hikes.
Consistency (most hikes in any single calendar month)
| Tier | Title | Requirement |
|---|---|---|
| Bronze | Weekend Warrior | 4 hikes/month |
| Silver | Dedicated Hiker | 8 hikes/month |
| Gold | Trail Addict | 15 hikes/month |
| Platinum | Every Day Hiker | 25 hikes/month |
11. Score Labels
Here is what the label next to your score means:
12. What Doesn't Affect Your Score
Some data is collected and displayed but does not influence your score: