TRAILGOAT
For race directors

Your course,
done justice

We already built your official course page. Check it and it's yours. You get a 3D film for your marketing, fewer "where is aid 3?" emails and crews at the right trailhead. It's free, and we'd rather you check our data than charge you for it.

Claim your course or email kris@trailgoat.run

A live example: the Leadville 100, as the embed serves it. Find your race to see yours.

What you get · 1

A 3D film of your course

A flyover of the real route on real terrain and imagery, with your race name and aid stations pinned where they sit. It plays at the top of your course page, and it's yours to use on your site, in race emails and on social. Films are for US courses for now. Claim your course and we'll give you a date.

Claim your course
Western States 100 See it on the course page →
What you get · 2

A verified course page

Your race already has a page in our course library: the route on a map, the elevation profile with the climbs shaded, every aid station with its mileage, and your cutoffs when we have them. Runners plan their race against it.

  • Fewer "where is aid 3?" emails. The page answers the questions your inbox usually absorbs in race week.
  • The badge. A claimed course carries ✓ verified by the race on its page, in every runner's plan and on your embed. It tells runners your data from data that was scraped or guessed.
  • It stays current. Reroute in March? Send the change through your claim and the page and your embed show the new course. Runners who planned on the old one are told it changed.
What you get · 3

The map for your race site

One <iframe> tag puts your course on your own site: the map with every aid station and distance marker, the elevation profile, fullscreen 3D terrain and a flythrough of the whole course. It's built for phones, where most of your entrants will see it, and comes in light and dark themes to sit inside your site's look.

The only thing we ask in return is the Plan this race on TrailGoat ↗ link at the foot of the embed. Runners who want a pacing, fueling and crew plan for your course follow it to us. No fees, no accounts, and you can take the embed down any time.

Build yours below → Pick your race, pick a theme, copy the tag. Two minutes, no sign-up.

How claiming works

One action: claim your course

  1. Check your course page. Route, distance, climbing, aid stations, cutoffs. Read it the way a registered runner will.
  2. Claim your course. Tell us who you are at the race and anything we have wrong: the current GPX, the aid stations and their mileages, the cutoffs, this year's date. If it's all right, say so.
  3. It's yours. We check you're with the race, fix what you sent and mark the course verified by the race. US courses get a date for their film.

Rather we took your course down? Email kris@trailgoat.run and it's gone the same day.

Claim your course or email kris@trailgoat.run
Put it on your site

Build your embed

Pick your race and how it should look. The frame is the live embed, updating as you choose; set it up with the controls under it, then copy the code at the bottom. That is all your site needs.

Preview as
Theme
Auto follows each reader’s device.
Dark palette
Background
Units
Theme colour
Colours the plan button, links and the route.
An https image URL. It shows small beside the title.
Panels
600 px
The frame grows and shrinks with the embed. The short script goes right after the iframe, on the same page.
Where it goes

Pasting into UltraSignup or RunSignup? They strip iframes. Link your course page instead.

Claim your course Claim it and the embed wears the verified badge. Or email kris@trailgoat.run.
No iframes allowed?

On UltraSignup or RunSignup? Link the course page.

UltraSignup and RunSignup race descriptions strip iframes, so the embed won't show there. Link to your course page instead. It's the same map, profile and aid stations, one tap away, and it works in race emails and social posts too.

https://trailgoat.run/course/leadville-trail-100-run-2026

No iframes allowed? Paste the image card

<a href="https://trailgoat.run/course/leadville-trail-100-run-2026"><img src="https://trailgoat.run/course/leadville-trail-100-run-2026/card.png" alt="Leadville Trail 100 course map, elevation and aid stations" width="600"></a>

Print for packet pickup and the start line

QR poster Aid-station chart

For your runners

What your runners show up with

The embed's link leads to the Run Planner, so the field arrives at your start line having done the homework:

  • Crews at the right trailhead. The Live Crew Sheet gives every crew per-stop arrival times that re-forecast through the day, pacer hand-offs and tap-to-call contacts.
  • Pacing plans with your cutoffs in them. Every stop shows the buffer against the official cutoff, so fewer runners chase the sweep math at 2 a.m.
  • Fueling plans instead of bonks. Hydration and carb targets for each aid-station leg, matched to the forecast on your course.
  • Your course in their pocket. Runners can carry your course and their plan offline on race day, so a canyon with no bars is not a canyon with no plan.

How the math behind those plans works is public. See the methodology page.

Before you claim

Fair questions

What's the catch?
There isn't one. TrailGoat is free, no catch, for runners and for races. The embed carries a Plan this race on TrailGoat ↗ link, and some of your runners follow it. That's how we grow.
Can I remove our course?
Yes. Email kris@trailgoat.run and it's gone the same day. The embed is yours to take down too: delete the tag and it's off your site.
Do my runners pay?
No. The planner, the crew sheet, printouts and the watch file are free for every runner.
How much work is it for us?
One look at your course page, then claim it and tell us what's off. If nothing is, say so. Adding the embed to your site takes a couple of minutes, and it's optional.
Which courses get a film?
US courses, for now. Claim yours and we'll give you a date. The films above are ones we've made.
Next step

Check your course and claim it

Claim your course or email kris@trailgoat.run