# Open-Meteo Scraper (`aurenic/open-meteo-scraper`) Actor

Extract current weather, 16-day forecasts, and 80+ years of historical climate data from Open-Meteo. Global coverage by city name or coordinates. No API key, no account, no rate limit.

- **URL**: https://apify.com/aurenic/open-meteo-scraper.md
- **Developed by:** [Aurenic](https://apify.com/aurenic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Open-Meteo Scraper

Extract current weather, 16-day forecasts, and 80+ years of historical climate data from Open-Meteo. Global coverage by city name or coordinates. No API key, no account, no rate limit.

### What does Open-Meteo Scraper do?

Scrape Open-Meteo — the open-source weather API used by millions of developers — in three modes:

- **Current weather** — live conditions for any location worldwide: temperature, humidity, apparent temperature, precipitation, wind speed and direction, weather code, day/night flag.
- **Forecast** — hourly (up to 384 hours) and daily (up to 16 days) forecasts. Includes optional past days lookback.
- **Historical archive** — daily and hourly reanalysis data from 1940 to present, sourced from ERA5, ERA5-Land, and CERRA.

Locations can be provided as **city names** (auto-geocoded via Open-Meteo's geocoding API) or as explicit **latitude/longitude** coordinates. Multiple locations can be fetched in one run.

Open-Meteo is **completely free for non-commercial use** — no API key, no account, no sign-up, and no rate limits for reasonable use. Data comes from national weather services including NOAA (GFS), DWD (ICON), Météo-France (AROME), ECMWF (IFS), and JMA.

### Output fields

Every record includes location context and the variables you selected.

| Field | Description |
|---|---|
| recordType | `current`, `hourly`, `daily`, or `diagnostic` |
| location / country / admin1 | Location identity |
| latitude / longitude / elevation | Coordinates |
| timezone / timezoneAbbreviation | Time zone context |
| time | ISO timestamp (current and hourly) |
| date | Date (daily) |
| …weather variables | Any variable requested: temperature\_2m, relative\_humidity\_2m, precipitation, weather\_code, wind\_speed\_10m, etc. |

#### Common weather variables

| Variable | Description |
|---|---|
| temperature\_2m | Air temperature at 2m (°C) |
| relative\_humidity\_2m | Relative humidity (%) |
| apparent\_temperature | Feels-like temperature (°C) |
| precipitation | Precipitation (mm) |
| precipitation\_probability | Chance of precipitation (%) |
| weather\_code | WMO weather code (0=clear, 3=overcast, 61=rain, 95=thunderstorm, etc.) |
| wind\_speed\_10m / wind\_direction\_10m | Wind at 10m |
| cloud\_cover | Cloud cover (%) |
| pressure\_msl | Sea-level pressure (hPa) |
| uv\_index\_max | Daily max UV index |
| sunrise / sunset | Daily sun times |
| temperature\_2m\_max / temperature\_2m\_min | Daily min/max |

### Who is it for?

- **Weather apps and dashboards** powering forecasts without API costs
- **Data scientists** building climate and weather datasets for analysis
- **Agriculture and energy analysts** tracking temperature, precipitation, and solar data
- **Travel platforms** enriching destination pages with weather context
- **Event planners** pulling historical climate data for site selection
- **Logistics and shipping** monitoring weather risk by route

### Pricing

**$0.50 per 1,000 results.** No subscription.

| Results | Cost |
|---|---|
| 100 | $0.05 |
| 1,000 | $0.50 |
| 10,000 | $5.00 |

### How to use it

1. Pick a **Mode**.
2. Enter **Locations** as city names or `{ latitude, longitude }` objects.
3. For forecast: set **Forecast Days** (max 16) and **Past Days** (max 92).
4. For historical: set **Historical Start Date** and **Historical End Date**.
5. Optionally customize **Current / Hourly / Daily Variables**.
6. Click **Start**.

### Output example

```json
{
  "recordType": "daily",
  "location": "London",
  "country": "United Kingdom",
  "admin1": "England",
  "latitude": 51.50853,
  "longitude": -0.12574,
  "elevation": 25.0,
  "timezone": "Europe/London",
  "timezoneAbbreviation": "GMT",
  "date": "2026-09-25",
  "weather_code": 3,
  "temperature_2m_max": 16.4,
  "temperature_2m_min": 10.2,
  "precipitation_sum": 1.2,
  "precipitation_probability_max": 45,
  "wind_speed_10m_max": 22.3,
  "sunrise": "2026-09-25T06:52",
  "sunset": "2026-09-25T18:48",
  "scrapedAt": "2026-09-25T12:00:00.000Z"
}
```

### Technical details

- **Source: Open-Meteo API** at `https://api.open-meteo.com/v1/forecast` and `https://archive-api.open-meteo.com/v1/archive`.
- **Completely free for non-commercial use.** No API key, no account, no credit card. Non-commercial fair-use limits apply (~10,000 calls/day) but there is no hard rate limit for reasonable use.
- **80+ years of historical data** — the archive API covers 1940 to present via ERA5 and ERA5-Land reanalysis.
- **Global coverage** — any location on Earth.
- **Geocoding built in** — pass a city name like "London" and the actor resolves coordinates via Open-Meteo's geocoding API.
- **Weather models** — Open-Meteo aggregates 30+ national weather models: NOAA GFS, DWD ICON, Météo-France AROME, ECMWF IFS, JMA, and more.
- **No browser, no proxy** — pure REST JSON.

### Known limits

- **Non-commercial use only on the free tier.** Open-Meteo's free tier is licensed for non-commercial use. Commercial applications require a paid plan from open-meteo.com.
- **~10,000 calls/day non-commercial fair-use limit.** The actor defaults to 200ms between requests — well within bounds for typical runs.
- **Historical data starts at 1940.** Earlier reanalysis is not available.
- **Weather codes follow the WMO standard.** Interpretation table: `0`=Clear sky, `1`-`3`=Partly cloudy to overcast, `45`/`48`=Fog, `51`-`67`=Drizzle/Rain, `71`-`77`=Snow, `80`-`82`=Rain showers, `95`-`99`=Thunderstorm.
- **Forecast horizon is 16 days.** Beyond that, forecast skill drops and the API does not extend further.

### FAQ

**Do I need an API key?** No. Open-Meteo is free and keyless for non-commercial use.

**Do I need a proxy?** No. Datacenter IPs are accepted.

**Is it really unlimited?** For non-commercial use, yes within reason. The public service asks users to stay under ~10,000 calls/day. Commercial use requires a paid plan.

**How far back does historical data go?** 1940-01-01.

**What weather models are used?** The API aggregates NOAA GFS, DWD ICON, Météo-France AROME, ECMWF IFS, JMA, and 25+ other national models. The best-performing model for each location is selected automatically.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `locations` (type: `array`):

City names or { latitude, longitude } objects. City names are geocoded automatically.

## `latitude` (type: `number`):

Override with explicit latitude. Used only if locations is empty.

## `longitude` (type: `number`):

Override with explicit longitude. Used only if locations is empty.

## `forecastDays` (type: `integer`):

Number of days to forecast (max 16).

## `pastDays` (type: `integer`):

Include this many past days in the forecast response (max 92).

## `currentVariables` (type: `array`):

Weather variables for current conditions. Leave empty for a sensible default set. Examples: temperature\_2m, relative\_humidity\_2m, apparent\_temperature, precipitation, weather\_code, wind\_speed\_10m, wind\_direction\_10m, is\_day.

## `hourlyVariables` (type: `array`):

Hourly variables. Leave empty for defaults in forecast mode, or specify for historical. Examples: temperature\_2m, relative\_humidity\_2m, precipitation, precipitation\_probability, weather\_code, wind\_speed\_10m, cloud\_cover, pressure\_msl.

## `dailyVariables` (type: `array`):

Daily variables. Leave empty for defaults. Examples: weather\_code, temperature\_2m\_max, temperature\_2m\_min, precipitation\_sum, precipitation\_probability\_max, wind\_speed\_10m\_max, sunrise, sunset, uv\_index\_max.

## `historicalStartDate` (type: `string`):

Start date for historical mode (YYYY-MM-DD). Earliest is 1940-01-01.

## `historicalEndDate` (type: `string`):

End date for historical mode (YYYY-MM-DD).

## `timezone` (type: `string`):

Timezone for timestamps. Default auto uses the location's local timezone.

## `maxItems` (type: `integer`):

Hard cap on records per run.

## `requestDelayMs` (type: `integer`):

Delay between requests. Open-Meteo has no hard rate limit; 200ms is polite.

## Actor input object example

```json
{
  "mode": "forecast",
  "locations": [
    "London",
    "New York",
    "Tokyo"
  ],
  "forecastDays": 7,
  "pastDays": 0,
  "currentVariables": [],
  "hourlyVariables": [],
  "dailyVariables": [],
  "historicalStartDate": "2024-01-01",
  "historicalEndDate": "2024-12-31",
  "timezone": "auto",
  "maxItems": 1000,
  "requestDelayMs": 200
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "London",
        "New York",
        "Tokyo"
    ],
    "currentVariables": [],
    "hourlyVariables": [],
    "dailyVariables": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurenic/open-meteo-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locations": [
        "London",
        "New York",
        "Tokyo",
    ],
    "currentVariables": [],
    "hourlyVariables": [],
    "dailyVariables": [],
}

# Run the Actor and wait for it to finish
run = client.actor("aurenic/open-meteo-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "London",
    "New York",
    "Tokyo"
  ],
  "currentVariables": [],
  "hourlyVariables": [],
  "dailyVariables": []
}' |
apify call aurenic/open-meteo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aurenic/open-meteo-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/y5uQ7hxCjW6yZiOCL/builds/h5DQxRegvTiE1D6iZ/openapi.json
