Open-Meteo Historical Archive API
Free historical weather API with no key: hourly and daily weather for any location worldwide going back to 1940, from ERA5 reanalysis data. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-20
What is the Open-Meteo Historical Archive API?
The Open-Meteo Historical Weather API is a free, key-free API providing hourly and daily weather records for any location worldwide going back to 1940, based on ERA5 and other reanalysis datasets.
Historical weather is normally expensive — commercial providers charge substantially for archive access. This endpoint gives eight decades of hourly global data for free, drawn from ECMWF's ERA5 reanalysis.
Reanalysis is worth understanding: rather than raw station readings, it is a physical model reconstruction assimilating observations, which means consistent global coverage including oceans and places that never had a weather station. The tradeoff is that it is a modelled estimate, not a direct measurement.
Quick facts
- Base URL
https://archive-api.open-meteo.com/v1/archive- Authentication
- No API key required.
- Rate limit
- Shares the Open-Meteo fair-use policy — roughly 10,000 requests per day.
- Pricing
- Free including commercial use below the daily limit.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the Open-Meteo Historical Archive API
Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.
1. Fetch historical daily weather
GET https://archive-api.open-meteo.com/v1/archive?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-02&daily=temperature_2m_max
curl 'https://archive-api.open-meteo.com/v1/archive?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-02&daily=temperature_2m_max'const res = await fetch("https://archive-api.open-meteo.com/v1/archive?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-02&daily=temperature_2m_max");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://archive-api.open-meteo.com/v1/archive?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-02&daily=temperature_2m_max", timeout=20)
res.raise_for_status()
print(res.json()){
"latitude": 52.54833,
"longitude": 13.407822,
"generationtime_ms": 1.4096498489379883,
"utc_offset_seconds": 0,
"timezone": "GMT",
"timezone_abbreviation": "GMT",
"elevation": 38.0,
"daily_units": {
"time": "iso8601",
"temperature_2m_max": "°C"
},
"daily": {
"time": [
"2026-01-01",
"2026-01-02"
],
"temperature_2m_max": [
3.0,
2.5
]
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
latitude / longitude | float | Required | Coordinates. 52.52 |
start_date / end_date | string | Required | Date range as YYYY-MM-DD, from 1940 onwards. 2026-01-01 |
daily | string | Optional | Daily aggregates such as temperature_2m_max. temperature_2m_max |
hourly | string | Optional | Hourly variables — large responses over long ranges. temperature_2m |
timezone | string | Optional | IANA timezone or auto. auto |
Response fields
latitude / longitudenumber- The model grid point used, snapped from your request.
daily.timearray- Dates for each daily value.
daily.temperature_2m_maxarray- Daily maximum temperatures.
hourly.time / hourly.<variable>array- Parallel arrays of timestamps and values.
daily_units / hourly_unitsobject- Units for each variable.
elevationnumber- Elevation of the grid cell.
What you can build with the Open-Meteo Historical Archive API
- Analyse long-term climate trends for a location
- Correlate historical weather with business or agricultural data
- Backfill weather context into analytics
- Research extreme weather events without paying for archive access
Common errors and how to fix them
Enormous response
Hourly data over years produces huge arrays.
Fix: Use daily aggregates unless you genuinely need hourly, and split long ranges.
Recent dates missing
Reanalysis data lags real time by around five days.
Fix: Use the forecast API for recent and current conditions.
Values differ from a local station
Reanalysis is modelled, not measured.
Fix: It is a physically consistent estimate for a grid cell, not a station reading — expect small differences.
Open-Meteo Historical Archive API — frequently asked questions
Is there a free historical weather API?
Yes. The Open-Meteo Historical Weather API provides hourly global data back to 1940 with no API key, which commercial providers normally charge substantially for.
What is reanalysis data?
A physical model reconstruction that assimilates historical observations, producing consistent global coverage including oceans and regions with no weather stations. It is a modelled estimate rather than a direct measurement.
Why is there no data for last week?
Reanalysis processing lags real time by around five days. Use the standard Open-Meteo forecast API for recent and current conditions.
How far back does it go?
To 1940, giving over eight decades of hourly data — enough for genuine climate trend analysis.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
Open-Meteo Historical Archive is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.