How accurate is it? Here are the receipts.

Every astrology app claims accuracy. This one publishes the measurement: Celestial Sextant's own in-browser ephemeris, compared against the Swiss Ephemeris 2.10.03 (Moshier, no .se1 files) — the reference implementation the professional tools use — at 7 epochs from 1900 to 2049. Worst cases first, tolerance bands beside them, and nothing averaged away.

1.1″

Worst residual from the Sun to Neptune — Neptune, against a ±2.0″ band. The Sun and the inner planets are VSOP87D series; Jupiter through Neptune are series fitted to JPL's DE441 ephemeris.

3.5″

The Moon's worst residual (band ±10.0″). What limits it is ΔT — Earth-rotation time: exact from the published UTC definition from 1961 on, reconstructed before that, and predicted differently by the reference after ~2035 — not the lunar theory. See the note in the table.

0.0″

Worst residual across the Ascendant, Midheaven, all twelve Placidus cusps and the Vertex (Vertex), measured at three latitudes per epoch.

0.5″

Pluto — no longer the outlier. It used to ride on Keplerian elements; it is now computed from a series fitted to JPL's DE441 ephemeris, and it sits inside its ±2.0″ band. The widest residual on this page is Neptune's, in the first card.

All 15 position measurements and all 11 speed measurements are inside their release bands.

The one-line version, worded the same on every surface: Sun–Neptune within 1.1″ · Moon 3.5″ · Pluto 0.5″ · angles 0.0″

Planetary positions

Worst case, and mean, per body

A residual is the difference between the longitude this engine computes and the longitude the Swiss Ephemeris reports for the same instant. “Worst” is the largest absolute residual across all 7 epochs; “mean” is the average absolute residual. A band is a release gate — the test suite fails if a measurement crosses it — not a claim of typical performance.

BodyWorstMean BandWorst atStatusWhy the band is what it is
Sun 0.2″ 0.1″ ±2.0″ 31 Dec 2049 Within band VSOP87D, cut by measured error against NASA JPL's DE441: within 0.17″ of DE441 (IAU 2006 frame) from 1800 to 2100.
Moon 3.5″ 0.9″ ±10.0″ 31 Dec 2049 Within band ELPMPP02, truncated to 1,243 terms with the truncation measured at 0.49″ at worst (daily over 1800–2100; rms 0.06″); within 0.34″ of NASA JPL's DE441 at the same instant from 1800 to 2100, measured in the IAU 2006 frame. Civil time is converted to Terrestrial Time exactly from the published UTC definition from 1961 on. Before 1961 it uses the Stephenson–Morrison–Hohenkerk reconstruction of the Earth's rotation from lunar occultations (2016, revised 2020), the same model JPL uses. The remaining difference from the Swiss Ephemeris is its own ΔT prediction for future dates.
Mercury 0.3″ 0.1″ ±2.0″ 31 Dec 2049 Within band VSOP87D, cut by measured error against NASA JPL's DE441, with light bending by the Sun: within 0.34″ of DE441 (IAU 2006 frame) from 1800 to 2100.
Venus 0.5″ 0.2″ ±2.0″ 14 Jun 1992 Within band VSOP87D, cut by measured error against NASA JPL's DE441, with light bending by the Sun: within 0.29″ of DE441 (IAU 2006 frame) from 1800 to 2100.
Mars 0.1″ 0.1″ ±2.0″ 15 Jun 1950 Within band VSOP87D, cut by measured error against NASA JPL's DE441, with light bending by the Sun: within 0.39″ of DE441 (IAU 2006 frame) from 1800 to 2100 — VSOP87's own limit for Mars.
Jupiter 0.2″ 0.1″ ±2.0″ 1 Jan 2000 Within band Fitted to NASA JPL's DE441 ephemeris (Chebyshev series, 1695–2105): within 0.18″ of DE441 (IAU 2006 frame) from 1800 to 2100.
Saturn 0.2″ 0.1″ ±2.0″ 31 Dec 2049 Within band Fitted to NASA JPL's DE441 ephemeris (Chebyshev series, 1695–2105): within 0.18″ of DE441 (IAU 2006 frame) from 1800 to 2100.
Uranus 0.2″ 0.1″ ±2.0″ 1 Jan 2000 Within band Fitted to NASA JPL's current Uranus solution (Chebyshev series, 1695–2105): within 0.08″ of that solution, compared in the IAU 2006 frame, from 1800 to 2100.
Neptune 1.1″ 0.4″ ±2.0″ 31 Dec 2049 Within band Fitted to NASA JPL's DE441 ephemeris (Chebyshev series, 1695–2105): within 0.17″ of DE441 (IAU 2006 frame) from 1800 to 2100.
Pluto 0.5″ 0.3″ ±2.0″ 15 Jun 1950 Within band Fitted to NASA JPL's DE441 ephemeris (Chebyshev series, 1695–2105): within 0.15″ of DE441 (IAU 2006 frame) from 1800 to 2100.
Mean node 0.1″ 0.0″ ±5.0″ 1 Jan 1900 Within band Mean node (Meeus 47.7), measured from the true equinox like every other point in the chart.

Angles and houses

The geometry, not just the planets

Angles and cusps depend on place as well as time, so these are measured at three latitudes per epoch — London (51.5°N), Sydney (33.9°S) and Quito (0.2°S). The Vertex is the corner case worth watching: near the equator its two candidate intersections swap sides, and selecting by azimuth — the definition, not a formula shortcut — keeps it correct where a latitude-based formula returns the anti-vertex, 180° wrong.

PointWorstMean BandWorst atStatus
Ascendant 0.0″ 0.0″ ±5.0″ 1 Jan 2024 · London Within band
Midheaven 0.0″ 0.0″ ±5.0″ 1 Jan 2024 · London Within band
House cusps (Placidus) 0.0″ 0.0″ ±5.0″ 31 Dec 2049 · Quito Within band
Vertex 0.0″ 0.0″ ±5.0″ 1 Jan 2024 · Sydney Within band

Motion

Speeds are measured too

Daily motion decides whether an aspect is labelled applying or separating, so a wrong rate is a wrong published claim. Speeds here are differentiated from the same series as the positions (Pluto, which has no series here, uses a one-hour central difference), and every body's worst deviation is held to one shared band of ±2″/day — one band, rather than eleven tuned ones.

BodyWorst deviationBand Worst atStatus
Moon 0.51″/day ±2″/day 1 Jan 2000 Within band
Venus 0.08″/day ±2″/day 14 Jun 1992 Within band
Mercury 0.03″/day ±2″/day 1 Jan 2024 Within band
Sun 0.01″/day ±2″/day 1 Jan 2024 Within band
Mars 0.01″/day ±2″/day 15 Jun 1950 Within band
Jupiter 0.01″/day ±2″/day 1 Jan 1900 Within band
Neptune 0.00″/day ±2″/day 29 Oct 2026 Within band
Saturn 0.00″/day ±2″/day 15 Jun 1950 Within band
Pluto 0.00″/day ±2″/day 14 Jun 1992 Within band
Mean node 0.00″/day ±2″/day 15 Jun 1950 Within band
Uranus 0.00″/day ±2″/day 1 Jan 2024 Within band

Method

How this was measured

The engine

Positions are computed analytically, in your browser: VSOP87D for the Sun, Mercury, Venus and Mars, ELPMPP02 for the Moon (1,243 of its 35,901 terms, with the truncation itself measured at 0.49″), series fitted to NASA JPL's ephemerides for Jupiter through Pluto, and Meeus's polynomial for the mean node. ΔT — the difference between atomic and Earth-rotation time — comes from the published UTC definition from 1961 on and the Stephenson–Morrison–Hohenkerk reconstruction before that. Nothing is looked up from a server, and no account or tracking is involved.

The comparison

The reference positions live in a fixture generated offline from Swiss Ephemeris 2.10.03 (Moshier, no .se1 files) and committed to the source, so the comparison needs no network and no ephemeris files at runtime. The same measurement module (src/lib/astro/precision.ts) feeds this page, the app's own precision view, every PDF report's accuracy appendix, and the release test gate — four surfaces, one set of numbers, so they cannot drift apart.

The sample

Epochs (UTC): 1 Jan 1900 · 15 Jun 1950 · 14 Jun 1992 · 1 Jan 2000 · 1 Jan 2024 · 29 Oct 2026 · 31 Dec 2049. Bodies: the Sun, Moon, five classical and three modern planets, and the mean node. Angles and Placidus cusps at London, Sydney and Quito for each epoch. Worst cases are reported per body across the whole sample — not cherry-picked instants.

The range

Measured against NASA JPL DE441 from 1800 to 2100: 39,650 instants, every body within 0.4″. The 1700s have been measured too; Mars (up to 1.7″) and a frame-convention change at JPL keep that century outside the published range for now.

Time zones

Birth times are converted with our own copy of the IANA time-zone database (release 2026f, including its historical 'backzone' records), so a chart gives the same answer on every device and keeps local clock history that standard builds merge away. For example, Oslo, Reykjavík and Montréal before 1970, or much of West Africa before 1960.

npm run check:oracle   # prints these tables; exits non-zero if any band is exceeded
npm run check          # typecheck + lint + unit tests + engine probe + this comparison

Honest limits

What residuals do — and do not — prove

What they prove

That the arithmetic agrees with the reference implementation, within the stated bands, at the sampled epochs. If you cast the same chart in a professional tool built on the Swiss Ephemeris, the longitudes on your Celestial Sextant chart should match to within the residuals printed above — and every chart and report from the app prints its own computation record so you can check a specific case.

What they don't prove

Not accuracy against the sky itself. The Swiss Ephemeris in Moshier mode differs from JPL DE441 by roughly an arcsecond, so a residual is a distance from this reference, not from truth.

Not a distribution test. Seven epochs prove the theory; they do not characterise every minute of 1800–2050.

Not a claim about interpretation. This page measures arithmetic. Whether a Saturn return means anything is not a question arithmetic can answer.

Check a chart yourself

The calculator is free, runs entirely in your browser, and your birth data never leaves your device. Every chart prints its method and diagnostics.

Open the free calculator