---
name: open-meteo-ingestion
description: "How to get Open-Meteo Weather Forecast API data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load an Open-Meteo hourly forecast into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/open-meteo
Provider: https://open-meteo.com/en/docs
Checked against the provider's documentation: 2026-10-30

## Access
- No account or API key on the free endpoint.
- The free endpoint is restricted to non-commercial use; trading-agent use is usually commercial.

## Request
```bash
curl 'https://api.open-meteo.com/v1/forecast?latitude=51.5074&longitude=-0.1278&hourly=temperature_2m,precipitation&timezone=UTC&forecast_days=3'
```

## Format
JSON with latitude, longitude, generation metadata, units and an hourly object of parallel arrays. This request returns UTC timestamps, 2 m temperature in degrees Celsius and precipitation in millimetres.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Open-Meteo hourly forecast for one point -> pandas -> Parquet. No key."""
import requests
import pandas as pd

URL = "https://api.open-meteo.com/v1/forecast"
params = {
    "latitude": 51.5074,
    "longitude": -0.1278,
    "hourly": "temperature_2m,precipitation",
    "timezone": "UTC",
    "forecast_days": 3,
}
r = requests.get(URL, params=params, timeout=30)
r.raise_for_status()
body = r.json()
df = pd.DataFrame(body["hourly"])
df["time"] = pd.to_datetime(df["time"], utc=True)
df.to_parquet("open_meteo_london_hourly.parquet", index=False)
print(len(df), "hourly rows", df["time"].min().isoformat(), "to", df["time"].max().isoformat())
```
Run by us on 2026-10-30 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 72 hourly rows 2026-10-30T00:00:00+00:00 to 2026-11-01T23:00:00+00:00

## Limits
- Less than 10,000 API calls/day, 5,000/hour and 600/minute.
- Pricing lists 300,000 calls/month and says that monthly limits are not currently enforced.
- Limits are applied by IP address and application.

## Quirks
- The general forecast endpoint returns 7 days by default and at most 16 days.
- Request timezone=UTC or preserve the returned timezone and utc_offset_seconds; local timestamps otherwise need explicit timezone handling.
- Forecasts are stitched across model runs. Store retrieval time if later runs must not replace the forecast known at an earlier decision time.

## Terms and attribution
- The no-key API service is only for non-commercial use. Trading-agent use is usually commercial and needs a commercial subscription or self-hosting.
- API data are CC BY 4.0. Give credit, link the licence, indicate changes and include an Open-Meteo link next to displayed locations.
- The free endpoint has no uptime promise and the provider disclaims accuracy and availability warranties.
- Terms page: https://open-meteo.com/en/license

## Sources
- https://open-meteo.com/en/terms: "Less than 10'000 API calls per day, 5'000 per hour and 600 per minute."
- https://open-meteo.com/en/pricing: "The free API is for non-commercial use, rate-limited to 10,000 calls/day"
- https://open-meteo.com/en/terms: "You accept to the CC-BY 4.0 licence"

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
