Ephemera ephemera.space

Every eight hours, SpaceX publishes where each Starlink satellite is going, with its uncertainty. It is the only public feed of its kind. Each set is replaced by the next. Ephemera keeps the history.

The archive record

As of 2026-09-03 09:37 UTC the archive holds 14 cycles. 14 are complete with Merkle roots and 14 are anchored in Bitcoin through OpenTimestamps. Raw data kept: 314 GB. Poller heartbeat coverage: not yet measured (heartbeat history shorter than 24 h). Cadence holds (a manifest served longer than 9 hours): 1. This project exists because SpaceX publishes the feed openly.

first seen (utc)cyclefiles recordedraw gb merkle rootopentimestampswayback machine
2026-09-03 04:131e726fe006d911,118 / 11,11822.5449b43de57fablock 965263manifest ok, 10/10 samples verified
2026-09-02 22:54b37c74c0390710,682 / 10,68221.73b31bf7689b6block 965241manifest ok, 10/10 samples verified
2026-09-02 20:153572d877591311,118 / 11,11822.5e84216948e7bblock 965229manifest ok, 10/10 samples verified
2026-09-02 12:08f5112bb77a2a11,092 / 11,09222.5b46aca785a05block 965172manifest ok, 10/10 samples verified
2026-09-02 04:120a85a65d5dbe11,093 / 11,09322.5381a895ce84eblock 965124manifest MISSING, 10/10 samples verified
2026-09-01 23:2451d5c047650a10,902 / 10,90222.2b0f2521600e2block 965103manifest ok, 10/10 samples verified
2026-09-01 20:097414ea02eac111,093 / 11,09322.558ba872f5507block 965085manifest MISSING, 10/10 samples verified
2026-09-01 12:267be3c2c6fc2c11,094 / 11,09422.54d03a6f8fe32block 965040manifest ok, 10/10 samples verified
2026-09-01 02:22d03dc522da1811,093 / 11,09322.55d69cd6dc0c9block 964976manifest ok, 4/10 samples verified, 6 lost
2026-08-31 20:22513b92c4683e10,481 / 10,48121.3476705cfc526block 964940manifest MISSING, 0/10 samples verified, 10 lost
2026-08-31 11:441d424255c9ae8,568 / 8,56817.46df13e066f37block 964903manifest ok, 10/10 samples verified
2026-08-31 04:095e4faf0f4e4e9,353 / 9,35319.091ca361b797ablock 964904lost: cycle superseded before witnessing completed: 1 manifest + 10 sample captures never made
2026-08-30 20:0292e6892c0f3e9,111 / 9,11118.58c653747b19ablock 964904lost: cycle superseded before witnessing completed: 1 manifest + 10 sample captures never made
2026-08-30 13:3272bcd7796b4917,861 / 17,86136.2677d3043ef28block 964904lost: cycle superseded before witnessing completed: 1 manifest + 10 sample captures never made

Method: built from each cycle's cycle.json and witness.json in the poller's spool; coverage is the fraction of the last 24 h's minutes with a watcher heartbeat under 10 minutes old (D18); a cadence hold is a manifest first-seen gap over 9 h. Poller: home (Cape Town, residential; single poller until poller A exists). Full data: ledger.json; the verification procedure a stranger can run is in the repository's VERIFY.md (independent Merkle re-implementation, OpenTimestamps against a Bitcoin block, Wayback copies re-hashed).

Daily roots

2026-09-02: 647c6951a21d (block 965241)   2026-09-01: 7ecb7906d01b (block 965103)   2026-08-31: 948ecce3337d (block 964963)   2026-08-30: 1d7acc715f62 (block 964927)

Catalogue visibility

How far the public catalogue's prediction sits from the operator's, for every satellite in a cycle. The public element set (Space-Track) is propagated with SGP4 to the operator file's own epochs, every 360 minutes across the file's span, and the distance is taken. Both are predictions. The operator's file includes planned trajectory changes the public set cannot know about, so a large distance is that gap, not an error of the satellite. Public GP data is too noisy to test sub-metre covariance; the self-consistency scoreboard, when it exists, measures prediction-versus-later-prediction.

Latest scored cycle 1e726fe006d9 (first seen 2026-09-03 04:13 UTC): 11,091 of 11,118 files scored against the snapshot fetched 2026-09-03 04:10 UTC (12811 element sets); 27 without a public set, 0 marked decayed, 0 propagation failures, 0 unreadable. Mean element age across the comparison: 57.9 h. Scored 2026-09-03 09:31 UTC. See it on the globe: every satellite drawn twice, the operator trajectory and the public catalogue's ghost.

element agecomparisonsmedian km90th pct kmwithin 10 kmwithin 30 km
0-6 h140.72.3100%100%
6-12 h1,0305.239.265%87%
12-24 h11,3675.242.472%87%
24-48 h41,45511.081.248%80%
48-72 h43,90725.0221.435%54%
over 72 h45,44739.6214.029%46%

Element age is the evaluation epoch minus the public element set's epoch; a negative age means the set was published after that point of the file. Age and time-into-file are correlated within one cycle, so these bins are not yet a clean age effect.

cycle first seencyclescoredpublic snapshotmedian km, age 0-6 h median km, allwithin 10 kmwithin 30 kmscored at (utc)
2026-09-03 04:131e726fe006d911,091 / 11,1182026-09-03 04:10, fetched before the cycle0.716.340%62%2026-09-03 09:31

Method: Public element set (Space-Track gp snapshot) propagated with SGP4 (skyfield 1.55, python-sgp4 2.27; TEME to GCRS by Skyfield, taken as J2000) and differenced against the operator-published trajectory (EME2000) at the file's own record epochs every 360 min. Distance in km; components in the operator's radial/in-track/cross-track frame; altitude is geocentric radius minus 6378.137 km; element age is evaluation epoch minus element-set epoch, signed. Both inputs are predictions; the operator's includes planned trajectory changes the public set cannot know about.

Contact

Kira Ryan. KiraRyan27@gmail.com, linkedin.com/in/kira-ryan.