Bulk export
The whole catalogue as five CSV files, frozen against a release and published with a checksum each. This is what the API means when it stops paging: a hundred thousand rows in, you are no longer asking questions of a catalogue, you are copying one, and copying it once is kinder to both ends than a hundred thousand requests.
Everything below the files is the part a CSV cannot carry: what every column holds, in what unit, and which of them can be empty. There is no registration, no key and no rate limit on the download.
THE FILES
] DR1 · 2026-08-21Everything at once, or a file at a time. The archive holds all five CSVs plus the licence, the release notes, a checksum list and a machine-readable manifest of every count in the release.
spacecatalog-dr1.tar.gz30 MB · EVERYTHING ↓One row per object. The file the other four hang off, and the one to open first.
630ba7ae703659f0c4fe67480d11dd1f2c7eafd89bb2443361d68d9e91321398Every catalogue identifier that resolves to an object — the table to join on if you arrive with a list of names rather than positions.
1ea90d8d329d8b5b03f84fa15846a9ca2ecada5825dfd984fd0bc156b17114e6Object-to-object links the catalogue is confident enough to publish. Every pair appears twice, once from each end, so a join on slug finds all of an object's relations without a second join the other way — and a count of these rows is twice the number of pairs.
b2e41ea6a22427a53abb7e7b09cb4bd875892ac5302e2e233e4dfd2a0e6382ffThe upstream catalogues this release was built from. Not gzipped: it is two kilobytes and it is the file that says what you may do with the rest.
8f9c4d6441d1ed5c3ba38c35164ae275726167b3609df8e7eb2a1732dcb57ea4Where two upstreams describe one object differently by more than the tolerance for that quantity, and which value this release kept. Recorded rather than resolved: catalogues disagreeing is the normal condition of astronomy, and which one is right is not a question a merge can answer.
af601cb342ef877bde356bcc2ffff35dda5d0197f8167188482b3f6fd9e4b71b
CHECK IT
] TWO COMMANDSThe bundle is built reproducibly — the clock gzip writes into its header and the timestamps tar writes per entry are both zeroed — so the same catalogue packed twice gives the same digest, and the digest is a claim you can check rather than one you have to take.
curl -LO https://github.com/space-catalog/data-releases/releases/download/dr1/spacecatalog-dr1.tar.gz curl -LO https://github.com/space-catalog/data-releases/releases/download/dr1/spacecatalog-dr1.tar.gz.sha256 shasum -a 256 -c spacecatalog-dr1.tar.gz.sha256
The digests printed beside the files above are the ones to compare against if you take a single file rather than the archive: they are served from this database, on a different host to the downloads, which is the point of having them in two places.
LOAD IT
] PANDAS · ASTROPY · DUCKDB · TOPCATGzipped UTF-8 CSV with a header row, quoted where a field needs it. Nothing here has to be decompressed first — every tool below reads the gzip directly.
import pandas as pd
# low_memory=False so the sparse text columns are typed from the whole
# file rather than chunk by chunk, which is what raises DtypeWarning.
objects = pd.read_csv("spacecatalog-dr1-objects.csv.gz", low_memory=False)
names = pd.read_csv("spacecatalog-dr1-designations.csv.gz")
# Every galaxy with a spectroscopic redshift distance, nearest first.
galaxies = objects[objects.category.eq("galaxy")].dropna(subset=["distance_ly"])
galaxies.nsmallest(20, "distance_ly")[["name", "distance_ly", "distance_method"]]
# The properties column is JSON, one object per row.
import json
props = objects.properties.map(json.loads)For a table that already knows the sky, read it into astropy and give the two position columns their units:
from astropy.table import Table
import astropy.units as u
t = Table.read("spacecatalog-dr1-objects.csv.gz", format="ascii.csv")
t["ra_deg"].unit = u.deg
t["dec_deg"].unit = u.degFor SQL over the whole file without loading it into memory, DuckDB reads the gzip and the JSON column in one statement:
SELECT name, distance_ly, properties->>'spectral_type' AS spectral_type
FROM read_csv_auto('spacecatalog-dr1-objects.csv.gz')
WHERE category = 'star' AND distance_ly < 30
ORDER BY distance_ly;TOPCAT and Aladin open the CSV directly, but they will not know which column is a coordinate until you say so. If you would rather they were told, ask the API for format=votable instead — the same columns arrive carrying their units and their UCDs, and land on the sky without being configured. The trade is the row limit: a VOTable is a slice, this is the catalogue.
THE COLUMNS
] 47 IN FIVE FILESIn the order each file writes them. A column marked sometimes empty is empty on at least one row of this release, and one not marked is filled on every row — which is a claim about the data rather than about this page, and a test holds it to the files.
objects.csv.gz
One row per object. The file the other four hang off, and the one to open first.
- slug
- Permanent identifier, unique in the release and never reused. spacecatalog.org/object/<slug> is the page for it, and every other file here joins on it.
- name
- The name the object is normally called by — a proper name where it has one, its principal catalogue designation otherwise. Every other identifier is in designations.csv.gz.
- category
- One of eleven: star, galaxy, exoplanet, asteroid, comet, moon, planet, cluster, nebula, black_hole, other. The coarse split, on which most of the other columns' meaning depends.
- object_typeSOMETIMES EMPTY
- The finer classification in the words of the upstream that made it — a spectral type and colour for a star, a morphology for a galaxy, an orbit class for a minor planet.
- ra_degdegreesSOMETIMES EMPTY
- Right ascension, ICRS at epoch J2000.0. Empty for solar-system bodies, whose position is a function of time rather than a property of the row; their orbital elements are in the properties column instead.
- dec_degdegreesSOMETIMES EMPTY
- Declination, ICRS at epoch J2000.0. Empty wherever ra_deg is.
- magmagnitudesSOMETIMES EMPTY
- Apparent magnitude in the band named by mag_band. Deep-sky objects and stars carry one; minor planets do not, because theirs changes with the geometry of the night — for those, see abs_mag.
- mag_bandSOMETIMES EMPTY
- The photometric band mag is measured in: V or B. Never empty where mag is filled — a magnitude without its band is not a measurement.
- abs_magmagnitudesSOMETIMES EMPTY
- Absolute magnitude, in the band named by abs_mag_band.
- abs_mag_bandSOMETIMES EMPTY
- V or B for stars and galaxies. H on a minor planet is not the near-infrared band: it is the IAU absolute-magnitude parameter H, the brightness the body would have at one au from both Sun and observer at zero phase angle. Read the band before comparing two rows.
- distance_lylight-yearsSOMETIMES EMPTY
- Distance from the Sun. Empty where no method in this catalogue could produce one — including the galaxies whose redshift is too small for a Hubble-flow distance to mean anything, which carry none here rather than one that is right by accident.
- distance_methodSOMETIMES EMPTY
- Which rung of the distance ladder produced distance_ly, named in full, with the paper's ADS bibcode verbatim where the value came from one. Never a bare number: a distance whose provenance is unknown is not usable in a fit.
- orbitsSOMETIMES EMPTY
- The slug of the body this one orbits, where the catalogue models the pair — a moon's planet, a planet's star. Empty for everything that orbits the galaxy at large.
- semi_major_axis_kmkilometresSOMETIMES EMPTY
- Semi-major axis of the orbit about the body named in orbits.
- periapsis_kmkilometresSOMETIMES EMPTY
- Closest approach of that same orbit.
- mass_kgkilogramsSOMETIMES EMPTY
- Mass, in kilograms rather than in solar or Jupiter masses, so that two rows of different categories can be compared without a conversion factor going missing. The conventional units are also in properties where the upstream published them.
- radius_kmkilometresSOMETIMES EMPTY
- Radius, of the kind named by radius_kind.
- radius_kindSOMETIMES EMPTY
- Which radius radius_km is: effective for a photometric fit, mean for a body measured in three dimensions. Empty where the upstream did not say — true of every exoplanet radius here, which are published as a single number without a convention attached.
- constellationSOMETIMES EMPTY
- The IAU constellation the position falls in, spelled out in full ('Ursa Major'). Empty for the bodies with no fixed position.
- discoveredSOMETIMES EMPTY
- When it was found, as published — usually a year, sometimes 'Antiquity'. Free text, because that is what the upstreams carry and parsing it into a date would invent precision.
- descriptionSOMETIMES EMPTY
- A written description, present only on the small set of objects this catalogue writes about itself. Everything else is left to the upstream's own words in object_type.
- is_featured
- true or false: whether the site gives this object the long editorial treatment. An editorial flag, not a fact about the sky — safe to ignore.
- properties
- A JSON object with everything that does not fit a column, keyed by category. Always present, sometimes empty. Its keys are documented below.
- data_qualitySOMETIMES EMPTY
- Non-empty when this catalogue believes a figure on the row cannot be right, saying which and why. Quote it if you quote the number it is about.
- source
- The upstream this row was built from. Joins to the id column of sources.csv, which gives its licence and the date it was retrieved — the terms of that upstream govern this row.
- search_text
- The names and types the site's own search matches against, concatenated. Included so a downstream index can reproduce it; it is derived from the other columns and holds nothing new.
designations.csv.gz
Every catalogue identifier that resolves to an object — the table to join on if you arrive with a list of names rather than positions. Joins on slug.
- slug
- The object in objects.csv.gz this identifier names.
- catalog
- Which catalogue the designation belongs to: HIP, HD, NGC, IC, PGC, 2MASX, Gliese, Bayer/Flamsteed and some eighty others, plus 'Common name' for the names people actually use.
- designation
- The identifier itself, spelled the way that catalogue spells it. One object usually carries several rows here.
relations.csv.gz
Object-to-object links the catalogue is confident enough to publish. Every pair appears twice, once from each end, so a join on slug finds all of an object's relations without a second join the other way — and a count of these rows is twice the number of pairs. Joins on slug.
- slug
- The object this row is written from the point of view of. Its mirror row, with the two slugs swapped, is in the file as well.
- related_slug
- The object at the other end of the relation.
- kind
- What the link is. This release publishes double-star pairs; what orbits what is in the orbits column of objects.csv.gz instead, because that one is a property of a single row.
- detail
- The identifier the relation is recorded under upstream — for a double star, its WDS designation.
sources.csv
The upstream catalogues this release was built from. Not gzipped: it is two kilobytes and it is the file that says what you may do with the rest. Joins on id.
- id
- What the source column of objects.csv.gz contains.
- name
- The catalogue's name as its authors publish it.
- url
- Where that catalogue is published — the page to read before relying on a row it produced.
- license
- The terms that catalogue publishes under, and therefore the terms of every row naming it. The release mixes several, and some are share-alike.
- retrieved_at
- When this catalogue was last downloaded for this release — the date of the retrieval, not the date the release was assembled, so the dates here legitimately differ from each other.
source_disagreements.csv
Where two upstreams describe one object differently by more than the tolerance for that quantity, and which value this release kept. Recorded rather than resolved: catalogues disagreeing is the normal condition of astronomy, and which one is right is not a question a merge can answer.
- slugs
- The two rows that were found to be the same object, separated by a slash. The first is the one that survived into objects.csv.gz.
- match
- How the two were recognised as one object: by a shared catalogue identifier, or by their names.
- matched_on
- The identifier or name that matched them, as it was written.
- field
- Which quantity the two upstreams disagree about — a position, a magnitude, a distance, a radius or an orbital element.
- kept_source
- The upstream whose value was kept, and which therefore appears in objects.csv.gz.
- kept_value
- The value that was kept, in the unit that quantity uses in objects.csv.gz.
- other_source
- The upstream whose value was not kept.
- other_value
- What that upstream said instead — published here rather than discarded, so the disagreement stays visible.
- relative_difference
- The size of the disagreement as a fraction of the kept value. Sort by it to find the ones worth a second look; most of these are rounding, a few are not.
THE PROPERTIES COLUMN
] 94 KEYSA column per quantity would be a table of a hundred columns of which any one row fills a dozen — a minor planet has no spectral type and a star has no perihelion. So everything that does not belong to every object is one JSON object per row, and which keys are present is decided by what the object is and by what its upstream published.
The unit is in the name — _km, _deg, _days, _solar — and stated below as well. A key missing from an object was not published for it; it is not a zero.
Motion
How the object is moving, where a survey measured it.
- proper_motion_ra_mas_yrmilliarcseconds/year
- Proper motion in right ascension, already multiplied by cos(dec) — an angular rate on the sky, not a coordinate rate.
- proper_motion_dec_mas_yrmilliarcseconds/year
- Proper motion in declination.
- radial_velocity_km_skm/s
- Line-of-sight velocity, positive away from us.
Stellar parameters
What is known about a star itself. Where these came from a model rather than a measurement, stellar_parameters_method says so, and says what was done to earn the right to publish them.
- spectral_type
- MK spectral type as classified.
- spectral_type_source
- Which catalogue classified it, with the paper's bibcode and the quality grade that catalogue attached.
- stellar_parameters_method
- How the modelled parameters below were derived, and the cut they had to pass to appear at all — plus a warning where the model is being used in a regime it is known to handle poorly.
- color_index_bvmagnitudes
- B−V colour index.
- surface_temperature_kkelvin
- Effective temperature.
- surface_gravity_log_glog10(cm/s²)
- Surface gravity, as the logarithm the literature quotes.
- radius_solarsolar radii
- Radius.
- mass_solarsolar masses
- Mass. Also carried by black holes.
- luminosity_solarsolar luminosities
- Luminosity as published by the source catalogue.
- bolometric_luminosity_solarsolar luminosities
- Luminosity integrated over all wavelengths, where the model produced one.
- age_yearsyears
- Estimated age.
- rotation_period_daysdays
- Rotation period.
Photometry
Magnitudes in bands other than the one in the mag column, kept under their band names rather than folded into one number.
- v_magmagnitudes
- Johnson V.
- b_magmagnitudes
- Johnson B.
- j_magmagnitudes
- 2MASS J, 1.25 μm.
- h_magmagnitudes
- 2MASS H, 1.65 μm.
- k_magmagnitudes
- 2MASS Ks, 2.16 μm.
Variability
Stars whose brightness changes, from the General Catalogue of Variable Stars. Period and epoch together are an ephemeris.
- variable_designation
- The star's GCVS designation.
- variability_type
- The GCVS type code.
- variability_class
- That code written out in words.
- variable_mag_maxmagnitudes
- Brightest magnitude, as sampled by Hipparcos and converted to the visual scale. Approximate, and for a star that spends most of its cycle out of eclipse the satellite may never have caught the bottom of the dip.
- variable_mag_minmagnitudes
- Faintest magnitude, from the same sampling.
- variable_period_daysdays
- Period of the variation.
- variable_epoch_hjdheliocentric Julian date
- The zero point the period counts from: the epoch of minimum light for eclipsing and ellipsoidal variables and for the RV Tauri and RS Canum Venaticorum types, and of maximum light for every other class.
Double and multiple stars
From the Washington Double Star catalogue.
- wds_id
- The pair's WDS identifier.
- companions
- A JSON array, one entry per recorded companion: its components, separation in arcseconds, position angle in degrees, magnitude, the year of the measurement, and the discoverer code.
Galaxies and deep-sky objects
Extragalactic quantities, and the angular geometry an imager needs. Two redshifts are carried where both are known, because which frame a redshift is in decides what distance comes out of it.
- redshift
- Redshift as the upstream published it, heliocentric.
- redshift_cmb
- The same redshift corrected to the CMB rest frame. This is the one every distance in the release is computed from.
- hubble_type
- Morphological type on the Hubble sequence.
- morphology_source
- Which catalogue classified the morphology, with its bibcode and quality grade.
- stellar_mass_solarsolar masses
- Total stellar mass of the galaxy.
- major_axis_arcminarcminutes
- Apparent major axis.
- minor_axis_arcminarcminutes
- Apparent minor axis.
- position_angle_degdegrees
- Position angle of the major axis, east of north.
- surface_brightnessmagnitudes/arcsec²
- Mean surface brightness — what decides whether it is visible in a given sky, more than the integrated magnitude does.
- ngc_type_code
- OpenNGC's own type code for the object.
- distance_reference
- The identifier this object is listed under in the distance-scale catalogue that distance_method names — what to look it up as when checking the number.
Orbits of solar-system bodies
Osculating elements as published, valid at element_epoch_jd. Positions for these bodies are computed from these rather than stored, which is why ra_deg and dec_deg are empty on their rows.
- orbital_period_daysdays
- Orbital period.
- eccentricity
- Orbital eccentricity.
- inclination_degdegrees
- Inclination to the reference plane.
- longitude_ascending_node_degdegrees
- Longitude of the ascending node.
- argument_of_perihelion_degdegrees
- Argument of perihelion.
- mean_anomaly_degdegrees
- Mean anomaly at the element epoch.
- element_epoch_jdJulian date
- The epoch these elements are valid at. Propagate from here, not from today.
- perihelion_epoch_jdJulian date
- Time of perihelion passage.
- longitude_perihelion_degdegrees
- Longitude of perihelion, for the planets, whose elements are carried in that form.
- mean_longitude_degdegrees
- Mean longitude at the element epoch.
- element_rates
- For the planets, the linear rate of change of each element per Julian century — what makes the elements usable over centuries rather than months.
- earth_moid_auau
- Minimum orbit intersection distance with Earth's orbit.
- orbit_class
- The dynamical class JPL assigns the orbit: MBA, TNO, Apollo and so on.
- rotation_period_hourshours
- Rotation period of the body.
- albedo
- Geometric albedo, as a fraction.
- spectral_type_smassii
- Taxonomic class in the SMASS II scheme.
- first_observed
- Date of the earliest observation in the orbit solution.
- discovery_date
- Date of discovery.
- discovery_site
- Where it was discovered.
Exoplanets and their hosts
From the NASA Exoplanet Archive. The host_ keys describe the star, repeated on the planet's row so a single row is self-contained; the star has a row of its own too.
- host_star
- The name of the star this planet orbits.
- discovery_method
- How it was found: transit, radial velocity, microlensing, imaging.
- discovery_facility
- Which instrument or survey found it.
- host_mass_solarsolar masses
- Mass of the host star.
- host_radius_solarsolar radii
- Radius of the host star.
- host_temperature_kkelvin
- Effective temperature of the host star.
- host_v_magmagnitudes
- V magnitude of the host star.
- host_spectral_type
- Spectral type of the host star.
- equilibrium_temperature_kkelvin
- Equilibrium temperature of the planet, on the archive's own albedo assumption.
- transit_midpoint_bjdbarycentric Julian date
- Mid-transit epoch. Published in TDB; the site treats it as UTC, which costs under nine minutes.
- periastron_epoch_bjdbarycentric Julian date
- Time of periastron passage.
- argument_of_periastron_degdegrees
- Argument of periastron.
- eccentricity_upper_limit
- Where only a limit was published rather than a value, this is the limit — not an eccentricity.
- eccentricity_lower_limit
- The same, from below.
- stars_in_system
- How many stars the system holds.
- planets_in_system
- How many planets are known in it.
Planets, moons and black holes
The small set of bodies the catalogue models in three dimensions.
- parent_planet
- The planet a moon belongs to, by name.
- satellite_code
- The NAIF identifier the JPL ephemerides use for the body.
- ephemeris
- Which JPL ephemeris the position is computed from.
- name_authority
- Who names the body, where two authorities spell it differently.
- mean_density_g_cm3g/cm³
- Mean density.
- mean_temperature_c°C
- Mean surface temperature.
- moons
- Number of known moons.
- axial_tilt_degdegrees
- Obliquity of the spin axis to the orbital plane.
- pole_ra_degdegrees
- Right ascension of the IAU north pole of rotation.
- pole_dec_degdegrees
- Declination of the same pole.
- rings
- Ring geometry: a tint, and a band list with inner and outer radii in kilometres and an optical depth.
- accretion
- For a black hole, the accretion regime it is observed in.
- disc_inclination_degdegrees
- Inclination of its accretion disc to the line of sight.
Cross-identifications and provenance
Where else the object can be looked up, and who found it.
- wikidata_id
- Wikidata Q-number.
- wikipedia_article
- English Wikipedia article title.
- also_known_as
- Other names, as an array — the ones too informal for designations.csv.gz.
- discovered_by
- The discoverer's name, as published.
Published uncertainties
One key, holding all of them. Doubt is carried in the numbers rather than in prose, and a quantity missing from the object simply has no published uncertainty — which is not the same as having none.
- uncertainties
- A JSON object keyed by the quantity it is about, each value a [minus, plus] pair in that quantity's own unit. Asymmetric bars are kept asymmetric: averaging them into one number is a decision this catalogue does not make for you. The quantities that appear are listed below.
The quantities that carry one in this release: distance_ly, mass_kg, radius_km, semi_major_axis_km, periapsis_km, orbital_period_days, eccentricity, inclination_deg, longitude_ascending_node_deg, argument_of_perihelion_deg, argument_of_periastron_deg, stellar_mass_solar, host_mass_solar, host_radius_solar, host_temperature_k, mean_density_g_cm3.
Rendering
Not measurements. Present so the site's own pictures can be reproduced.
- display_colors
- The colours the site draws this object in.
WHAT IS NOT IN IT
] AND WHERE IT IS- The two survey tiers under the sky map
Tens of millions of Gaia sources and GLADE+ galaxies are drawn on the map and answered by cone search, but they are not merged, named or cross-identified — they are those surveys, and their own archives publish them in full, in the form their authors intended. What this bundle holds is the tier this catalogue actually built: the objects with names, distances and provenance.
- Images
The photographs on object pages belong to the observatories and photographers credited beside them, under their own terms. They are not this catalogue’s to redistribute.
- Search vectors
The embeddings behind the search box are a property of one version of one model rather than of the sky, and they are reproducible from the text in these files.
For a slice rather than the whole thing — one constellation, one category, everything inside a cone — the API answers in JSON, CSV and VOTable, and three cone-search services stand beside it.
TERMS
] MIXED LICENCESThe data is not under one licence. Every row names its upstream in the source column, that upstream’s terms govern the row, and some of them are share-alike — which reaches anything you derive from the rows they cover. The full list, catalogue by catalogue, is on the releases page, and it travels inside the bundle as well.
Cite the release rather than the site: the site is corrected continuously and a release is not. How to cite it, in plain text and BibTeX. Citing the release does not discharge the upstream attribution — any row you quote names the catalogue behind it.