How ISS Tracking Works: TLEs, SGP4, and Predicting Pass Times
Every ISS tracker you have ever used — this one included — answers two questions: where is the station right now, and when will it next fly over me? Both answers come from the same two ingredients: a tiny block of orbital data called a TLE, and a mathematical model called SGP4 that projects that data forward and backward in time.
The station does not report its own position minute by minute — nobody broadcasts "I am at 42.1°N, 8.4°E." Instead, tracking networks measure the orbit, publish a TLE describing it, and the tracker applies SGP4 to compute coordinates for any moment. That is why the numbers on a live tracker update smoothly every second even though the raw orbital data only changes every few hours.
Two building blocks: a TLE and a propagation model
A TLE (two-line element set) is a compact, machine-readable snapshot of an orbit at one exact moment in time, called the epoch. It encodes the shape, size, tilt, and timing of the orbit in two lines of fixed-width text — nothing more. A TLE on its own describes the orbit of one instant.
To get from that snapshot to "where is it now?", trackers use SGP4 (Simplified General Perturbations Model 4), the standard algorithm developed for the NORAD satellite catalog. SGP4 takes the TLE at its epoch and propagates the orbit forward and backward in time, correcting for the forces that matter at low Earth orbit — chiefly atmospheric drag and Earth’s slightly uneven gravity.
The what is a TLE? and what is SGP4? pages cover each ingredient in detail; this page is about how they fit together into a tracker.
From TLE to position: propagation
A live tracker follows a simple loop. Every few minutes it fetches a fresh TLE for the satellite (25544 is the ISS’s NORAD catalog number). Between fetches, SGP4 is re-evaluated over and over — here, once per second — turning the latest TLE into a three-dimensional position and velocity vector.
Propagation alone is only half the story. SGP4 works in an Earth-centred reference frame, so the tracker has to rotate that frame with the spinning planet and project the result onto a map. That yields the station’s "latitude" and "longitude" — actually the coordinates of the sub-satellite point, the place directly beneath it.
Adding the altitude and speed readouts
Altitude and speed are read straight out of the propagated state. "Altitude" here is the distance from the sub-satellite point up to the station — not a design constant, but something that changes as drag lowers the orbit and reboosts raise it again (see how high is the ISS?).
"Speed" is the magnitude of the station’s velocity vector at that instant, which also varies slightly as the shape of the orbit breathes (see how fast is the ISS?).
You can watch all of these update live — and see the underlying TLE’s epoch and data age — on the live position page.
Predicting when it passes over you
A pass prediction solves a different problem: given your location, when is the station above your horizon, and how good is the view? The tracker propagates the orbit forward and, for every moment, computes the position of the station relative to your coordinates as two angles: azimuth (the compass direction to face) and elevation (how high above the horizon it is).
The station is "visible from you" whenever the elevation is above zero. The reading a pass prediction guide explains the azimuth, elevation, and duration columns of the resulting table.
A pass is any time the station is above your local horizon. A visible pass is something narrower: the station must be sunlit while your sky is dark. That extra condition is explained on the why is the ISS visible page.
Why the orbital data keeps needing to be refreshed
TLEs go stale. Atmospheric drag measurably changes a low orbit within days, the ISS performs periodic reboost burns that shift its altitude, and operators occasionally manoeuvre the station to dodge space debris. An element set is most accurate at its epoch and degrades from there.
For that reason a good tracker refreshes its TLEs constantly. This site fetches fresh elements for each satellite from CelesTrak every few minutes, and the Live Telemetry panel shows the current TLE’s epoch and its age so you can see the refresh happening rather than take it on faith.
Known limits of prediction
- SGP4 and TLEs are very accurate near the epoch — errors are typically a few kilometres for a well-tracked object like the ISS — but they grow with time, fastest for low orbits where drag is strongest.
- A predicted pass time can shift by minutes if the ISS reboosts between the prediction and the pass.
- An unscheduled manoeuvre (for example debris avoidance) can invalidate even a same-day prediction — which is why this site recomputes each pass from the freshest elements it can get.
In practical terms: treat the numbers here as accurate for "when to look up tonight", not as a permanent schedule. Because the trackers recompute constantly, they are about as trustworthy as browser-side SGP4 gets.
If you want the depth, the next two pages go down a level: what exactly is inside a TLE, and how the SGP4 model works.
See the theory running live — fresh orbital data, position recalculated every second.
Open the live trackerSources and further reading
- CelesTrak — NORAD two-line element sets
- CelesTrak — TLE format documentation
- satellite.js — JavaScript library implementing SGP4
- NASA — International Space Station Facts and Figures