Treadmill incline equivalent pace calculator
Running at 10 km/h on a 5% incline costs as much oxygen as 12.25 km/h on flat ground, a 4:54 kilometre or a 7:53 mile. Enter belt speed and grade to see your flat-road equivalent. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Speed
- 10 kmh
- Grade
- 5
- Speed kmh
- 10 kmh
- Speed mph
- 6.2137119224
- Grade percent
- 5
- Grade fraction
- 0.05
A treadmill at a fixed belt speed is not the same workout as that speed on the road. Raising the deck adds a vertical component to every stride, so the oxygen cost of a ten-kilometre-per-hour climb matches a faster flat run. This treadmill incline equivalent-pace calculator takes the belt speed and the percent grade, applies the American College of Sports Medicine running oxygen-cost identity, and returns the equivalent flat-ground speed plus the matching minutes-per-kilometre and minutes-per-mile clocks.
How ACSM turns incline speed into an equivalent flat pace
The American College of Sports Medicine publishes a linear oxygen-cost model for treadmill running that splits the work of each minute into a horizontal term, a vertical term, and a resting term. In millilitres of oxygen per kilogram per minute the identity is VO2 equals 0.2 times belt speed in metres per minute, plus 0.9 times that speed times the grade as a fraction, plus 3.5 for rest.
The first term is the cost of covering ground; the second is the extra cost of lifting the body against the incline; the third is one metabolic equivalent. Two workouts that produce the same VO2 are treated as equivalent efforts. Setting the grade to zero and solving for speed therefore answers the question runners actually ask: if this incline session were run on a flat road, how fast would I have to go?
Algebra collapses that inversion to a single factor. Equivalent flat speed is belt speed times one plus 4.5 times the grade fraction. A 10 kilometre-per-hour belt at 5 percent grade has factor 1.225, so the equivalent flat speed is 12.25 kilometres per hour, which is a 4:54 kilometre and a 7:53 mile.
At zero grade the factor is one and the equivalent clocks equal the belt clocks, which is the identity check. Negative grades are outside this incline calculator and are rejected rather than extrapolated, because the linear ACSM running model is not a downhill predictor and a treadmill incline product should not invent a descent. Speed must be strictly positive: a stopped belt is not a run.
The same coefficients appear in the ACSM Guidelines for Exercise Testing and Prescription and in the distance-based oxygen-cost form used by running calorie estimators, so a session card that quotes this equivalent pace sits on the same published footing as a calorie estimate from the same family.
What to enter and what you get back
Speed must be strictly positive and, after conversion, no greater than 45 kilometres per hour, which is already faster than any consumer treadmill. Grade must sit between 0 and 40 percent inclusive: zero is a flat deck, and forty covers research decks that go well past the usual fifteen-percent home-machine stop. Each numeric field also accepts a decimal string.
On success the body echoes the resolved speed, unit, and grade, then reports both belt speeds in km/h and mph, the grade as a percent and as a fraction, and the ACSM adjustment factor. Equivalent flat speed is returned in both units. Belt and equivalent paces are returned as seconds per kilometre and per statute mile plus M:SS (or H:MM:SS) clocks rounded to the nearest second, which is how runners read a watch.
The ACSM VO2 in millilitres per kilogram per minute and the matching MET value are included so a coach can pair the pace with an intensity band. A short formula string restates the identity, and a one-line message summarises the conversion. Example: speed 10, unit kmh, grade 5 yields factor 1.225, 12.25 km/h flat, 4:54 per kilometre, and 7:53 per mile.
When an equivalent flat pace is useful
Indoor training plans often prescribe a belt speed and a deck angle, then need a road-pace language the athlete already understands. Translating 10 km/h at 5 percent into a 4:54 kilometre lets a coach compare that session with a tempo run on the path without a second spreadsheet.
Hill-simulation weeks on a treadmill use a fixed belt speed and a rising grade to load the same muscles a long climb would; quoting the ACSM equivalent pace keeps those weeks honest against outdoor threshold workouts that are written in minutes per kilometre. Race-prep athletes who cannot get outside still want to know whether today's incline block sits at half-marathon effort or closer to 10K effort, and the equivalent clocks answer that without a metabolic cart.
Keep requests inside the published limits, pin the rounded clocks in tests, and you get reproducible incline-adjusted equivalent flat paces for indoor programs, club newsletters, and edge workers without standing up a sports-science stack of your own. The calculator is not a VO2-max test and does not replace a lab; it is the published linear conversion from belt speed and grade to the flat pace that matches that oxygen cost.
What you can do with it
Indoor tempo and threshold sessions
Convert a prescribed belt speed and deck grade into the equivalent flat kilometre and mile clocks so a treadmill tempo can be compared with an outdoor threshold run.
Hill-simulation training blocks
Keep a rising-grade week honest against road hill work by quoting the ACSM equivalent pace at each belt speed and incline pair.
FAQ
How do I convert a treadmill incline workout to an equivalent flat pace?
Send a positive belt speed, a non-negative percent grade, and optional unit kmh or mph.
Which formula does the treadmill incline equivalent-pace calculator use?
S is metres per minute; G is grade percent divided by 100.
What happens if speed is zero or grade is negative?
A non-positive belt speed is not a run. A negative grade is a descent and is outside this incline calculator.
Does a 0% grade change the pace?
No. At zero grade the adjustment factor is 1, so equivalent speed and both pace clocks equal the belt clocks. That is the identity check for a flat deck.
Can I enter belt speed in miles per hour?
Yes. Choose miles per hour instead of the default kilometres per hour. The result shows the equivalent pace per kilometre and per mile, so it works with treadmills in either system.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/health/treadmill-incline-pace \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"speed":10,"grade":5}'const res = await fetch("https://api.kit.forhosting.com/health/treadmill-incline-pace", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"speed": 10,
"grade": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/treadmill-incline-pace",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"speed": 10,
"grade": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/treadmill-incline-pace", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"speed":10,"grade":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"speed":10,"grade":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/treadmill-incline-pace", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"speed": 10,
"grade": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.treadmill_incline_pace",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_speed_kmh | 45 |
max_grade_percent | 40 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Invalid or non-positive inputs fail with invalid_input and are not billed.
Inputs, units, response shape, and error behaviour
POST a JSON body with two required finite numbers: speed, the treadmill belt speed, and grade, the incline as a percent slope where 5 means five percent. Optional unit is kmh or mph and defaults to kilometres per hour; the listed aliases km/h, kph, and mi/h are accepted and folded into those two canonical values. Missing fields, non-finite values, a non-positive speed, a negative grade, a grade above 40, or an unknown unit fail with invalid_input naming the field. Those failures are not billed. Successful API calls use the published $0.002 base price. Pair the JSON with your own watch face if you need colours or a target-heart-rate overlay — this endpoint converts speed and grade only and never reads a workout file or the wall clock.
Integration use cases
Coaching platforms and session cards
Generate deterministic equivalent-pace lines from speed and grade so a programming spreadsheet, a gym kiosk, and the free browser widget never disagree.
Technical questions
What does the treadmill incline equivalent-pace calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.