How the Sky Score works

The Sky Score rates the night sky at a spot from 0 to 100 — for a given night. It multiplies three factors, because any one of them can ruin a night on its own: a pristine sky under a full moon is not a dark sky, and neither is one behind clouds.

Sky Score = D × M × C

darkness × moon × clear-sky odds, on a 0–100 scale

D — Darkness (0–100, from satellite data)

We start from NASA's Black Marble VJ146A4 annual composite: nighttime radiance measured by the VIIRS instrument on the NOAA-20 satellite, at ~500 m resolution, cleaned of moonlight, clouds and snow effects.

Raw radiance is not enough: a park with no lights of its own can still sit under the glow of a city 30 km away. So for every spot we compute a skyglow index: the sum of all radiance within 50 km, weighted by distance following Walker's law (intensity falling as d−2.5) — the standard empirical model for how city light propagates into the night sky.

That index is then mapped to the Bortle scale (the 1–9 astronomers' scale of sky darkness) by interpolating between nine calibration sites whose Bortle class is documented — from certified dark-sky parks to the centers of Phoenix and Las Vegas:

Calibration siteTypeDocumented Bortle
Big Bend National Park, TXDarkSky-certified parkB1–2
Bryce Canyon National Park, UTDarkSky-certified parkB2
Dead Horse Point State Park, UTDarkSky-certified parkB2
Sedona, AZDarkSky communityB4
Moab town center, UTsmall townB4–5
Flagstaff, AZ (downtown)dark-sky city, pop. 75kB5
St. George, UTmid-size cityB6–7
Phoenix, AZ (downtown)major metroB9
Las Vegas, NV (center)major metroB9

Finally, D maps Bortle linearly to 0–100: Bortle 1 → 100, Bortle 9 → 0. One honest consequence: our D never exceeds 94. We refuse to rate any sky darker than our darkest ground-truth anchor (Bortle 1.5) without on-site measurements — a score of 94 already means an exceptional sky.

M — Moon (0.4–1)

M = 1 − 0.6 × (illuminated fraction × share of the night the moon is up). New moon, or a moon below the horizon all night: M = 1. Full moon up all night: M = 0.4. Moon positions are computed locally with the open-source astronomy-engine ephemeris for the spot's exact coordinates — the same library we use to compute eclipse timings.

C — Clear-sky odds (0.2–1)

C = 0.2 + 0.8 × (share of clear night sky in that month), from the ERA5 reanalysis by the Copernicus Climate Change Service: ten years (2015–2024) of total cloud cover, sampled only at night hours, and averaged per calendar month on a 0.25° grid. This is climatology — the odds for a typical night that month — not a weather forecast.

Two scores you'll see on the site

  • The spot's static score (used in rankings): D × C averaged over the year, moon excluded — it describes the place, not a date.
  • The monthly / tonight score: the full D × M × C, which is why the same spot scores differently in June and August, or at new moon and full moon.

What the Sky Score is not

It is a model, not a measurement. We do not (yet) take on-site sky quality readings; local horizon, terrain shielding and altitude are not modeled; and satellite radiance is measured looking down, not up. Treat the score as a well-calibrated estimate for comparing spots and picking nights — not as a substitute for an SQM reading.

Data sources

  • NASA Black Marble VJ146A4 (NOAA-20 VIIRS), via LAADS DAAC — open data.
  • ERA5 monthly means — contains modified Copernicus Climate Change Service information (2015–2024).
  • Spot and lodging locations © OpenStreetMap contributors, ODbL.
  • Moon and eclipse computation: astronomy-engine (MIT).

Questions, corrections, or ground-truth SQM readings from one of our spots? We'd genuinely love to hear: hello@nightskyindex.com.

← Night Sky Index