Live tracker
Once a day a small job asks CelesTrak four questions and writes down the answers as numbers and yes/no. Nothing you do on this page contacts CelesTrak.
Daily counts from four CelesTrak endpoints and a weekly hash check of the 20 stable sources of the corpus that answer with data, computed by a scheduled job and served as static JSON. Derived measurements only: no element values are stored or shown.
One step per day. The scale runs only from the lowest number in the chart to the highest, 100,789 to 101,142; the climb from 100,000 is on the story page. A shaded day has no value. The first point, in amber, comes from the test kit’s own data collection on 21 Sep 2026. The numbered points are milestones: slide or point to one to read it, listed under the chart.
One entry per day from /data/tracker/history.json. The vertical scale spans the window’s own values, 100789 to 101142, and does not start at zero. A day without a value is shaded and never bridged. The seed entry (amber) is the corpus’s Phase 2 fetch of 2026-09-21. Numbered points are milestones worked out from the record; the slider or a pointer reads any day, listed under the chart.
21 Sep · 100,78923 Oct · 101,142
23 Oct 2026 highest numberhighest NORAD_CAT_ID 101,142
no value: that day’s request failedno value: the request failed
no value: the daily check did not runno value: no tracker entry
- 121 Sep 2026 The record begins at 100,789, from the test kit’s own data collection.First entry, the seed: 100789, from the corpus’s Phase 2 fetch.
- 222 Sep 2026 No value: the request to CelesTrak failed that day, with error 500.No value: the request answered HTTP 500.
- 325 Sep 2026 Past 100,800: the number reached 100,822.First value at or above 100800: 100822.
- 47 Oct 2026 The biggest step in the chart: up 72 in a day, to 100,954.Largest one-day rise in the window: +72, to 100954.
- 514 Oct 2026 Past 101,000: the number reached 101,031.First value at or above 101000: 101031.
- 623 Oct 2026 The latest: 101,142.Latest entry: 101142.
Last successful check: 2026-10-23 11:47 UTC. 8 requests, 0 errors.
Current values
Highest satellite number among recent launchesHighest catalog number, last-30-days CSV
101,142
2026-10-23 11:47 UTC
Recent satellites with six-digit numbersSix-digit objects in that group
225 of 225
2026-10-23 11:47 UTC
The same list in the old formatlast-30-days TLE request
404
“not found”: none of them fit the old formatNo GP data found · 2026-10-23 11:47 UTC
Unidentified objects: new format vs oldAnalyst group, CSV vs TLE record count
592 vs 217
375 have six-digit numbers and are missing from the old format375 six-digit, 217 below 100000 · 2026-10-23 11:47 UTC
Nine-digit numbers in Starlink launch dataNine-digit ids in the Starlink SupGP feed
6 of 13 days
27 ids, then 26, after two launches, in daily checks from 2026-09-21 to 2026-10-04. Checking ended on 2026-10-04.
Did the “first ever” records change?gp-first stable-source drift (weekly)
0 drift
20 match · 0 drift · 0 error · 0 not yet checked of 20 · 2026-10-23 11:47 UTC
Count relations at the last run: TLE records = CSV records below 100000 for last-30-days: yes; for analyst: yes.
History
The other daily answers, one point per day, the first in amber as above.
The other daily measurements, the seed entry in amber. Each chart has a data table for screen readers; with scripts off, the whole history is one table.
The last two charts are a finished record. For a few days after each Starlink launch the new satellites carry nine-digit placeholder numbers. The job looked for them every day from 2026-09-21 to 2026-10-04 and found them on 6 days of 13. It has stopped looking: the file is large, and the answer was one yes or no.
The last two charts are a closed record. The job downloaded the Starlink supplemental CSV every day from 2026-09-21 to 2026-10-04: 1.8 MB, more than nine tenths of its daily bytes, for one count and one yes or no. The ids were present on 6 of 13 days, 27 ids, then 26, each spell taken to be one launch. A weekly check was the alternative; the two spells seen up to 2026-10-04 lasted at least four days and three, so a check every seven days would have missed a launch about half the time. The corpus’s own capture of 2026-09-21 holds the 27 ids of the first.
Stable-source drift
The test kit’s frozen answers rest on CelesTrak’s “first ever record” pages staying the same. Each week the job re-reads them and compares fingerprints. “Match” means unchanged.
The corpus assumes gp-first.php is stable (ambiguity gp-first-stability). The job re-fetches each of the 20 stable-tier sources that answer with data once every 7 days, at most 4 per day so the daily budget stays at 8 requests, and compares the SHA-256 with the manifest of v0.7.0. The corpus has two more stable sources, the first-record TLE requests for two six-digit objects, which answer HTTP 404 with the 16-byte body No GP data found. They were re-checked until S-083 and matched every time; the job no longer asks, since CelesTrak states that a 404 does not change by repeating the request.
| source | case | last checked | result |
|---|---|---|---|
gp-first-25544-TLE | epoch-year-19xx | 2026-10-23 11:47 UTC | match |
gp-first-25544-2LE | epoch-year-19xx | 2026-10-21 11:59 UTC · error 2026-09-22 06:44 UTC | match |
gp-first-25544-CSV | epoch-year-19xx | 2026-10-21 11:59 UTC · error 2026-09-22 06:44 UTC | match |
gp-first-25544-JSON | epoch-year-19xx | 2026-10-23 11:47 UTC · error 2026-09-22 06:45 UTC | match |
gp-first-25544-JSON-PRETTY | epoch-year-19xx | 2026-10-23 11:47 UTC | match |
gp-first-25544-XML | epoch-year-19xx | 2026-10-17 10:53 UTC | match |
gp-first-25544-KVN | epoch-year-19xx | 2026-10-23 11:47 UTC | match |
gp-first-100000-CSV | six-digit-omm-saramago | 2026-10-20 11:48 UTC | match |
gp-first-100000-JSON | six-digit-omm-saramago | 2026-10-20 11:48 UTC | match |
gp-first-100000-XML | six-digit-omm-saramago | 2026-10-21 11:59 UTC · error 2026-09-22 06:44 UTC | match |
gp-first-100000-KVN | six-digit-omm-saramago | 2026-10-21 11:59 UTC | match |
gp-first-270449-CSV | analyst-objects | 2026-10-17 10:53 UTC | match |
gp-first-270449-JSON | analyst-objects | 2026-10-17 10:53 UTC | match |
gp-first-270449-XML | analyst-objects | 2026-10-19 13:31 UTC | match |
gp-first-270449-KVN | analyst-objects | 2026-10-17 10:53 UTC | match |
gp-first-81011-TLE | analyst-objects | 2026-10-20 11:48 UTC | match |
gp-first-81011-CSV | analyst-objects | 2026-10-19 13:31 UTC | match |
gp-first-81011-JSON | analyst-objects | 2026-10-20 11:48 UTC | match |
gp-first-69999-TLE | bstar-and-derivative-forms | 2026-10-19 13:31 UTC | match |
gp-first-69999-CSV | bstar-and-derivative-forms | 2026-10-19 13:31 UTC | match |
How the tracker works
- A scheduled job runs once a day on GitHub’s servers, not in your browser.
- It asks CelesTrak for four pages, each once, and never more than eight a day including the weekly checks. It identifies itself by name and by this site’s address.
- It keeps only counts, yes/no answers, times and fingerprints, then saves them as small files that this page reads.
- If CelesTrak gives an answer the job did not expect, the job stops asking for the day and records that, and this page shows the last good values with their dates.
- Endpoints, once per run:
/NORAD/elements/gp.php?GROUP=last-30-days&FORMAT=CSV;/NORAD/elements/gp.php?GROUP=last-30-days&FORMAT=TLE;/NORAD/elements/gp.php?GROUP=analyst&FORMAT=CSV;/NORAD/elements/gp.php?GROUP=analyst&FORMAT=TLE. Plus at most 4gp-first.phpdrift checks. Hard cap 8 requests per run, one run per day; a repeated URL raises before anything is sent. - User-Agent:
gpconf-site/0.1 (+https://gpconf.neogy.dev; scheduled tracker, at most 8 requests per day; https://github.com/hneogy/gp-omm-conformance). No redirects followed, no retries, 2 s between requests, a 404 is recorded and never repeated (CelesTrak’s policy: 50 errors in two hours leads to a firewall entry). The job expects one 404 a day, from the last-30-days TLE request, and no other: that request is how this page still sees what CelesTrak answers when a group holds no object below 100000. - Stored per source: HTTP status, byte count, SHA-256, timestamp; per measurement: counts and booleans. Raw bodies are not written anywhere in CI. The tests assert that no element value can appear in the outputs.
- Failure handling: the first answer the job did not expect ends the run. A measurement that got one is
ok: falsewith the error class, the ones after it are stored as not requested, no re-check is made, and the run is “partial” or “failed”. A re-check that got one is recorded as an error, and the re-checks after it stay due. The day after an HTTP 403 or 429 the job makes no request.latest.jsoncarries the last successful value per measurement with its timestamp; the page shows both. - Data files:
latest.json,history.json,drift.json(CORS-enabled, cached ten minutes). Job source:jobs/tracker.pyin the site repository.