Blog

Our accuracy, verified against NASA JPL Horizons

2026-08-07·2 min read

Our accuracy, verified against NASA JPL Horizons

We just published the thing most astrology APIs avoid: a reproducible accuracy benchmark anyone can run.

Astrology APIs make accuracy claims. Most publish a methodology page and a tolerance number with no way to verify either. We decided to do it differently: a public dataset of birth charts, expected planet longitudes pulled directly from NASA JPL Horizons (DE441) — the authoritative reference for solar system body positions — and a Python script that measures any API against it.

The numbers

\\\`

120/120 points within tolerance (0 failures)

SUN median 0.03 arcsec | max 0.07 arcsec

MERCURY median 0.04 arcsec | max 0.10 arcsec

MARS median 0.05 arcsec | max 0.25 arcsec

VENUS median 0.06 arcsec | max 0.19 arcsec

NEPTUNE median 0.09 arcsec | max 0.33 arcsec

SATURN median 0.11 arcsec | max 0.53 arcsec

JUPITER median 0.13 arcsec | max 0.38 arcsec

URANUS median 0.15 arcsec | max 0.30 arcsec

PLUTO median 0.19 arcsec | max 0.84 arcsec

MOON median 0.57 arcsec | max 1.05 arcsec

\\\`

Overall median deviation: 0.06 arcseconds — about 0.000016 degrees. For scale, an arcsecond is roughly the width of a human hair seen from 30 meters away.

How it works

For each of 12 charts spanning 1961–2020 across 11 countries and 12 timezones:

1. Take the local birth time and a decimal timezone offset.

2. Convert to the UTC moment using standard datetime math.

3. Query NASA JPL Horizons for the geocentric ecliptic longitude of each body at that instant — these are the reference values.

4. POST the same instant to the target astrology API and compare.

The benchmark validates two layers at once: the timezone conversion (the most common silent failure in astrology APIs) and the ephemeris computation itself. And it is vendor-neutral — swap --base-url and point it at any competitor.

Why an open benchmark matters

Anyone can run it against us — or against our competitors. The dataset and script live in the repository, the reference values were generated from JPL on 2026-08-07, and the whole thing is standard Python with no dependencies.

That is the standard we want to be held to. If you build on an astrology API, ask them for their JPL reference data. If they cannot show you one, the benchmark is yours to run.