LottoData is an automated archive of lottery draw results. GitHub Actions fetch new results on every draw day and commit them to this repository as plain CSV files, so the data is always accessible without scraping or signing up for any service.
The latest draw results are published as a GitHub Page.
Three lotteries are covered:
- Austria — Lotto 6 aus 45 (regular draws on Wednesday and Sunday, occasional extra draws on Friday, results from 1986)
- Germany — Lotto 6 aus 49 (draws on Wednesday and Saturday, results from 1955)
- Europe — Euromillionen (draws on Tuesday and Friday, results from 2004)
| Game | File | Source |
|---|---|---|
| AT Lotto 6 aus 45 | at/lotto_6aus45/results.csv |
win2day.at |
| DE Lotto 6 aus 49 | de/lotto_6aus49/results.csv |
lottozahlenonline.de |
| EU EuroMillions | eu/euromillions/results.csv |
win2day.at |
date,n1,n2,n3,n4,n5,n6,zusatzzahl
2025-04-09,3,12,18,27,33,41,5
date,n1,n2,n3,n4,n5,n6,superzahl
2025-04-12,7,14,19,28,35,44,3
The superzahl is a digit from 0–9 drawn separately. Draws before 1992-01-01 have an empty superzahl field (the Superzahl was not yet in use).
date,n1,n2,n3,n4,n5,s1,s2
2025-04-11,7,14,25,38,50,3,9
n1–n5 are the five main numbers (1–50). s1 and s2 are the two Lucky Star numbers (1–12).
Fetch the raw CSV directly from GitHub:
https://raw.githubusercontent.com/daowa89/lottery-archive/main/at/lotto_6aus45/results.csv
https://raw.githubusercontent.com/daowa89/lottery-archive/main/de/lotto_6aus49/results.csv
https://raw.githubusercontent.com/daowa89/lottery-archive/main/eu/euromillions/results.csv
Or load directly into a pandas DataFrame:
import pandas as pd
BASE = "https://raw.githubusercontent.com/daowa89/lottery-archive/main"
at = pd.read_csv(f"{BASE}/at/lotto_6aus45/results.csv", parse_dates=["date"])
de = pd.read_csv(f"{BASE}/de/lotto_6aus49/results.csv", parse_dates=["date"])
eu = pd.read_csv(f"{BASE}/eu/euromillions/results.csv", parse_dates=["date"])
# Most recent draw
print(at.iloc[-1])Three separate GitHub Actions workflows run automatically on draw days:
| Workflow | Draw days | Time (UTC) | Time (CET / CEST) |
|---|---|---|---|
update_at.yml |
Wednesday + Sunday | 20:00 | 21:00 / 22:00 |
update_de.yml |
Wednesday + Saturday | 20:00 | 21:00 / 22:00 |
update_eu.yml |
Tuesday + Friday | 22:00 | 23:00 / 00:00 |
Each workflow fetches new results, creates a dedicated git commit if new data is found, runs an integrity check, and pushes to main. All workflows can also be triggered manually from the Actions tab.
Python 3.10 or newer is required (3.12 recommended).
python -m venv .venv
source .venv/bin/activate
pip install .
# Fetch current + previous year for all games
python scripts/update_all.py
# Fetch a single game
python scripts/fetch_lotto_at_6aus45.py
python scripts/fetch_lotto_de_6aus49.py
python scripts/fetch_euromillions.py
# Run the data integrity check
python scripts/check_integrity.pyAll individual fetch scripts accept the following flags:
| Flag | Description |
|---|---|
| (none) | Fetch current and previous year only |
--init |
Full historical import (AT from 1986, DE from 1955, EU from 2004) |
--commit |
Create a git commit if new data was found |
--init --commit |
Full historical import and commit the result |
update_all.py supports --init to run the full import for all three games at once.
check_integrity.py accepts the following flags:
| Flag | Description |
|---|---|
| (none) | Check all three games |
--country at|de|eu |
Check a single game only |
--skip-stale |
Skip the staleness check (used by CI when no new draw was committed) |
To populate the CSV files with all available historical data, trigger the respective workflow manually with init = true, or run locally:
# All games at once
python scripts/update_all.py --init
# Individual games
python scripts/fetch_lotto_at_6aus45.py --init
python scripts/fetch_lotto_de_6aus49.py --init
python scripts/fetch_euromillions.py --initThis imports AT results from 1986, DE results from 1955, and EU EuroMillions results from 2004.
python3 -m unittest discover -s tests -vNo additional setup required — the tests use only the Python standard library and the packages listed in pyproject.toml.
| Script | Purpose |
|---|---|
scripts/fetch_lotto_at_6aus45.py |
Downloads and parses AT lottery CSVs from win2day.at |
scripts/fetch_lotto_de_6aus49.py |
Scrapes draw results from lottozahlenonline.de |
scripts/fetch_euromillions.py |
Downloads and parses EuroMillions CSVs from win2day.at |
scripts/update_all.py |
Orchestrates all three fetchers for combined local runs |
scripts/check_integrity.py |
Validates CSV files for duplicates, number ranges, sort order, and stale data |
scripts/git_utils.py |
Shared git commit helper used by all update scripts |
scripts/generate_page.py |
Generates the static public/index.html for GitHub Pages |
The latest draw results are available at https://daowa89.github.io/lottery-archive/.
The page is generated automatically by scripts/generate_page.py and deployed via the deploy_pages.yml workflow whenever a results CSV is updated on main.
To generate the page locally:
python scripts/generate_page.py
# Output: public/index.htmlThe scripts in this repository are licensed under the MIT License.
The data (CSV files) is sourced from third parties and remains subject to their respective terms of use:
- Austria / EuroMillions: Österreichische Lotterien GmbH via win2day.at
- Germany: lottozahlenonline.de
This repository is intended for personal, non-commercial use only. The data is reproduced here solely as an automated mirror for convenience.