Overview
This started as the first stage of economicspace, my asteroid-mining profitability pipeline,
which needs to know what every asteroid is, how big it is, and what it is made of. Nothing in the catalog
knows what a mine is, though, and a merged asteroid table with honest provenance is useful to anyone doing
population statistics or target selection, so I split it out as its own Python package. Each build is
published as a frozen release: a gzipped CSV and a Parquet file of the same rows, plus a manifest with
checksums. A result can name the exact release it used, which matters because JPL adds bodies every day and no
two live builds are the same length. My asteroid-belt paper analysis runs on one of these releases.
Pipeline
A build runs five stages, and every rejected row is logged with its reason.
| Stage | What happens |
|---|---|
| Fetch | JPL SBDB, IMCCE SsODNet, NEOWISE V2.0 and MP3C |
| Merge | Every row re-keyed onto JPL's designation for that body, duplicates combined, sources tagged |
| Derive | A diameter from absolute magnitude and an estimated albedo for bodies nobody has measured |
| Validate | Quality gates and physical limits, with every rejection counted |
| Enrich | Bulk density, mass fractions and mineral phases per spectral class |
Key highlights
The parts that took the most care.
- Provenance on every value. Diameter, albedo, H, mass and rotation period each carry the survey that supplied them, how many surveys report one, their spread, and whether they agree. Agreement is not treated as independent confirmation: for diameters, most catalogs are quoting the same NEOWISE fit.
- Derived sizes are labelled as derived. Only about one body in ten has a measured diameter. The rest are sized from absolute magnitude and the median albedo of similar bodies, by spectral class or orbital population, and every such row is flagged so it can be filtered out.
- Nothing physically impossible is published. A survey's mass is refused if it gives the body an impossible bulk density for its class. The release before that rule listed 1686 De Sitter at 495 g/cm³, over sixty times the density of iron.
- Cited composition. Each Bus-DeMeo class has a bulk density, four mass fractions and a mineral breakdown, with each value tied to meteorite and spacecraft sources where they exist. The fractions deliberately do not sum to one: the residual is what the literature does not resolve.
- A release gate that refuses bad builds. Publishing fails if any survey comes back short, the catalog shrinks against the previous release, or any row breaks a physical limit. Releases are never overwritten.
-
Tests built from real failures. The offline suite runs each bug that once cost a release,
such as a designation regex that read
2024 BX1as2024, and a float-typed merge key that silently matched zero NEOWISE rows.
Links
The package, its tests and every release are public. Figures on this page are from release
data-2026-09-29c (1,568,882 bodies, 149,718 with a measured diameter, data contract 1.8.1).