Skip to main content

VDOT and Pace Tables

Everything you need to turn one race result into a full set of training paces, without leaving this guide.

What VDOT Is

VDOT is a single number that summarizes your current racing fitness. It was developed by Jack Daniels and Jimmy Gilbert, who took real race performances across distances and worked out the oxygen cost of running at a given speed, plus the fraction of maximum oxygen uptake a runner can hold for a given duration. Combine those two curves and any race time maps onto one number - your VDOT.

Two things make it useful:

  1. It is a "pseudo VO2max." It bakes in running economy, so two runners with the same lab-measured VO2max but different economy get different VDOT values. VDOT reflects what you can actually do, not just what your engine measures.
  2. It is distance-agnostic. Because every distance maps onto the same number, a 5K result and a half-marathon result can be compared directly, and one race can generate paces for all your training.

The honest caveat

Race equivalency is a prediction of potential, not a promise. The tables assume you have the aerobic base and the distance-specific training to actually realize the longer-distance time. A fast 5K tells you what your marathon could be if you had also done the long runs, the marathon-pace work, the fueling practice, and the mileage. Without that, the equivalent marathon time is a target you have not earned yet.

The error runs in a predictable direction:

  • Short race -> long race: usually optimistic. Your 5K flatters your marathon.
  • Long race -> short race: usually conservative. Your marathon undersells your 5K.
  • The bigger the extrapolation, the bigger the gap. 5K to 10K is reliable. 5K to marathon is a hypothesis.

The worked example further down is a concrete case of exactly this failure mode.

Find Your VDOT (Race Equivalency)

Run down the column for a distance you have actually raced recently, find the time closest to yours, and read the VDOT on the left. That row is your fitness. Everything else in that row is what the same fitness should be worth at other distances, assuming appropriate training.

VDOT1500mMile5K10KHalfMarathon
308:309:1030:411:03:492:21:174:49:49
318:158:5529:511:02:052:17:304:42:21
328:028:4029:051:00:272:13:554:35:17
337:498:2628:2058:542:10:314:28:34
347:368:1327:3857:252:07:174:22:11
357:258:0126:5956:022:04:134:16:06
367:147:4926:2154:422:01:184:10:19
377:037:3825:4553:271:58:314:04:47
386:547:2725:1052:151:55:513:59:30
396:447:1724:3851:061:53:193:54:27
406:357:0724:0650:011:50:543:49:37
416:266:5823:3648:581:48:353:45:00
426:186:4923:0847:581:46:223:40:33
436:106:4022:4047:011:44:143:36:17
446:036:3222:1446:061:42:123:32:12
455:566:2421:4945:131:40:143:28:16
465:496:1721:2444:231:38:213:24:29
475:426:1021:0143:341:36:333:20:50
485:366:0320:3842:481:34:483:17:19
495:305:5620:1742:031:33:083:13:56
505:245:5019:5641:201:31:313:10:40
515:185:4419:3640:381:29:583:07:30
525:135:3819:1739:581:28:283:04:28
535:075:3218:5839:191:27:013:01:31
545:025:2718:4038:421:25:372:58:40
554:575:2118:2238:061:24:162:55:55
564:535:1618:0537:311:22:582:53:15
574:485:1117:4936:571:21:422:50:40
584:445:0617:3336:241:20:282:48:09
594:395:0217:1835:531:19:172:45:44
604:354:5717:0335:221:18:092:43:22
614:314:5316:4834:521:17:022:41:05
624:274:4916:3434:231:15:572:38:52
634:244:4516:2133:551:14:542:36:43
644:204:4116:0733:281:13:542:34:37
654:164:3715:5533:021:12:542:32:35
664:134:3315:4232:361:11:572:30:37
674:104:3015:3032:121:11:012:28:41
684:064:2615:1831:471:10:072:26:49
694:034:2315:0731:241:09:142:24:59
704:004:1914:5631:011:08:232:23:13
723:544:1314:3430:171:06:442:19:48
743:494:0714:1429:351:05:102:16:33
763:444:0113:5428:561:03:422:13:28
783:393:5613:3628:181:02:172:10:31
803:343:5113:1827:421:00:572:07:43
823:293:4613:0127:0859:402:05:03
843:253:4112:4526:3558:272:02:29
853:233:3912:3726:1957:512:01:15

Half = 21.0975 km, Marathon = 42.195 km, Mile = 1609.344 m.

Orientation: VDOT 30-40 is a new or returning runner, 40-50 a solid recreational runner, 50-60 a competitive club runner, 60-70 a strong regional/collegiate runner, and 70+ national-class and above.

Your Training Paces

Same VDOT rows. These are the five Daniels intensities, expressed as a percentage of the velocity your VDOT supports.

  • Easy (E) - 62-72% of VDOT. The wide range is deliberate: recovery days sit at the slow end, longer aerobic runs drift toward the fast end. Most of your week lives here.
  • Marathon (M) - 84%. Steady, controlled, "comfortably hard but boring."
  • Threshold (T) - 88%. Tempo runs and cruise intervals. Comfortably hard, roughly one-hour race effort.
  • Interval (I) - 98%. VO2max work, in reps of about 3-5 minutes.
  • Repetition (R) - 106%. Short, fast, full-recovery reps for speed and economy. Prescribed per 400m/200m, never as a sustained pace.
VDOTEasy (/mi)Marathon (/mi)Threshold (/mi)Interval (/mi)Interval (/400m)Repetition (/400m)
3012:03-13:3010:4110:189:282:212:13
3111:45-13:1010:2510:039:132:182:09
3211:28-12:5210:109:488:592:142:06
3311:11-12:349:559:338:462:112:03
3410:56-12:179:419:208:342:082:00
3510:41-12:009:289:078:222:051:57
3610:27-11:459:158:558:112:021:55
3710:14-11:309:038:438:001:591:52
3810:01-11:168:528:327:501:571:50
399:49-11:028:418:227:401:541:47
409:37-10:498:308:127:311:521:45
419:26-10:378:208:027:221:501:43
429:15-10:258:117:537:131:481:41
439:05-10:148:027:447:051:461:39
448:55-10:037:537:356:571:441:37
458:46-9:527:447:276:501:421:36
468:36-9:427:367:196:431:401:34
478:28-9:327:287:126:361:381:32
488:19-9:227:217:046:291:371:31
498:11-9:137:136:576:231:351:29
508:03-9:047:066:516:161:341:28
517:55-8:567:006:446:101:321:26
527:48-8:486:536:386:051:311:25
537:41-8:406:476:325:591:291:24
547:34-8:326:416:265:541:281:22
557:27-8:246:356:205:481:271:21
567:21-8:176:296:155:431:251:20
577:15-8:106:246:095:381:241:19
587:08-8:036:186:045:341:231:18
597:03-7:576:135:595:291:221:17
606:57-7:506:085:545:251:211:16
616:51-7:446:035:505:201:201:15
626:46-7:385:585:455:161:191:14
636:41-7:325:545:415:121:181:13
646:36-7:265:495:365:081:171:12
656:31-7:215:455:325:041:161:11
666:26-7:165:415:285:011:151:10
676:21-7:105:365:244:571:141:09
686:17-7:055:325:204:531:131:08
696:12-7:005:285:164:501:121:08
706:08-6:555:255:134:471:111:07
726:00-6:465:175:064:401:101:05
745:52-6:375:104:594:341:081:04
765:44-6:295:044:534:281:071:03
785:37-6:204:574:474:231:051:01
805:30-6:134:514:414:171:041:00
825:24-6:054:464:354:121:030:59
845:17-5:584:404:304:081:020:58
855:14-5:554:384:274:051:010:57

Easy is written fast-end first (72% of VDOT) to slow-end second (62%). A recovery day belongs at the slow end.

Same paces, per kilometer

VDOTEasy (/km)Marathon (/km)Threshold (/km)Interval (/km)Repetition (/km)
307:29-8:236:386:245:535:31
317:18-8:116:286:145:445:23
327:07-7:596:196:055:355:15
336:57-7:486:105:565:275:07
346:48-7:386:015:485:195:00
356:38-7:285:535:405:124:53
366:30-7:185:455:325:054:46
376:21-7:095:385:254:584:40
386:14-7:005:305:184:524:34
396:06-6:525:245:124:464:28
405:59-6:445:175:064:404:23
415:52-6:365:115:004:354:18
425:45-6:285:054:544:294:13
435:39-6:214:594:484:244:08
445:32-6:144:544:434:194:03
455:27-6:084:494:384:153:59
465:21-6:014:434:334:103:55
475:15-5:554:394:284:063:51
485:10-5:494:344:244:023:47
495:05-5:444:294:193:583:43
505:00-5:384:254:153:543:39
514:55-5:334:214:113:503:36
524:51-5:284:174:073:473:33
534:46-5:234:134:033:433:29
544:42-5:184:094:003:403:26
554:38-5:134:053:563:363:23
564:34-5:094:023:533:333:20
574:30-5:053:583:493:303:17
584:26-5:003:553:463:273:15
594:23-4:563:523:433:253:12
604:19-4:523:493:403:223:09
614:16-4:483:463:373:193:07
624:12-4:453:433:343:163:04
634:09-4:413:403:323:143:02
644:06-4:373:373:293:113:00
654:03-4:343:343:263:092:57
664:00-4:313:323:243:072:55
673:57-4:273:293:213:052:53
683:54-4:243:273:193:022:51
693:51-4:213:243:173:002:49
703:49-4:183:223:142:582:47
723:43-4:123:173:102:542:43
743:39-4:073:133:062:502:40
763:34-4:013:093:022:472:37
783:29-3:563:052:582:432:33
803:25-3:523:012:542:402:30
823:21-3:472:582:512:372:27
843:17-3:432:542:482:342:24
853:15-3:402:522:462:322:23

The Repetition /km figure is for conversion only. Never actually run a kilometer at R pace - R work is done in 200m-400m reps with full recovery.

How to Use This

  1. Get an honest input. Race, or run a real time trial - a hard 5K on a flat course or a track, fully rested, going for it. Effort you would not want to repeat that day.
  2. Find the row. Look up your time in the race-equivalency table under the distance you ran, and note the VDOT.
  3. Read across the pace table. That single row gives you every workout pace for the next training block. Write them on your hand, put them in your watch, tape them to the fridge.
  4. Use the SLOWEST honest result, not your PR from years ago. This is the single most common way runners misuse VDOT. Your fitness is what you can do this month. Training off a stale VDOT means every easy run is too fast, every threshold run is a race, and you accumulate fatigue instead of adaptation. If in doubt, round DOWN a point or two.
  5. Adjust for conditions. Heat, humidity, altitude, wind, hills, and trails all make the same effort slower. The paces are for cool weather on flat ground. On a hot day, run the effort, not the number.
  6. Re-test every 4-6 weeks. Move up a VDOT point only when a race or time trial earns it, not because you feel good on a Tuesday.

A word on the Easy range: if you can only remember one number, remember the slow end. Almost nobody's problem is that their easy runs are too easy.

Worked Example: When Equivalency Lies

Real data from this guide's author.

The input: a 16:40 5K. Looking it up in the race table, that sits between VDOT 61 (16:48) and 62 (16:34) - call it VDOT 62 (the formula puts it at 61.6).

The training paces that come out of VDOT 62:

PacePer milePer kmPer 400m
Easy6:46-7:38 (he ran ~7:23)4:12-4:45-
Marathon5:58 (call it ~6:00)3:43-
Threshold5:45 (he used 5:47)3:34-
Interval5:16 (he used 5:18)3:161:19
Repetition--1:14

Those paces worked. They are the paces he actually trained at.

Now the equivalency claim. Read across the VDOT 62 row of the race table and it predicts a marathon of 2:38:52. The lookup he actually used at the time gave 2:39:46 - same neighborhood, same message: sub-2:40.

What actually happened: 2:55:13.

That is a VDOT 55 marathon (the formula puts 2:55:13 at 55.3). Same runner, same year. His 5K said 62; his marathon delivered 55. A 16-minute gap between the prediction and the result - over 6% slower than "equivalent."

Why? Nothing mysterious. The 5K fitness was real. The marathon-specific fitness was not there to cash it in:

  • Not enough weekly volume to make 26.2 miles a routine distance rather than an event.
  • Too few long runs with marathon-pace segments inside them.
  • Fueling and hydration under-rehearsed, so late-race energy fell off.
  • Durability - the ability to hold economical form at mile 22 - is trained, and it had not been trained.

The lesson, restated: VDOT told him what his engine was worth. It could not tell him whether he had built the chassis to use it over 26.2 miles. Equivalency is a ceiling, not a forecast. The shorter your race and the longer your target, the more of that gap you have to close with actual specific training - and the more honest you have to be about whether you closed it.

If your goal race is a marathon, race a half. If your goal is a half, race a 10K. Predict from as close to the target distance as you can.

Method and Verification

These tables are computed, not copied. The numbers here were generated by running the published Daniels-Gilbert equations, not transcribed from any book's tables. Two curves do all the work:

1. Oxygen cost of running at a velocity v (m/min):

VO2 = -4.60 + 0.182258 * v + 0.000104 * v^2

2. Fraction of VO2max sustainable for a duration t (minutes):

%max = 0.8 + 0.1894393 * e^(-0.012778 * t) + 0.2989558 * e^(-0.1932605 * t)

Race times come from solving VO2(distance/t) / %max(t) = VDOT for t. Training paces come from solving VO2(v) = VDOT * intensity for v, using Easy 62-72%, Marathon 84%, Threshold 88%, Interval 98%, Repetition 106%. Root-finding is done by bisection; velocities are converted with 1 mile = 1609.344 m.

Verification against published anchors

Spot-check the computed 5K times at anchor VDOTs against the corresponding rows of the tables in Daniels' Running Formula:

VDOTComputed 5KAgreement with published table
3030:41within ~2s
4024:06within ~2s
5019:561s fast of the published 19:57
5518:22within ~2s
6017:03exact match
6515:55within ~2s

Every anchor lands within about 2 seconds of the published value, across a 15-minute spread of race times - i.e. inside rounding noise. The generated tables are faithful to the system without reproducing its copyrighted tables. Verify any row yourself by re-running the script below.

<details> <summary><strong>The generator script</strong> (python3, no dependencies - click to expand)</summary>
#!/usr/bin/env python3
"""Generate VDOT race-equivalency and training-pace tables from the
Daniels-Gilbert formulas. Tables are computed, not copied."""
import math

def brentq(f, a, b, tol=1e-10):
    """Bisection root-finder - no scipy needed."""
    fa, fb = f(a), f(b)
    if fa * fb > 0:
        raise ValueError("no bracket")
    for _ in range(200):
        m = (a + b) / 2.0
        fm = f(m)
        if abs(b - a) < tol:
            return m
        if fa * fm <= 0:
            b, fb = m, fm
        else:
            a, fa = m, fm
    return (a + b) / 2.0

def vo2_at(v):   # v = m/min -> oxygen cost, ml/kg/min
    return -4.60 + 0.182258 * v + 0.000104 * v * v

def pct_max(t):  # t = minutes -> fraction of VO2max sustainable
    return 0.8 + 0.1894393 * math.exp(-0.012778 * t) \
               + 0.2989558 * math.exp(-0.1932605 * t)

def race_time(vdot, meters):   # -> minutes
    return brentq(lambda t: vo2_at(meters / t) / pct_max(t) - vdot, 1.0, 400.0)

def vel_at_pct(vdot, pct):     # -> m/min
    return brentq(lambda v: vo2_at(v) - vdot * pct, 50.0, 600.0)

MILE = 1609.344
PCT = {"E_lo": 0.62, "E_hi": 0.72, "M": 0.84, "T": 0.88, "I": 0.98, "R": 1.06}
VDOTS = list(range(30, 71)) + list(range(72, 86, 2)) + [85]
DIST = [("1500m", 1500), ("Mile", MILE), ("5K", 5000), ("10K", 10000),
        ("Half", 21097.5), ("Marathon", 42195.0)]

def hms(minutes):
    s = round(minutes * 60)
    h, rem = divmod(s, 3600)
    m, sec = divmod(rem, 60)
    return f"{h}:{m:02d}:{sec:02d}" if h else f"{m}:{sec:02d}"

def mmss(seconds):
    m, sec = divmod(round(seconds), 60)
    return f"{m}:{sec:02d}"

per_mile = lambda v: MILE / v * 60.0
per_km   = lambda v: 1000.0 / v * 60.0
per_400  = lambda v: 400.0 / v * 60.0

print("| VDOT | " + " | ".join(d for d, _ in DIST) + " |")
for vd in sorted(set(VDOTS)):
    print(f"| **{vd}** | " + " | ".join(hms(race_time(vd, m)) for _, m in DIST) + " |")

print()
print("| VDOT | Easy (/mi) | M (/mi) | T (/mi) | I (/mi) | I (/400m) | R (/400m) |")
for vd in sorted(set(VDOTS)):
    e_hi, e_lo = vel_at_pct(vd, PCT["E_hi"]), vel_at_pct(vd, PCT["E_lo"])
    m, t = vel_at_pct(vd, PCT["M"]), vel_at_pct(vd, PCT["T"])
    i, r = vel_at_pct(vd, PCT["I"]), vel_at_pct(vd, PCT["R"])
    print("| **%d** | %s-%s | %s | %s | %s | %s | %s |" % (
        vd, mmss(per_mile(e_hi)), mmss(per_mile(e_lo)), mmss(per_mile(m)),
        mmss(per_mile(t)), mmss(per_mile(i)), mmss(per_400(i)), mmss(per_400(r))))

# verification
for vd in (30, 40, 50, 55, 60, 65):
    print(vd, hms(race_time(vd, 5000)))
</details>

Caveats on the model itself: the equations were fitted to well-trained runners on flat courses in good conditions. They say nothing about your ability to tolerate the training, and they assume the marathon is run with adequate fueling. Treat the output as a well-calibrated starting point, then let the training tell you the truth.


References

[1] Daniels, J. (2013). Daniels' Running Formula (3rd ed.). Human Kinetics. - The VDOT system, the five training intensities (E/M/T/I/R), and the published pace tables these computations are checked against.

[2] Daniels, J., & Gilbert, J. (1979). Oxygen Power: Performance Tables for Distance Runners. - The original source of the oxygen-cost and percent-of-VO2max equations used to generate the tables on this page.


Next: Back to the guide index