ISS AOS Finder

Find the next ISS Acquisition of Signal (AOS) for any location using TLE data

Observer search window ?

Use the map or browser location, to choose the observer point.

Advanced settings

Defaults are fine for normal use. Open this when you need exact coordinates, observer height, elevation mask, or a longer search window.

Grid square:·Location:

AOS results ? - Results shown in 24-hour format

UTC AOS
Observer AOS
AOS azimuth
Max elevation
Observer timezone
Pass duration

Map · Select observer point

Location changed. Press Calculate next AOS to refresh, or undo back to the last calculated location.
Observer ISS position Visibility footprint Pass path
Pass simulation?
Sim time:
ISS elevation
ISS azimuth
Distance
Local time
Range rate
Doppler shift
RX tune
TX tune
Approx only: positive range rate means the ISS is moving away. RX tune estimates received downlink; TX tune estimates ground transmit pre-correction for uplink.

Upcoming AOS for this location?

Calculate an AOS to list upcoming passes here.
Current TLE
Stored TLE data in this page is loaded from SpaceOpsLab backend services. CelesTrak is the preferred operational source and AMSAT is available as a stored fallback. The public links below are reference sources only.
CelesTrak live ISS TLE: https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=TLE
AMSAT nasa.all reference: https://www.amsat.org/amsat/ftp/keps/current/nasa.all
TLE epoch: unavailable
TLE actions ready.
AMSAT button may fail in browser due to site restrictions.
Data source and AOS calculation method
KEps online sources
Default live source in this page is CelesTrak for browser compatibility:
https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=TLE

Direct AMSAT nasa.all reference:
https://www.amsat.org/amsat/ftp/keps/current/nasa.all

If AMSAT is selected in the browser it may fail due to cross-origin restrictions, in which case the page falls back to CelesTrak or the embedded TLE.

You can also manually paste or edit the TLE values in this page.
High-level method
1. Convert the selected observer location into geodetic coordinates.
2. Convert the observer start date and start time into UTC.
3. Use the entered TLE with satellite.js (SGP4 propagation) to step the ISS forward in time.
4. At each step, compute the ISS look angles from the observer: azimuth, range, and elevation.
5. Detect the first time when elevation crosses above the chosen elevation mask angle. Observer height is included in the observer geodetic position, but the mask remains the actual acquisition threshold.
6. Refine that crossing with a binary search to get the result down to about the second.
Readable formulas
Observer → geodetic: latitude, longitude, height
TLE + time → ISS position: SGP4 propagation
ISS position → look angles: azimuth, elevation, range
AOS condition: elevation(t) crosses above elevation mask
Advanced math view
r_eci(t) = SGP4(TLE, t)
Use the TLE and the SGP4 orbit model to estimate where the ISS is at time t in an Earth-centered inertial frame.
r_ecf(t) = ECI_to_ECF(r_eci(t), GMST(t))
Rotate that ISS position into the Earth-fixed frame, so it lines up with the rotating Earth and ground locations.
ρ(t) = r_ecf(t) - r_obs,ecf
Find the line-of-sight vector from the observer on the ground to the ISS by subtracting the observer position from the satellite position.
[az(t), el(t), range(t)] = LookAngles(ρ(t), φ_obs, λ_obs, h_obs)
Convert that line-of-sight vector into the observer-friendly values: azimuth, elevation, and slant range.
AOS = first t such that el(t) ≥ el_mask and el(t-Δt) < el_mask
The AOS is the first moment when the ISS elevation rises above the selected elevation mask. Height is already included in the observer position used for the look-angle calculation.
The page uses coarse stepping first, then a binary search on the bracketed crossing interval:
if el(t₁) < el_mask and el(t₂) ≥ el_mask, then AOS ∈ [t₁, t₂]
Once the code finds a time window where the elevation goes from below the mask to above it, the true AOS must be somewhere inside that interval.
repeatedly bisect interval until desired time precision is reached
The interval is halved again and again until the AOS time is refined down to roughly second-level precision.
Location lookup troubleshooting
This shows which service produced the visible Location name beside the grid square. The page asks the SpaceOpsLab geocode API for a nearby place name. The grid square itself is calculated locally in your browser.
Last service used
Not used yet
Resolved place
Detail
Waiting for observer location
Notes: this page uses satellite.js for propagation and a Leaflet map canvas. Times are shown as UTC and observer time. Optional custom time rows can be added for other timezones.