How wrong is a sea-level sunrise?

Ask almost any sunrise API when the sun comes up and it will answer for an observer standing at sea level. That's a reasonable default, and for a lot of the people asking, it's the wrong answer.

The higher you stand, the further you see. The horizon drops away from you and the sun clears it sooner, for the same reason the lookout in a crow's nest sights land before anyone on deck.

That part is just geometry. What we wanted to know was whether the error is big enough to matter, so we measured it.

The measurement

We picked eight real places people go to watch the sun come up, and used the spring equinox of 2026 so the result wouldn't depend on a flattering time of year. Each one went through the same engine twice: once at sea level, and once at the elevation you would actually be standing at.

Location Elevation Sunrise at sea level Sunrise where you stand Difference
Beachy Head, England 162 m 06:03:39 06:01:04 2m 35s
Cape Point, South Africa 249 m 06:50:21 06:47:53 2m 28s
Big Sur, California 300 m 07:11:52 07:09:06 2m 46s
Cliffs of Moher, Ireland 214 m 06:42:10 06:39:03 3m 07s
Cabo Girão, Madeira 580 m 07:13:09 07:09:29 3m 40s
Preikestolen, Norway 604 m 06:39:22 06:33:15 6m 07s
Denver, Colorado 1609 m 07:04:32 06:57:50 6m 42s
Zermatt, Switzerland 1608 m 06:33:53 06:26:29 7m 24s

The error runs from about two and a half minutes to more than seven, and every one of these places has a car park and a view.

The same height doesn't buy the same time

Denver and Zermatt are within a metre of each other in elevation, at 1609 m and 1608 m, yet their errors differ by 42 seconds. Latitude changes the angle at which the sun comes up through the horizon, so the same height gains you a different amount of time depending on where you are and what day it is.

That's why you can't fix a sea-level answer with a correction factor afterwards. The elevation has to go into the computation.

Why minutes matter here

If you're deciding when to leave the house, three minutes is noise.

If you're taking photographs, it isn't. Golden hour lasts twenty to forty minutes, and its boundaries move by about as much as sunrise does: at the Cliffs of Moher, golden hour starts 3m 08s earlier than a sea-level answer predicts, and blue hour 3m 09s earlier. Those minutes come off the start of a short window, so you turn up when the tool told you to and golden hour has already begun.

Moonrise moves further still: 196 seconds earlier at Moher and 385 at Preikestolen. The moon's apparent motion across the sky is slower than the sun's, so the same change in the horizon costs more time.

The part that surprised us

The obvious objection is that the tool can look your elevation up. Give it a latitude and longitude and it can find the height.

We tested that too, using ETOPO5, a standard global elevation model and the one behind a lot of automatic elevation. Its cells are about 9 km across.

Location Actual ETOPO5 says Error
Cliffs of Moher 214 m 0 m −214 m
Beachy Head 162 m 0 m −162 m
Cape Point 249 m 0 m −249 m
Preikestolen 604 m 0 m −604 m
Cabo Girão 580 m 0 m −580 m
Denver 1609 m 1658 m +49 m
Zermatt 1608 m 2393 m +785 m
Big Sur 300 m 818 m +518 m

Five of the six coastal clifftops come back as sea level. A 9 km cell that straddles a cliff is mostly ocean, so its average is about zero. The lookup fails in the worst possible way: it confidently returns the exact answer you were trying to avoid.

It goes wrong in the other direction too. Zermatt sits in a valley ringed by peaks, so the cell average overshoots by 785 m. Big Sur overshoots by 518 m because the mountains inland pull the average up.

Coarse elevation models do worst where the terrain changes abruptly, on clifftops and valley floors, and those are exactly the places people go to watch the sun.

Denver, on a broad plain, comes back within 49 m. If your terrain is flat, automatic elevation is fine. If it's interesting enough to visit, it isn't.

What we take from this

Three things, and the second is the one we'd most like someone to argue with.

  1. Elevation has to go into the computation. How much it changes the answer depends on latitude and date, so a fixed correction applied afterwards can't get it right.
  2. Automatic elevation is no substitute for knowing. We offer it, and it's useful inland. On a clifftop it will hand you sea level and sound certain. If you know your elevation, pass it.
  3. A tool that can't express the question gives you a confident wrong answer. That's worse than a tool that admits it doesn't know, because nothing in the response tells you to check.

Reproducing this

Every number above came from one API call per row.

curl -H "Authorization: Bearer $THIRDTRAIL_KEY" \
  "https://thirdtrail.life/v1/ephemerides/?lat=52.9715&lon=-9.4309&elevation=214&start_date=2026-03-20&days=1&tz=Europe/Dublin"

Drop &elevation=214 for the sea-level figure. Dates in the past need a paid plan; on the free tier, drop start_date as well and you'll get today's numbers instead. The response reports what was actually applied, so you can tell an explicit value from a default:

"resolved": { "elevation_m": 214.0, "elevation_source": "user" }

elevation_source is user, auto or default. If you asked for automatic elevation at a clifftop and got auto with a value of 0, that's the failure described above, showing up in the response.

There's a free tier on every API, and it doesn't need a card. The Python client is pip install thirdtrail, the contract is published as OpenAPI 3.1, and there's an MCP server if you'd rather an agent made the call.


Method: sun and moon positions from JPL DE421, computed with Skyfield. Elevation is applied as an observer-height horizon correction. Times are local to each site. Figures are astronomical and exclude local terrain obstruction, refraction anomalies and weather. Informational use only, not for navigation or life-safety decisions.

← All posts