The variable star archive · release v2026.09.25

Ten million variable stars.
Six surveys. One archive.

Light curves from ASAS-SN, Gaia, OGLE, ZTF, ASAS-3 and MASCARA for 10.1 million VSX variable stars, kept per survey and band, with periods adopted across surveys. Free to read in bulk.

stars
10,304,679
measurements
12.16 B
surveys
6
light curves from ≥ 2 surveys
5,966,107
periodic
4,502,369
The shapes of variability
illustrative archetypes, not archive data
Phase 0 → 2 · foldedBrowse the encyclopedia →

Six surveys · one time axis

Twenty-nine years of the variable sky

Each survey keeps its own bands and magnitudes, on one time axis (BJDTDB) starting with OGLE in 1997. Per row: stars with a light curve, stars with a detection, epochs.

About the surveys →
ASAS-SNSky Patrol v2
gV
2.99 M · 2.99 M · 4.53 B
GaiaDR3
GBPRP
9.16 M · 9.16 M · 1.27 B
OGLEOCVS
IV
683,856 · 683,856 · 1.39 B
ZTFDR24
gri
5.00 M · 4.93 M · 7.02 B
ASAS-3ACVS
V
50,475 · 50,475 · 27.56 M
MASCARAMVS
V
3,265 · 3,265 · 26.70 M
One lane per band, first detection to last; lane weight is the band's epoch count (log scale). Detections span 1997-01-07 to 2026-01-15. Hover a lane for its dates.

All-sky · Galactic coordinates

Where ten million variables are

Stars per equal-area cell, colored by typical period. The arcs are Gaia's scanning pattern. Isolate a class here, or open the sky explorer for per-survey coverage and cone search.

Explore the sky →

HEALPix order 7 cells, 0.46° across. Color is the median adopted period; a cell with too few periods stays uncolored.


Variability families

Browse by family

VSX types grouped into eight families. Counts are VSX labels, most of them imported from Gaia DR3. The light curves drawn here are archetypes.


Data access

Read the whole archive directly

Three public HATS collections: per-star values, frozen light curves and live light curves. Read them with LSDB (no sign-up, no rate limits) or fetch one star over HTTP.

# public Parquet, no account needed
import json, lsdb
from upath import UPath

root = UPath("https://data.varchive.app")
ptr  = json.loads((root / "catalogs/latest.json").read_text())
path = lambda c: root / ptr["collections"][c]["path"]

stars  = lsdb.read_hats(path("varchive_scalars")) # 10,304,679 stars, one row each
live   = lsdb.read_hats(path("curves_live"))      # ASAS-SN g, Gaia, ZTF
static = lsdb.read_hats(path("curves_static"))    # ASAS-SN V, OGLE, ASAS-3, MASCARA

# one star over HTTP, by archive id, ASAS-SN id or name
import requests
star = requests.get("https://api.varchive.app/star/10000000084809").json()