How PROOF Miles are Calculated
Effective date: May 6, 2026
PROOF Miles are the unit of verified athletic effort. Every mile traces to a device-recorded activity confirmed through Strava — not self-reported, not inferred. Constants are derived from published metabolic-cost data (Ainsworth et al. 2011 Compendium of Physical Activities) and the work-energy theorem for elevation. The math is open, every multiplier is inspectable, and your lifetime total is preserved under the rules in effect when each mile was earned.
This document explains exactly how PM is calculated, where each constant comes from, and how we plan to evolve the methodology over time. If you race, coach, or think hard about training, you should be able to read this and reproduce every multiplier with the Compendium open on a second tab.
1. What PROOF Miles measure
PROOF Miles measure verified athletic effort, normalized across sports. The core idea: a mile of running, a mile of cycling, and a mile of swimming represent very different metabolic costs. PM is the unit that puts them on a common scale so a runner and a cyclist who train equally hard earn comparable credit.
"Verified" refers to the activity itself — that it was recorded by a device, uploaded through a third-party platform, and confirms when, where, and how far you moved. PROOF Miles is not a training-load metric or a fitness assessment. For training-load precision, see TSS (cycling, power-based), TRIMP (heart-rate based), or your platform's own training-load tool. PM is calibrated for cross-sport equity using published metabolic-cost data — intentionally simpler than those metrics because it is built to be inspectable, sport-agnostic, and stable across years of an athlete's record.
Activity data comes from Strava today. Additional platforms (Garmin Connect, Apple Health) come later. We read what the platform reports, run it through our calculation, and credit the result as PM. We don't infer effort from things you didn't actually do — if it isn't recorded by your fitness device or app, it doesn't count.
Lifetime PROOF Miles are designed to never reset and never decrease. Effort accrues for life. Tiers (Recruit through Apex, with Marks beyond) are graduated entirely on lifetime PM.
2. Which activities count
Strava records many things. PROOF only credits activities that pass a small set of inclusion gates — designed to keep the system honest without being precious about it.
These gates run on PROOF's side, against the activity data Strava sends us. We don't consume Strava's own moderation signals (their flagged-activity status, segment-leaderboard reviews, etc.) — those are post-hoc community processes that operate on a different timeline than reward issuance. More on that at the bottom of this section.
Sports we credit. Anything in Sections 4 and 5 of this page (cycling and its variants, running, trail running, hiking, walking, swimming). Sports outside that table — yoga, weight training, surfing, etc. — don't credit. We add new sports to the table as they make sense for the network.
Recorded by a device, not typed in. Manual entries — where you type "I ran 5 miles" into Strava without a watch or phone actually tracking it — don't credit. We need device-verified data to honor the "verified effort" promise; a typed entry isn't verified.
Indoor and virtual activities. They count. Strava forwards indoor rides without elevation data, so they credit on distance alone — Section 7 covers the detail. Treadmills, smart trainers, Zwift sessions are all eligible.
Elevation, when reported. When the recording device captures elevation gain, it credits per the Section 5 weights. When it doesn't, the activity credits on distance only. We don't infer elevation from terrain databases or course data — only what the device measured.
Sport-specific speed ceilings. A "run" averaging 25 mph or a "ride" averaging 50 mph drops through the speed-ceiling screen. Each sport has its own ceiling tuned to what real athletes actually achieve at the elite end (Tour de France average pace ≈ 25 mph; world-class marathon pace ≈ 13 mph). Activities below a small distance minimum also don't credit — guards against accidental partial recordings.
Multi-device duplicate detection. Recording the same effort on two devices at once (head unit + phone, watch + bike computer) creates two separate Strava activities. PROOF detects duplicates across the same sport, start time within ±10 minutes, and matching distance + duration; one credits, the other is recognized as a duplicate and ignored.
Daily cap. A single athlete can earn up to 250 miles of distance-based PROOF Miles per UTC day. The activity that crosses the cap credits its remaining headroom on distance and full elevation on top — once the day's distance total reaches 250, further activities that day are rejected entirely (no distance credit, no elevation credit). The cap sits well above what almost any athlete logs in a day, but exists so a single anomalous activity can't inflate the system.
What we don't currently do. Strava's flagged-activity status, leaderboard moderation, and segment review are processes that run on Strava's timeline (sometimes days or weeks after upload, often via community reports). PROOF credits at activity-create time and doesn't re-check or roll back later. We may add Strava-flag awareness in a future release; today, the integrity guarantees are the gates listed above. If something gets through that shouldn't have, the brand admin can reach out and we'll review.
3. The v1.0 calculation
For every verified activity, the formula is:
elevation_mi_equiv = (elevation_gain_m / 100) × sport_elevation_weight
distance_pm = floor(distance_mi × sport_multiplier)
climbing_pm = floor(elevation_mi_equiv × sport_multiplier)
verified_pm = max(1, distance_pm + climbing_pm)
Two sport-specific constants drive the math: a multiplier (how a mile of this sport compares to a mile of cycling, the anchor) and an elevation weight (how much each 100m of climbing contributes in miles-equivalent). Both come from a per-sport reference table you can read in Sections 3 and 4.
Each component is floored to a whole number independently, then summed. The total is clamped to a minimum of 1 PM so any qualifying activity that passes our fraud-screening gates credits at least one mile of effort.
On your activity dashboard, the breakdown is shown directly: "42 from miles · 16 from climbing". You always see what each component contributed.
4. Sport multipliers (v1.6)
The multiplier is anchored to road cycling at 14 mph (Compendium 2011 entry 01040, 10.0 MET). For each other sport, the pure-MET multiplier is derived as (sport MET / sport pace_mph) ÷ (10.0 / 14). This produces the per-mile metabolic cost ratio against the cycling anchor. Where we adjust above the pure-MET number — for impact load, on-water cardiovascular premium, whole-body engagement, level-trail metabolic cost — the adjustment is named explicitly with its rationale.
| Sport (Strava type) | Compendium code · MET · pace | Multiplier | Adjustment |
|---|---|---|---|
| Ride / VirtualRide | 01040 · 10.0 MET · 14 mph (anchor) | 1.00 | — |
| GravelRide | 01030 · 8.0 MET · 12 mph | 0.95 | — |
| MountainBikeRide | 01009 · 8.5 MET · 9 mph | 1.30 | — |
| EBikeRide | 01084 · 6.0 MET · 14 mph (light electronic support) | 0.60 | — |
| Run / VirtualRun | 12070 · 11.0 MET · 7 mph | 2.50 | +14% † |
| TrailRun | Run + level-trail premium | 2.70 | +0.20 ‡ |
| Hike | 17080 · 6.0 MET · 3 mph | 2.80 | — |
| Walk | 17200 · 4.8 MET · 3.5 mph | 1.90 | — |
| Swim | 18240–18290 · 5.8–8.0 MET · 1.7 mph (midpoint) | 6.00 | — |
| Rowing (water) | 18050 · 5.8 MET · 6 mph | 1.40 | +5% § |
| Kayaking | 18100 · 5.0 MET · 4 mph | 1.75 | — |
| NordicSki / RollerSki | 19090 · 8.5 MET · 4.5 mph | 2.90 | +10% ¶ |
† Run: pure-MET derivation gives 2.20. The +14% above pure-MET is a cross-modality balancing factor reflecting running's higher impact load, EPOC premium, and athlete-perceived effort relative to cycling at the anchor pace. This adjustment is editorial — labeled as such rather than presented as additional physiology — and is a live calibration we will revisit in v2.1 against accumulated cohort data.
‡ TrailRun: Run baseline plus a +0.20 level-trail metabolic premium consistent with published comparative studies of trail vs road running on level terrain. Uphill premium is captured separately by the elevation weight (Section 5).
§ Rowing (water): Compendium 18050 gives 1.35 pure-MET. The +5% is an on-water premium reflecting balance, wind, and steering — published literature shows water rowing produces meaningfully higher HR and lactate at matched-power vs ergometer rowing.
¶ NordicSki: Compendium 19090 gives 2.64 pure-MET. The +10% reflects whole-body engagement — XC skiing has the highest measured VO₂max among Olympic sports (sustained ~96 ml/kg/min in elite), driven by upper-body work that is not fully captured in lower-body-dominant Compendium derivations. Pure-MET 2.64 + 10% = 2.90.
E-bikes are rated below cycling because the motor does meaningful work — we credit the human contribution. Mountain biking is rated above road cycling because off-road effort at equivalent distance is genuinely higher. Gravel sits between them.
All Compendium codes refer to entries in the 2011 update of the Compendium of Physical Activities (Ainsworth et al., Med Sci Sports Exerc 43(8):1575-81). Available openly at pacompendium.com.
5. Elevation weights (v1.6)
Elevation weights determine how much each 100m of climbing contributes, expressed in miles-equivalent. The cycling weight is derived from the work-energy theorem (gravity is exact); other sports' weights are derived from Minetti et al. 2002 (J Appl Physiol 93:1039-46), the canonical reference for the energy cost of walking and running on extreme uphill and downhill slopes.
| Sport | Elevation weight (per 100m) |
|---|---|
| Cycling (all variants) | +1.75 mi |
| Hike | +0.95 mi |
| TrailRun | +0.70 mi |
| Run / VirtualRun | +0.60 mi |
| NordicSki / RollerSki | +0.60 mi |
| Walk | +0.40 mi |
| Swim / Rowing / Kayaking | 0 |
Cycling elevation derivation. Lifting an 85kg system (75kg rider + 10kg gear) by 100m requires mgh = 85 × 9.81 × 100 = 83.3 kJ of mechanical work. At 23% gross cycling efficiency (a well-validated mid-range value), the metabolic cost is 83.3 / 0.23 ≈ 362 kJ metabolic. A flat mile at 14 mph requires roughly 165W × 257s = 42.4 kJ mechanical, or ≈ 184 kJ metabolic. The ratio is 1.97; the +1.75 weight is a conservative round-down for the median rider. Per-athlete weight normalization is deferred to v3.0.
Hike weight (+0.95) higher than Run weight (+0.60). Per Minetti, the energy cost gradient for walking is steeper than for running on uphill terrain because walking has less elastic recoil to recover energy on each step. Running's biomechanics favor rebound; walking's do not. Hikers climbing 100m do meaningfully more work per vertical meter than runners; the elevation weight reflects this.
6. Worked examples
Five activities, working through the v1.6 math.
7. Indoor and virtual rides
Strava reports zero elevation gain for indoor and virtual activities — Zwift, Peloton, smart-trainer rides, treadmill runs. The activity data we receive doesn't include the simulated terrain those platforms render in their apps. As a result, indoor rides credit on distance alone.
We know this matters to athletes who do serious work on virtual hills. A 90-minute Alpe du Zwift effort is real climbing — it just doesn't appear in the data Strava forwards to us. We're evaluating direct integrations with Zwift and Peloton in future releases to capture virtual-terrain effort properly. For now, your indoor rides credit their distance and your outdoor rides credit distance plus elevation.
If you have access to a smart treadmill or trainer that reports elevation_gain to Strava (some do), it'll credit through the standard math automatically.
8. What we capture but don't yet use
On every activity, we record more than what v1.0 of the calculation reads. We capture (and store) all of the following from every Strava activity:
- Heart rate — average and maximum
- Power — average watts and weighted average watts (when a power meter is present)
- Energy — kilojoules of work performed
- Strava's native effort score (the platform's own intensity rating)
- Elevation gain (already used in v1.0)
- Moving time (already used for our speed-ceiling fraud check)
The reason we capture now without computing now: we'll need this data to credibly extend the methodology in future versions. If we waited until v1.x to start capturing heart rate, athletes who connected before that release would have months of activities with no HR data on file. By capturing from launch, every activity from v1.6 forward has a complete record — so when we add intensity-aware or power-aware credit, it applies fairly across the network's history.
Future releases may use this data for intensity-weighted PM, power-aware PM, recovery-context calculation, dimension-specific brand challenges, athlete specializations (Climbing Specialist, Power Specialist, etc.), and brand analytics. We'll publish those features as they ship — not on a fixed roadmap, but with the same versioning discipline as v1.0.
9. Versioning
We follow a version-from-now policy: when we ship a new version of the calculation, activities credited under the previous version stay at that version. New activities apply the new rules. We do not retroactively recompute lifetime PM when the math evolves.
Why: if every methodology revision triggered a global re-score, your lifetime PM would be a moving target — not a credential. Version-from-now means once you've earned a mile, it's yours under the rules in effect at the time you earned it.
Each activity row records its method version in the data layer. When we publish v1.1 (or v2.0), this page will gain a changelog showing what changed and what the previous version's math was. Inspectable forever.
Changelog
- v1.6 — sport multiplier and elevation weight recalibration. Anchored to the 2011 Compendium of Physical Activities (Ainsworth et al., Med Sci Sports Exerc 43(8):1575-81) with documented cross-modality balancing factors and physics-derived elevation weights. Per-sport changes vs v1.0: GravelRide 1.20→0.95, MountainBikeRide 1.50→1.30, EBikeRide 0.40→0.60 (corrected MET basis), Run 3.00→2.50, TrailRun 4.00→2.70, Hike 1.00→2.80 (major correction), Walk 1.00→1.90, Swim 8.00→6.00, Rowing 2.00→1.40, Kayaking 2.00→1.75, NordicSki added at 2.90. Cycling elevation weight 1.00→1.75 (physics-derived). Methodology page rewritten with explicit Compendium codes, derivation appendix, and limitations acknowledgment. Effective May 6, 2026.
Within-v1.6 citation corrections (2026-05-11): independent verification against the live Compendium source caught three citation errors in the original v1.6 ship. MountainBikeRide cited 01015 (which is actually "Bicycling, self-selected easy pace" at 4.3 MET); the intended entry is 01009 "Bicycling, mountain, general" at 8.5 MET. The shipped 1.30 multiplier is correct under the corrected code (citation-only fix). Walk cited 4.3 MET; Compendium 17200 publishes 4.8 MET — multiplier corrected 1.70 → 1.90. NordicSki / RollerSki cited 9.0 MET; Compendium 19090 publishes 8.5 MET— multiplier corrected 3.00 → 2.90 (preserving the +10% upper-body engagement premium). The cycling anchor (01040 = 10.0 MET / 14 mph) was verified and holds. Version stays v1.6 because the math shape is unchanged; activities credited before 2026-05-11 retain their original multiplier (version-from-now). - v1.0 — initial release. Distance + elevation-aware calculation with first-pass sport multipliers. Effective April 30, 2026. Activities credited under v1.0 retain v1.0 totals; v1.6 applies forward only.
10. What this isn't
v1.6 calibration draws directly from the 2011 Compendium of Physical Activities (Ainsworth et al., Med Sci Sports Exerc 43(8):1575-81) for sport multipliers and Minetti et al. 2002 (J Appl Physiol 93:1039-46) for elevation weights. Future versions may incorporate additional published frameworks — Banister's TRIMP for cardiovascular load, Coggan's TSS for power-based effort — and we'll cite each in the changelog when they ship.
But PROOF Miles are not any of those metrics. Specifically:
- PM is not Strava's Suffer Score or Relative Effort. Those are proprietary to Strava and trademarked by them. Our calculation is independent and uses different inputs.
- PM is not WHOOP Strain. WHOOP's Strain Score is a proprietary measure derived from their wearable data; PM is a public, open-formula calculation you can verify yourself.
- PM is not a TSS or TRIMP score. Those metrics use different inputs (power-or-HR-time-in-zone curves) and serve different purposes (training-load tracking for performance modeling). PM is a cross-sport effort unit, not a training prescription.
- PM is not a fitness or readiness assessment. We don't calculate or display VO2 Max, recovery state, or training stress. We measure verified effort, not capacity.
11. Known limitations
We'd rather state these openly than pretend we capture them. PM's precision is bounded by what device-recorded activity data can tell us. Specifically:
- Body mass. A 90kg rider does meaningfully more mechanical work than a 60kg rider on the same climb, but earns the same PM. Per-athlete weight normalization is deferred to v3.0 (will be optional, opt-in via athlete profile).
- Intensity within a sport. A leisurely 50-mile ride and a hard 50-mile race earn the same PM despite different metabolic costs. Heart-rate-zone and power-based intensity refinements are deferred to v2.x; v1.6 captures the data (every activity stores HR, watts, kilojoules) but does not compute on it.
- Environmental factors. Heat, altitude, humidity, and wind all meaningfully affect metabolic cost. None are recorded by Strava in a form we can use. Activities completed in adverse conditions earn the same PM as those in ideal conditions.
- Indoor / virtual elevation. Strava reports zero elevation gain for indoor and virtual rides (Section 7). Zwift's simulated climbing is real effort but isn't in the data we receive. Direct integrations are on the roadmap.
- Pace variance within a sport. Walk and Run multipliers assume a representative recreational pace (3.5 mph and 7 mph respectively). Faster or slower athletes are credited at the same per-mile rate. Pace-aware multipliers are deferred to v2.x.
These limitations are visible to us. We don't engineer around them with hidden adjustments or proprietary smoothing. Where the data is not there, we credit what the data does say and document the gap.
12. Brand-layer modifiers (not part of PM)
PROOF Miles, as defined in Sections 3-6, are the methodology-canonical number. Brand partners can layer two configurable behaviors on top of PM at the brand layer — these affect what the athlete accumulates in that brand's program, not the athlete's lifetime PM, tier, or public-profile total.
Anniversary multiplier. Each brand can configure an unconditional multiplier (1.0–3.0) that applies for a window of days following each yearly rollover of the athlete's connection-with-that-brand date. The default multiplier is 1.0 (off); the default window is 7 days. A brand running a 2× / 7-day anniversary kicker means an athlete who rides during their connection-anniversary week earns 2× brand PM for those activities, which can advance brand-side milestones and rewards faster. The first window opens on the first anniversary (year+1 of connect day), not on connect day itself — connect-day is covered separately by welcome bonuses where the brand has them. February 29 connections roll to February 28 in non-leap years.
Forward-only brand PM. Brand PM only credits activities dated on or after the athlete connected to that brand. Lifetime PM accumulates everything (including activities dated before the brand connection); brand PM does not. Reasoning: brand-side rewards have to mean "what this athlete did for this brand, while connected" — retroactive credit on bulk-uploaded historical rides would let an athlete cross the 500-PM brand milestone within minutes of enrollment, breaking the audit story for brand admins.
Lifetime PM, the tier ladder, and the public profile are unaffected by either mechanism. The methodology-canonical PM stamped on each activity row is unaffected. Both modifiers are visible to the athlete in brand-side reward emails and in the brand's storefront loyalty section when implemented.
13. For coaches and physiologists
Three questions we expect from anyone who reads this page closely.
Why doesn't PM use heart rate? Heart rate data is widely available and would let us refine intensity. Two reasons it's deferred: (a) optical-HR (wrist-strap) data is meaningfully noisier than chest-strap HR, especially at intensity, so a HR-derived multiplier would amplify measurement noise; (b) HR-zone calibration requires a per-athlete HR_max input, and the standard age-predicted estimate (220-age, or Tanaka 208 - 0.7×age) has standard error of 7-12 bpm — large enough to put zone boundaries fully inside the error bar. v2.x ships with athlete-provided HR_max and a bounded intensity multiplier.
Why doesn't PM use body mass? Cycling at 14 mph and climbing 100m both depend on body mass, and PM doesn't correct for it. The reason: requiring weight input creates a barrier to participation, and any default we use (75kg system in our cycling derivation) is wrong for individual athletes by up to ±30%. v3.0 ships an opt-in athlete-profile weight input that adjusts climbing PM; athletes who don't provide weight are credited at the median assumption.
Why isn't running pace-aware when walking will be? Running and walking both vary by pace, but walking varies more in kind — a 2.5 mph stroll and a 4.5 mph fitness walk are qualitatively different exercise — while a 6 min/mile tempo and a 12 min/mile recovery jog are both still running. v1.6 ships a fixed Walk multiplier with a documented pace assumption. Pace-aware multipliers (for walking and running) are a v2.x decision pending field data on whether the added complexity earns its keep.
14. Annual methodology audit
We commit to publishing a yearly methodology audit. Each audit reports per-sport PM distributions across the network, correlations against published training-load metrics where the underlying data exists (TSS for cyclists with power, TRIMP for athletes with HR), any constants under review, and any changes shipping in the next version. The first audit lands in 2027; preliminary cohort analysis from May 6, 2026 forward will inform v2.x calibrations.
The methodology page is the audit trail. Every change shows up in the changelog (Section 9). Every constant traces to a citation. If a published exercise physiologist reads this and finds an error or a stronger calibration, we want to know — see Section 15 below.
15. Feedback
We expect to revise this methodology. The constants in Sections 4 and 5 are our best calibration today, informed by public research and our own analysis — but coaches, physiologists, and athletes who think hard about training will have informed opinions, and we want to hear them.
If you have a substantive case for a different constant, a critique of our reasoning, or a proposed addition to the calculation, email us at team@verifiedeffort.com. We read every message. Substantive proposals get genuine consideration; if they shift our math, you'll see them in the changelog above.
16. For brand admins
If you run a brand loyalty program on PROOF, this calibration affects how fast your athletes accumulate brand PM. Two things to know:
- Climbing-heavy cohorts accumulate PM faster than flat-cohort projections imply. The v1.6 cycling elevation weight (1.75 mi-equivalent per 100m) is up from v1.0's 1.0, so a brand whose customers regularly climb significant vertical will see milestone-crossing rates 25–50% faster than a brand whose customers ride mostly flat terrain. Set milestone PM thresholds with this in mind.
- Multi-sport cohorts will see different rates than v1.0 implied.The v1.6 recalibration shifted Run multiplier 3.0→2.5, Swim 8.0→6.0, Hike 1.0→2.8, Walk 1.0→1.9. Brands with significant non-cycling exposure should expect accumulation rates to reflect the new constants from the effective date forward. Existing PM accumulated under v1.0 is preserved.
- The shape of the milestone ladder doesn't change. A 500/1000/2500/5000/10000/25000 PM ladder is still a graduated structure. Calibration changes the rate, not the structure. If you've calibrated milestones to feel "reachable in 2-3 months for an active member" under v1.0 intuition, that timing shifts modestly faster for cycling-with-climbing cohorts and shifts meaningfully for hike/walk-heavy cohorts.
We don't recommend rebuilding your milestone ladder around elevation specifically. PM is the unit; the ladder is the structure. The methodology revision affects how PM accumulates, not how you should think about your reward strategy.
17. Privacy reference
This methodology document explains how we calculate PROOF Miles from the data we collect. For details on what data we collect, how we use it, who we share it with, your rights, and our retention practices, see our Privacy Policy.
Short summary: we collect activity data from connected fitness platforms with your explicit OAuth consent, use it to calculate PM and operate brand programs you've joined, and don't sell, rent, or share it for advertising. We do not train AI or machine-learning models on athlete activity data.
This methodology applies to PROOF as operated by PROOF Verified Effort, Inc. The math and reasoning here are open and inspectable. The v1.6 calculation took effect on May 6, 2026 and applies forward from that date.