For race directors
Heats
Split a sub-event into heats, see who is in each one, and move runners between them. Works for track meets (pace-grouped heats with a shared sub-event start time) and for staggered start waves (each heat with its own gun time). Configure per sub-event; toggle off when you don't need it.
Open the page
From your event's director dashboard, click Heats in the sidebar. You see every sub-event with a status pill: Heats off, Heats on · no heats yet, or the count of configured heats. Once a sub-event has heats, its row also shows how many runners are registered and, in a yellow pill, how many aren't in a heat yet.
Each sub-event has two buttons that open under its row, one at a time: Roster (who is in each heat) and Configure (the heat setup). Roster appears once the sub-event has at least one heat.
Turning heats on for a sub-event
Click 'Configure' on the sub-event
Expands the editor inline.Flip 'Enable heats for this sub-event' on
Required before any heat data participates in registration. Heat data IS preserved when the toggle is off, so you can turn it off temporarily without losing setup.Decide: registrant chooses, or you assign?
With Registrants choose their heat ON, athletes pick their start heat while they register and it's required to finish. With it OFF, every registration lands unassigned and you place people into heats yourself from Roster (see below). Track meets that seed heats from goal times usually leave it off; wave starts usually turn it on.Add heats
Click Add heat. Each heat gets a name (auto: “Heat 1”, “Heat 2”), with optional start time, capacity, notes, and a private code.Drag to reorder
The order matters for displays, for the roster, and for the Bib assignments “Stratified by heat” rule.Save heats
Click Save heats in the bar that appears under the top of the page once you change something. Done.
What each heat field does
- Heat name
- Auto-named "Heat 1", "Heat 2", etc. Change to anything: "Elite", "Boys' 800 Heat 1", "6:00 pace".
- Start time (optional)
- Per-heat gun time. Leave blank to inherit the sub-event's start time, common for track meets where every heat starts at the same wall-clock minute on different tracks.
- Capacity (optional)
- Max athletes in this heat. Useful for a real wave-start where lane count or course density caps a heat. Blank = no limit. When registrants pick their own heat, a full one can't be chosen: it shows as Full and is greyed out, and the limit is re-checked at checkout so two people can't take the last spot at once. You can still go over it yourself from Roster.
- Private code (optional)
- Gates the heat behind a code. Athletes see the heat listed with a lock and a code box, so they know it exists and can ask you for the code, but they can't pick it until they type the right one. Meant for invite-only elite heats inside an otherwise-public sub-event. Codes ignore capitalization and spacing. The code stays private: only you and your co-directors can see it, and athletes never see it on your event page. Set it from the Heats page on the website.
- Notes for athletes (optional)
- Free text saved with the heat for context like "Goal pace: 6:00–7:00 / mile" or "Open lanes 4–6".
See who is in each heat
Click Roster on a sub-event. It lists every runner registered for that sub-event, grouped by heat: Not in a heat first, then each heat in your order, empty heats included. Each heat shows how many runners it has, or “12 of 16” when it has a capacity, and a warning when it's over. Cancelled registrations aren't listed.
- Each runner shows their age on race day, gender, bib, and one answer column. Pick any registration question under Show answer. If you ask for a seed or goal time, it's picked for you, so you can spot a runner who chose the wrong heat at a glance.
- Sort by last name, bib, answer (clock times fastest first), or newest registration.
- Click a runner's name to open their registration, the same popup as on the Registrations page: their details, refunds, and Manage registration for edits and notes. A change you make there shows in the roster right away.
- The refresh button reloads the roster, for example after runners sign up while you have it open.
Moving runners between heats
There are three ways to move someone:
- The heat menu on a runner's row: pick another heat, or Not in a heat.
- Several at once: check the runners (the checkbox in a heat's header checks the whole heat), then choose a heat under Move to and click Move.
- Drag and drop: drag the grip handle on a runner's row onto another heat. Dragging a checked runner brings every checked runner along.
Nothing changes until you click Save moves in the bar that slides down under the top of the page as soon as you move someone. It stays there while you scroll. Until you save, moved runners are highlighted with “Moved from” their old heat so you can check your work, and Discard puts everyone back. Closing the roster or leaving the page with unsaved moves asks you first. Unsaved heat setup changes in Configure get the same bar, with Save heats.
- If a save would put more runners in a heat than its capacity, you're asked to confirm. Capacity only stops runners from picking a full heat when they sign up; you can go over on purpose, for example to merge two small heats.
- If a runner cancelled, or someone else changed their heat after you opened the roster, that runner isn't moved and a note tells you why. Everyone else still moves, and the roster reloads.
- A move updates the heat everywhere it shows: the Start Line list on your event page, the Stopwatch (each runner is timed from their own heat's start), the Heat column on the Registrations page, and the runner's My registrations page. Results you already sent from the Stopwatch keep the old heat until you press Send finishes to Race Results again.
To change just one runner from the Registrations page, open their registration, click Manage registration, and use Change heat (the option only appears for sub-events that have heats configured).
Printing heat sheets
Click Print heat sheets in the roster for race-day paper: one page per heat with each runner's number, bib, name, age, the answer column you're showing, and a box to tick at the start line. Heats with no runners are skipped, and anyone not in a heat yet prints last so nobody is missing. Save your moves first; the sheets print what's saved.
How do heats compete?
When heats are on, each sub-event also answers How do heats compete?. It decides how places and awards work on the results page, the finisher cards, the award winners on Race Results, and the Stopwatch's live awards.
- Heats race together
- The default. The heats are waves of one race: one set of places for the whole sub-event. Each heat is still timed from its own start on the Stopwatch.
- Each heat is its own race
- Every heat has its own places and award winners, like a track meet or a mile day run by pace. The results page shows one tab per heat.
The two real-world models
Track meet
Pace-grouped heats with a shared sub-event start time. Common for high-school invitationals, all-comers track meets, and masters meets.
- Sub-event start time = the wall-clock minute of the event
- Per-heat start time stays blank
- You might let registrants self-select pace (“I'm targeting 6:00”) OR have them answer a PR / goal question and seed heats yourself from Roster, with that answer showing beside each runner
- Private codes on elite heats so only invited runners can self-select them
- Set How do heats compete? to Each heat is its own race
Staggered start waves
Per-heat start times. Common for big-field road races doing wave starts to manage chute density.
- Each heat has its own gun time (e.g. 7:00, 7:15, 7:30)
- Capacity per heat caps wave size
- Usually director assigns rather than registrant chooses. You batch athletes into waves from Roster the night before
- Keep How do heats compete? on Heats race together
Timing heats with the Stopwatch
Timing it yourself? The Stopwatch gives every heat its own Start and times each runner from their own heat. See Waves, heats and track meets.
Deleting a heat
Click the trash icon next to a heat. Deleting a heat does not move anyone, registrations assigned to it simply lose their heat and show as Not in a heat. If people are already placed in a heat, move them to another heat from Roster first, then delete.
What the athlete sees
When Registrants choose their heat is on, a Start heat section appears in the registration form for that distance, on the website and in the Run This app. Every heat is listed in the order you dragged them into, with its start time, how many spots are left, and your notes. Picking one is required to continue.
- A full heat is shown greyed out and can't be picked, so athletes can see the wave exists and that it filled.
- A code-gated heat is shown with a lock and a code box rather than hidden, so athletes know to come ask you for the code. It unlocks a moment after they type the right one, and the code is checked again at checkout.
- Registering a family? Each person picks their own heat, and the spots left count down as you fill the cart, so two family members can't both take the last spot.
After they sign up, runners see their heat on their My registrations page and in their registration confirmation email. If you move someone, My registrations shows the new heat right away; an email they already received doesn't change, so tell them yourself if it matters.
Athletes can't change their own heat after registering. Move them yourself from Roster, which keeps you in control of wave sizes on race morning.
Heats and bib assignments
On the Bib assignments page, the Stratified by heat rule groups by heat order (your drag-to-reorder above), then assigns bibs sequentially within. So Heat 1 athletes get the lowest bibs, Heat 2 next, etc. Useful when bib order signals start-line position.
When heats are off

