Open Meteo Scraper avatar

Open Meteo Scraper

Pricing

from $0.60 / 1,000 location fetcheds

Go to Apify Store
Open Meteo Scraper

Open Meteo Scraper

Get weather forecasts, current conditions, and historical data for any location worldwide. Supports daily and hourly data with customizable units. No API key needed.

Pricing

from $0.60 / 1,000 location fetcheds

Rating

5.0

(1)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

1

Bookmarked

9

Total users

4

Monthly active users

13 days ago

Last modified

Share

Open-Meteo Weather Scraper

Get weather forecasts, current conditions, or historical daily weather for any location worldwide using the Open-Meteo APIs. No API key required.

What does Open-Meteo Weather Scraper do?

This actor fetches real-time forecasts or opt-in historical daily weather for one or more locations. Forecast mode uses Open-Meteo's forecast API, while historical mode uses the Open-Meteo Archive API. It returns structured data including:

  • Current conditions: temperature, feels-like temperature, humidity, weather description, precipitation, cloud cover, pressure
  • Wind data: speed, direction, gusts in your preferred unit (km/h, mph, m/s, knots)
  • UV & daylight: UV index, sunrise/sunset times, sunshine duration
  • Daily forecasts: up to 16 days ahead with min/max temperatures, precipitation probability, and weather codes
  • Hourly data: optional hour-by-hour breakdown for detailed forecast analysis
  • Historical daily weather: opt-in backfills of up to 92 days per run with temperature, precipitation, wind, weather codes, sunrise, and sunset
  • Smart geocoding: accepts city names or latitude/longitude coordinates in either mode

Who is it for?

Open-Meteo Weather Scraper is useful for analysts, developers, researchers, event planners, agriculture teams, travel teams, and AI agents that need clean weather data without maintaining their own weather API integration. It is especially practical when you want repeatable exports for many cities or coordinates and need CSV, JSON, Excel, API, or MCP access from the same workflow.

Why use Open-Meteo Weather Scraper?

  • No API key needed — Open-Meteo is free for non-commercial use with no signup required
  • Global coverage — weather data for any location on Earth with ~1km resolution
  • High accuracy — combines data from national weather services including DWD, NOAA, and Météo-France
  • Up to 16-day forecasts — detailed daily and optional hourly predictions
  • Historical backfills — fetch an inclusive date range of up to 92 days from the Archive API
  • Multiple locations — fetch weather for many cities in a single run
  • Flexible units — choose Celsius/Fahrenheit, km/h/mph/m/s/knots
  • Human-readable weather — WMO weather codes translated to plain English descriptions

Use cases

  • Travel planning: Check weather forecasts for upcoming trip destinations
  • Agriculture: Monitor temperature, precipitation, and UV for crop management
  • Event planning: Get multi-day forecasts for outdoor event scheduling
  • Supply chain: Weather-aware logistics and demand forecasting
  • Energy: Solar and wind forecasting for renewable energy planning
  • Retail analytics: Correlate sales data with weather conditions
  • Research: Backfill historical weather across multiple locations for longitudinal analysis

How to get weather data with Open-Meteo Scraper

  1. Go to Open-Meteo Weather Scraper on Apify Store.
  2. Enter one or more locations — city names (e.g., "London") or coordinates (e.g., "48.8566,2.3522").
  3. Keep dataMode set to forecast for the existing current/forecast workflow, or choose historical for an Archive API backfill.
  4. In forecast mode, set the number of forecast days (0–16) and optionally enable hourly data.
  5. In historical mode, provide startDate and endDate in YYYY-MM-DD format; the inclusive range can be up to 92 days.
  6. Choose your preferred temperature and wind speed units.
  7. Click Start and download your data as JSON, CSV, or Excel.

Input parameters

ParameterTypeDescription
locationsArrayList of locations — city names or "lat,lon" coordinates (required)
dataModeStringforecast or historical (default: forecast)
startDateStringHistorical range start in YYYY-MM-DD; required only when dataMode is historical
endDateStringHistorical range end in YYYY-MM-DD; required only when dataMode is historical; inclusive range is limited to 92 days
forecastDaysIntegerForecast days to include, 0–16 (default: 7; ignored in historical mode)
includeHourlyBooleanInclude hourly data for each forecast day (default: false)
temperatureUnitString"celsius" or "fahrenheit" (default: "celsius")
windSpeedUnitString"kmh", "mph", "ms", or "kn" (default: "kmh")

Output example

Each location produces one dataset item. Forecast mode contains current conditions and daily forecasts:

{
"location": "London, United Kingdom",
"latitude": 51.5085,
"longitude": -0.1257,
"elevation": 27.0,
"timezone": "Europe/London",
"country": "United Kingdom",
"temperature": 14.2,
"apparentTemperature": 12.8,
"humidity": 72,
"weatherCode": 3,
"weatherDescription": "Overcast",
"precipitation": 0.0,
"windSpeed": 15.3,
"windDirection": 220,
"windGusts": 28.1,
"cloudCover": 100,
"pressure": 1018.5,
"uvIndex": 2.1,
"isDay": true,
"currentTime": "2026-03-03T14:00",
"temperatureUnit": "°C",
"windSpeedUnit": "kmh",
"dailyForecast": [
{
"date": "2026-03-03",
"weatherCode": 3,
"weatherDescription": "Overcast",
"temperatureMax": 14.2,
"temperatureMin": 8.1,
"temperatureMean": 11.2,
"precipitationSum": 0.0,
"precipitationProbabilityMax": 10,
"windSpeedMax": 22.5,
"uvIndexMax": 2.5,
"sunrise": "2026-03-03T06:42",
"sunset": "2026-03-03T17:48",
"sunshineDuration": 18200
}
],
"hourlyData": [],
"historicalDaily": [],
"scrapedAt": "2026-03-03T14:00:00.000Z"
}

Historical mode keeps the forecast fields schema-compatible (null, empty strings, or empty arrays) and populates historicalDaily instead:

{
"location": "London, United Kingdom",
"latitude": 51.5085,
"longitude": -0.1257,
"timezone": "Europe/London",
"temperature": null,
"dailyForecast": [],
"hourlyData": [],
"historicalDaily": [
{
"date": "2026-01-01",
"weatherCode": 3,
"weatherDescription": "Overcast",
"temperatureMax": 8.4,
"temperatureMin": 3.1,
"temperatureMean": 5.6,
"precipitationSum": 1.2,
"windSpeedMax": 24.7,
"sunrise": "2026-01-01T08:06",
"sunset": "2026-01-01T16:02"
}
],
"scrapedAt": "2026-01-10T14:00:00.000Z"
}

How much does it cost to get weather data from Open-Meteo?

Open-Meteo Weather Scraper uses a pay-per-event pricing model:

EventPrice
Run started$0.001
Per location fetched$0.00028–$0.00115, depending on account tier ($0.001 on Bronze)

Bronze-tier cost examples:

  • 5 locations: $0.001 + (5 × $0.001) = $0.006
  • 20 locations: $0.001 + (20 × $0.001) = $0.021
  • 100 locations: $0.001 + (100 × $0.001) = $0.101

API usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('automation-lab/open-meteo-scraper').call({
locations: ['London', 'Paris', 'Berlin'],
forecastDays: 7,
temperatureUnit: 'celsius',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(w => {
console.log(`${w.location}: ${w.temperature}${w.temperatureUnit} - ${w.weatherDescription}`);
});

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('automation-lab/open-meteo-scraper').call(run_input={
'locations': ['London', 'Paris', 'Berlin'],
'forecastDays': 7,
'temperatureUnit': 'celsius',
})
dataset = client.dataset(run['defaultDatasetId']).list_items().items
for w in dataset:
print(f"{w['location']}: {w['temperature']}{w['temperatureUnit']} - {w['weatherDescription']}")

cURL

curl "https://api.apify.com/v2/acts/automation-lab~open-meteo-scraper/runs" \
-X POST \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locations": ["London", "Paris", "Berlin"], "forecastDays": 7, "temperatureUnit": "celsius"}'

Integrations

Connect Open-Meteo Weather Scraper with other tools using Apify integrations:

  • Google Sheets — Export weather data to spreadsheets for monitoring and analysis
  • Slack / Email — Get weather alerts when conditions change
  • Webhooks — Trigger workflows based on weather data updates
  • Zapier / Make — Connect to 5,000+ apps for weather-driven automation
  • Amazon S3 / Google Cloud — Archive weather data for long-term analysis

Tips and best practices

  • City names vs coordinates — city names are geocoded automatically; for precision, use "lat,lon" format
  • Forecast days — set to 0 for current weather only; up to 16 days available
  • Historical dates — set dataMode to historical and provide both startDate and endDate; split longer backfills into ranges of at most 92 days
  • Hourly data — applies only in forecast mode and produces significantly more data; disable if you only need daily summaries
  • Multiple locations — add as many locations as needed; each is fetched in a single API call
  • Weather codes — WMO standard codes (0–99) are automatically translated to human-readable descriptions
  • Scheduling — set up recurring runs on Apify to build weather history datasets

Weather code reference

CodeDescription
0Clear sky
1–3Mainly clear, Partly cloudy, Overcast
45, 48Fog, Depositing rime fog
51–55Drizzle (light, moderate, dense)
61–65Rain (slight, moderate, heavy)
71–75Snowfall (slight, moderate, heavy)
80–82Rain showers (slight, moderate, violent)
95–99Thunderstorm, with hail

Data source

All weather data comes from Open-Meteo, which aggregates data from national weather services worldwide. Data is available under the CC BY 4.0 license.

Use with AI agents via MCP

Open-Meteo Weather Scraper is available as a tool for AI assistants via the Model Context Protocol (MCP).

Setup for Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/open-meteo-scraper"

Setup for Claude Desktop, Cursor, or VS Code

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/open-meteo-scraper"
}
}
}

Example prompts

  • "Get weather forecast for London this week"
  • "Backfill historical daily weather for London from 2026-01-01 to 2026-01-31"
  • "What's the temperature and precipitation forecast for Tokyo?"

Learn more in the Apify MCP documentation.

Legality

Scraping publicly available data is generally legal according to the US Court of Appeals ruling (HiQ Labs v. LinkedIn). This actor only accesses publicly available information and does not require authentication. Always review and comply with the target website's Terms of Service before scraping. For personal data, ensure compliance with GDPR, CCPA, and other applicable privacy regulations.

FAQ

Q: Is an API key needed? A: No. Open-Meteo provides free weather data without authentication for non-commercial use.

Q: How accurate are the forecasts? A: Open-Meteo uses high-resolution models (1–11km) from DWD, NOAA, Météo-France, and other national services. Short-term forecasts (1–3 days) are highly accurate.

Q: Can I get historical weather data? A: Yes. Set dataMode to historical, then provide startDate and endDate in YYYY-MM-DD format. The actor fetches daily weather from the Open-Meteo Archive API for an inclusive range of up to 92 days. Current conditions, dailyForecast, and hourlyData are not populated in historical mode.

Q: What happens if a location can't be found? A: The actor logs a warning and skips unresolvable locations. Other locations in the same run are still processed.

Q: The weather data seems wrong for my city — what should I check? A: City name geocoding may resolve to a different location with the same name. For precise results, use latitude/longitude coordinates instead (e.g., "48.8566,2.3522" for Paris). Check the returned latitude and longitude fields to verify the resolved location.

Q: Hourly data is empty even though I set includeHourly: true — why? A: Make sure forecastDays is set to at least 1. If forecastDays is 0 (current weather only), there are no forecast days to generate hourly breakdowns for.