Table · satellite-catalog

Satellite catalog

Every artificial object GCAT catalogs, one record per object since Sputnik in 1957: payloads, rocket stages, components and debris, including those that reentered, left for deep space or failed to reach orbit. Each record has the GCAT id, the US catalog number (six digits and up since the 2026 rollover), the international designator, owner, state, launch and decay dates, mass, status and the latest orbit with its class.

Updates
Daily
Coverage
—
Current version
—
Last published
—
Validation
—
License
CC BY 4.0
Commercial use
Allowed

Preview

Loading the preview…

Use the API

The examples follow the rows picked above. See the docs for versions, caching and errors.

curl

# All rows (.json or .csv)
curl -s "https://api.satellitedata.dev/v1/satellite-catalog/table/all.json"

# The whole table in one file
curl -sO "https://api.satellitedata.dev/v1/satellite-catalog/download/satellite-catalog.csv"

Python (polars)

import polars as pl

# All rows
df = pl.read_csv("https://api.satellitedata.dev/v1/satellite-catalog/table/all.csv")

# The whole table
everything = pl.read_parquet("https://api.satellitedata.dev/v1/satellite-catalog/download/satellite-catalog.parquet")

JavaScript

const res = await fetch("https://api.satellitedata.dev/v1/satellite-catalog/table/all.json");
if (!res.ok) throw new Error((await res.json()).detail); // errors are problem+json
const { meta, rows } = await res.json();
console.log(meta.rows, rows[0]);

Downloads

The whole dataset in one file. Parquet keeps the column types and is much smaller.

Schema

Rows are identified by jcat. The rows are also split into one file per value of status_group. Tables up to 50,000 rows also have a single table/all file.

Column Type Unit Can be empty Description
jcat key text — no GCAT's object id: catalog letter (S, A, T, F) and sequence number, e.g. S25544
norad_cat_id integer — yes US Space Force (NORAD) catalog number. Not unique: objects that stayed attached share their parent's number, and the S-catalog row (jcat S plus the number) is the one the US catalog lists. Null when GCAT does not tie the object to a number (see satcat_note), including S entries it cannot match to a specific satellite of the launch
satcat_note text — yes GCAT's reason for a missing catalog number: NNA (not assigned or not identified), NNA A/C/E/I/P/R/S/T/X (attached, component, spacesuit, internal, partial orbit, ...), NSO (suborbital)
piece text — yes International (COSPAR) designator as GCAT records it, e.g. 1998-067A. Launches before 1963 keep their original Harvard designations (1957 ALP 2), which Space-Track shows renumbered (1957-001B)
launch_tag text — yes Launch the object belongs to; joins launches.launch_tag
catalog text — no GCAT catalog holding the object: satcat, satcat100k, satcat270k, auxcat, tmpcat or ftocat
name text — no GCAT's recommended current name (after any renaming)
original_name text — no Name in the object's first phase
object_type text — no payload, rocket-stage, component, debris, suborbital-payload or spurious (GCAT SatType byte 1)
gcat_type text — no GCAT's 12-byte SatType string (byte 1 coarse type, byte 2 modifier, byte 3 attachment, byte 4 subtype, ...)
identity_uncertain true / false — no SatType byte 9 is '?': GCAT knows the objects of the launch but not which catalog number is which
status_group partition text — no in-orbit, lost (in orbit but untracked), reentered (decayed, deorbited or landed), suborbital, deep-space, failed-to-orbit, broken-up (exploded or destroyed in a collision) or spurious (no real object)
status_code text — no GCAT phase status code of the latest phase: O in orbit, AO attached in orbit, OX lost, R reentered, D deorbited, L landed, AR reentered attached, DSO deep space, E exploded, ERR not a real object, ... A trailing ? marks it unconfirmed
status text — yes GCAT's plain-language current status (currentcat ExpandedStatus), e.g. 'Attached to S25544 Zarya'. Null for objects currentcat does not cover (ftocat and a few others)
active true / false — yes GCAT counts the object as an active satellite (currentcat Ac = A). Null where currentcat does not cover it
owner text — yes GCAT org code of the owner/operator in the latest phase (e.g. SPXS, JSC). A trailing ? marks an uncertain attribution; joint owners are slash-separated
owner_name text — yes Owner's name from GCAT's organizations table
state text — yes GCAT code of the country or intergovernmental body responsible (US, CN, SU, F for France, I-ESA, ...); not ISO codes
state_name text — yes —
launch_date date (YYYY-MM-DD) — yes UTC launch date; null when GCAT gives it only roughly, or gives a day after its own file date (a typo); see launch_date_text
launch_date_text text — yes Launch date exactly as GCAT writes it, in its Vague Date format ('1957 Oct 4', '1971?')
decay_date date (YYYY-MM-DD) — yes UTC date the object reentered, landed, crashed or impacted another body; null while in orbit or flying, and when GCAT gives the date only roughly
decay_date_text text — yes That date exactly as GCAT writes it ('1958 Jan 4?', '1960 Apr 26 1730?')
mass_kg number kg yes Mass at orbital insertion, not counting attached objects. Null when GCAT gives none (0 or '-'), as for most debris
mass_estimated true / false — yes GCAT flags the mass as an estimate (good to about 20%)
orbit_source text — yes latest: currentcat's most recent orbit (objects still in space); canonical: the representative early-operations orbit GCAT lists for the latest phase
orbit_epoch date (YYYY-MM-DD) — yes Epoch of that orbit when GCAT pins it to a day
orbit_epoch_text text — yes —
period_min number min yes Orbital period (latest orbits only)
perigee_km number km yes Perigee height above the central body's equatorial radius. Negative for trajectories that intersect the Earth or are hyperbolic
apogee_km number km yes Apogee height. Negative for hyperbolic (escape) trajectories; null where GCAT writes Inf
inclination_deg number deg yes Inclination to the equator of date (Earth orbits)
orbit_estimated true / false — yes GCAT flags a perigee/apogee/inclination value as a guess
orbit_category text — yes GCAT OpOrbit category: LLEO/I, LEO/S, MEO, HEO/M, GTO, GEO/S, GEO/ID, VHEO, CLO, EEO, ...
orbit_class text — yes LEO (below 2000 km), MEO, GEO (geosynchronous, incl. inclined and drifting), HEO (highly elliptical incl. Molniya and GTO), VHEO, cislunar, escape or suborbital, mapped from orbit_category

Source and license

Source
General Catalog of Artificial Space Objects (GCAT), object catalogs and currentcat
Publisher
Jonathan C. McDowell
License
Creative Commons Attribution 4.0 (CC-BY-4.0)
Commercial use
Allowed

Credit the source with this exact text:

data from GCAT (J. McDowell, planet4589.org/space/gcat)

Checked every 1 day. If the source hasn't changed in 14 days, the status page flags it as stale.

Endpoints

Every URL for this dataset. To pin the current version, put it after the id: /v1/satellite-catalog@<version>. The API reference describes each response.

What URL
Metadata: version, coverage, downloads, validation /v1/satellite-catalog
Versions and monthly snapshots /v1/satellite-catalog/versions
Partitions /v1/satellite-catalog/locations
Rows for one status_group (JSON) /v1/satellite-catalog/table/{status_group}.json
Rows for one status_group (CSV) /v1/satellite-catalog/table/{status_group}.csv
All rows in one file (tables up to 50,000 rows) /v1/satellite-catalog/table/all.json
Whole dataset (CSV) /v1/satellite-catalog/download/satellite-catalog.csv
Whole dataset (Parquet) /v1/satellite-catalog/download/satellite-catalog.parquet