Open-Meteo Weather Scraper — Forecast, Historical & Geocoding avatar

Open-Meteo Weather Scraper — Forecast, Historical & Geocoding

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Open-Meteo Weather Scraper — Forecast, Historical & Geocoding

Open-Meteo Weather Scraper — Forecast, Historical & Geocoding

Scrape Open-Meteo by city name or lat/lon. Extract hourly temperature, precipitation, wind speed, humidity, and weather code for forecast (16 days) or historical date ranges. No API key, no login.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Open-Meteo Weather Scraper — Forecast, Historical & Geocoding API

Extract real-time weather forecasts, historical climate records, and city coordinates from Open-Meteo's free, keyless API at scale — no API key, no login, no rate-limit hassle.

What does Open-Meteo Weather Scraper do?

Open-Meteo Weather Scraper connects to three Open-Meteo endpoints: the forecast API (api.open-meteo.com/v1/forecast), the historical archive (archive-api.open-meteo.com/v1/archive), and the geocoding service (geocoding-api.open-meteo.com/v1/search). You supply a list of city names or latitude/longitude pairs; the actor automatically resolves city names to coordinates, then fetches hourly or daily weather data and flattens the time-series arrays into individual dataset rows.

In forecast mode, each location yields up to 16 days × 24 hours = 384 hourly rows, covering temperature at 2 m, precipitation, wind speed at 10 m, relative humidity, and WMO weather codes with human-readable descriptions. In historical mode, the same variables are available for any date range back to 1940 for most locations — a 30-day historical pull for 10 cities generates 7,200 rows in a single run. Geocoding mode resolves city names to coordinates, returning up to 10 candidate cities per query with population and administrative region data.

The actor is fully keyless: Open-Meteo is a free, open-source weather API with no registration required. It is trusted by major weather apps and serves over one billion API calls per day from its own infrastructure.

Who is it for?

  • Data scientists and analysts who need structured weather data for climate analysis, ML feature engineering, or correlation studies without signing up for expensive API plans.
  • Business intelligence teams building dashboards that show weather-correlated KPIs (retail, energy, logistics, agriculture).
  • Developers who need a reliable, no-auth weather feed for their applications, prototypes, or data pipelines.
  • Researchers studying historical climate patterns, seasonal trends, or extreme weather events across multiple cities.
  • Operations and supply-chain managers who want 16-day forecasts for their delivery routes, construction sites, or outdoor event venues.

Use cases

  • Retail demand forecasting: pull 16-day hourly forecasts for store locations to predict how weather drives foot traffic and product mix.
  • Energy consumption modeling: extract temperature and humidity time series for a portfolio of buildings to train HVAC load models.
  • Historical climate studies: download decades of daily max/min temperatures for hundreds of cities for academic or journalistic climate research.
  • Logistics route weather: get hourly wind speed and precipitation for waypoints along a transport corridor to flag weather risk windows.
  • Event planning: check 16-day forecasts for multiple candidate venues and export to Google Sheets for side-by-side comparison.

Why use Open-Meteo Weather Scraper?

  • Completely keyless: no API key, no registration, no OAuth — just run it.
  • 16 fields per row: location, lat, lon, country, timezone, time, temperature, max temp, min temp, precipitation, wind speed, humidity, WMO weather code, weather description, and more.
  • Bulk multi-location: feed a list of hundreds of cities in one run; the actor resolves, fetches, and flattens all of them automatically.
  • Three modes in one: forecast (up to 16 days), historical (back to 1940), and geocoding — no separate actors needed.
  • Export-ready: dataset downloads as CSV, JSON, or Excel from Apify; plug directly into Google Sheets, Zapier, or Make workflows.
  • Pay-per-result pricing: you only pay for what you extract — a 1,000-row forecast run costs fractions of a cent.

What data can you extract?

Every row in the dataset represents one time point (hourly or daily) for one location, or one geocoding result.

FieldTypeDescription
locationstringInput location name (as you provided it)
latitudenumberGeographic latitude
longitudenumberGeographic longitude
countrystringCountry name resolved from geocoding
timezonestringIANA timezone (e.g. Europe/London)
dataTypestringhourly, daily, or geocoding
timestringISO datetime (2025-07-08T14:00) for hourly; 2025-07-08 for daily
temperaturenumberAir temperature at 2 m in °C (hourly rows)
temperatureMaxnumberMaximum daily temperature in °C (daily rows)
temperatureMinnumberMinimum daily temperature in °C (daily rows)
precipitationnumberPrecipitation amount in mm
windSpeednumberWind speed at 10 m above ground in km/h
humiditynumberRelative humidity at 2 m in %
weatherCodenumberWMO weather interpretation code
weatherDescriptionstringHuman-readable condition (e.g. Moderate rain, Clear sky)
namestringOfficial city name (geocoding rows only)
populationnumberCity population estimate (geocoding rows only)
admin1stringState or region (geocoding rows only)

Example output row (hourly forecast):

{
"location": "London",
"latitude": "51.50853",
"longitude": "-0.12574",
"country": "United Kingdom",
"timezone": "Europe/London",
"dataType": "hourly",
"time": "2025-07-08T14:00",
"temperature": "22.4",
"temperatureMax": "",
"temperatureMin": "",
"precipitation": "0.0",
"windSpeed": "18.3",
"humidity": "55",
"weatherCode": "1",
"weatherDescription": "Mainly clear",
"name": "",
"population": "",
"admin1": "England"
}

How to use

Option A — Forecast by city names

This is the most common usage. Provide a list of city names; the actor geocodes them automatically.

  1. Open the actor on Apify and click Try for free.
  2. Set Mode to forecast.
  3. Add your city names to the Locations field: London, Tokyo, New York, Berlin.
  4. Set Include Hourly Data to true, Forecast Days to 7.
  5. Click Run and wait ~30 seconds.

Input JSON:

{
"mode": "forecast",
"locations": ["London", "Tokyo", "New York", "Berlin"],
"hourly": true,
"daily": false,
"forecastDays": 7
}

Option B — Historical data by coordinates or city

Retrieve past weather for any date range back to 1940.

  1. Set Mode to historical.
  2. Add locations by city name or lat,lon pairs: "51.5074,-0.1278", "Berlin".
  3. Set Start Date and End Date in YYYY-MM-DD format.
  4. Enable Include Hourly Data and/or Include Daily Summaries.

Input JSON:

{
"mode": "historical",
"locations": ["Berlin", "Paris", "48.8566,2.3522"],
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"hourly": true,
"daily": true
}

Option C — Geocoding

Resolve city names to coordinates for use in other workflows.

{
"mode": "geocoding",
"locations": ["Amsterdam", "Springfield", "Melbourne"]
}

Input parameters

ParameterTypeDefaultDescription
modestringforecastforecast, historical, or geocoding
locationsstring[]["London"]City names or "lat,lon" strings
startDatestringRequired for historical; format YYYY-MM-DD
endDatestringRequired for historical; format YYYY-MM-DD
hourlybooleantrueInclude hourly rows (temperature, precipitation, wind, humidity, code)
dailybooleanfalseInclude daily summary rows (max/min temp, precipitation sum)
forecastDaysinteger7Days to forecast (1–16); only in forecast mode
proxyobjectApify proxy config (not required; Open-Meteo is unrestricted)

Full input JSON example:

{
"mode": "forecast",
"locations": ["London", "Tokyo", "New York", "Berlin", "Sydney"],
"hourly": true,
"daily": true,
"forecastDays": 14,
"proxy": {
"useApifyProxy": false
}
}

Output example

[
{
"location": "Tokyo",
"latitude": "35.6895",
"longitude": "139.6917",
"country": "Japan",
"timezone": "Asia/Tokyo",
"dataType": "hourly",
"time": "2025-07-08T09:00",
"temperature": "31.2",
"temperatureMax": "",
"temperatureMin": "",
"precipitation": "0.1",
"windSpeed": "12.5",
"humidity": "72",
"weatherCode": "3",
"weatherDescription": "Overcast",
"name": "",
"population": "",
"admin1": "Tokyo"
},
{
"location": "Tokyo",
"latitude": "35.6895",
"longitude": "139.6917",
"country": "Japan",
"timezone": "Asia/Tokyo",
"dataType": "daily",
"time": "2025-07-08",
"temperature": "",
"temperatureMax": "33.4",
"temperatureMin": "26.1",
"precipitation": "2.3",
"windSpeed": "",
"humidity": "",
"weatherCode": "",
"weatherDescription": "",
"name": "",
"population": "",
"admin1": "Tokyo"
}
]

Tips for best results

  • Use lat/lon for precision: city names like "Springfield" match multiple cities; use "39.7994,-89.6502" for Springfield, IL to be exact.
  • Historical long ranges: for a 1-year historical pull, you'll get 365 × 24 = 8,760 hourly rows per location — scale up memory only if you're querying 50+ locations simultaneously.
  • Combine hourly + daily: setting both hourly: true and daily: true gives you both granular time series and clean daily summaries in the same run.
  • Geocoding first: if you're unsure of spelling or which city is returned, run mode: geocoding first to inspect resolved names and pick the right one.
  • Forecast days 16: the maximum lookahead is 16 days; for longer planning horizons, re-run the actor on a schedule.
  • Historical start date: Open-Meteo archive goes back to January 1, 1940 for ERA5 reanalysis data. Use start_date: "1940-01-01" for deep historical pulls.
  • No proxy needed: Open-Meteo does not block datacenter IPs; you can disable proxy entirely to save costs.
  • Batch big city lists: you can put 100+ cities in a single run; the actor processes them sequentially and pushes data incrementally so you can monitor progress in real time.
  • Schedule daily forecasts: set up a daily Apify Schedule to refresh your dataset with the latest 7-day or 16-day forecast automatically.
  • Export to Google Sheets: use Apify's built-in Google Sheets integration to pipe the dataset directly into a spreadsheet — great for team dashboards.

Integrations

Google Sheets: connect via Apify's native Google Sheets integration — select your run's dataset and map columns automatically. Ideal for sharing weather dashboards with non-technical stakeholders.

Zapier / Make: use the Apify trigger ("Actor run finished") to push weather rows to any Zapier or Make scenario — send Slack alerts when rain probability exceeds a threshold, update a CRM with weather context, or log to Airtable.

Webhooks: configure an Apify webhook on run completion to POST the dataset URL to your own API endpoint for downstream processing.

Scheduled runs: use Apify Scheduler to run the actor every morning at 6 AM UTC and maintain a fresh 7-day forecast dataset for your application.

API: access results programmatically via the Apify dataset API — filter, paginate, and export in any format without leaving your codebase.

API usage

cURL:

curl -X POST "https://api.apify.com/v2/acts/logiover~open-meteo-weather-scraper/runs" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"mode":"forecast","locations":["London","Tokyo"],"hourly":true,"forecastDays":7}'

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('logiover/open-meteo-weather-scraper').call({
mode: 'forecast',
locations: ['London', 'Tokyo', 'Berlin'],
hourly: true,
forecastDays: 7,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'weather rows');

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("logiover/open-meteo-weather-scraper").call(run_input={
"mode": "forecast",
"locations": ["London", "Tokyo", "Berlin"],
"hourly": True,
"forecastDays": 7,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"{len(items)} weather rows")

Use with AI agents (MCP)

Open-Meteo Weather Scraper is available as an MCP (Model Context Protocol) tool on Apify, making it callable by AI agents and LLM-powered workflows. Connect it via the Apify MCP server and instruct your agent: "Get hourly weather forecasts for London, Tokyo, and New York for the next 7 days and summarize the rain risk for each city." The agent will call this actor, receive structured rows, and synthesize a natural-language report — no coding required.

FAQ

Does this actor require an API key?

No. Open-Meteo is a completely free and open weather API that requires no registration, no API key, and no login. You can run this actor with zero configuration beyond specifying your locations.

How far back can I request historical data?

Open-Meteo's ERA5 reanalysis archive covers global weather data from January 1, 1940 to present. You can request any date range within that window using mode: historical.

How many locations can I scrape in one run?

There is no hard limit. The actor processes locations sequentially; practical limits depend on Apify's compute timeout. For 100 locations × 7-day hourly forecast, expect ~16,800 rows and a runtime of 2–5 minutes with 512 MB memory.

What happens if a city name is ambiguous?

The actor takes the top geocoding result (by population rank) returned by Open-Meteo's geocoding API. Use mode: geocoding first to inspect which city is matched, then switch to lat,lon format if you need a specific city.

Why are some fields empty in the output?

Fields like temperatureMax/temperatureMin are only populated in daily rows; temperature is only populated in hourly rows. Geocoding rows only populate name, population, and admin1. Empty strings mean "not applicable for this row type" — not missing data.

Can I export results to Excel or CSV?

Yes. From your Apify dataset page, click "Export" and choose CSV, JSON, JSONL, or Excel. You can also configure the actor to send results directly to Google Sheets.

How fast is a typical run?

For 4 cities × 7-day hourly forecast (~672 rows), expect 15–30 seconds total run time. Historical runs for long date ranges over many cities take longer due to larger API payloads.

Is the weather data accurate?

Open-Meteo combines multiple meteorological models (ECMWF, GFS, DWD) and provides forecast accuracy comparable to national weather services. Historical data is ERA5 reanalysis, the gold standard in climate science.

How is this different from OpenWeatherMap or WeatherAPI?

Those services require an API key and have strict free-tier rate limits. Open-Meteo is fully open, has no rate limit for reasonable usage, and is specifically designed for data-intensive applications. This actor makes it trivially easy to extract bulk weather data without managing API credentials.

How often should I schedule a run?

For 7-day forecasts, daily runs are sufficient. For real-time operational use (e.g. logistics dispatch), you can run every hour. Open-Meteo updates its model data every 1–6 hours depending on the underlying weather model.

Does it work for any location on Earth?

Yes. Open-Meteo covers the entire globe using a global weather model grid. Even remote locations without named cities can be queried using lat/lon coordinates.

What do WMO weather codes mean?

WMO (World Meteorological Organization) codes are an international standard: 0 = clear sky, 1–3 = partly to fully cloudy, 45–48 = fog, 51–67 = drizzle and rain, 71–77 = snow, 80–82 = showers, 95–99 = thunderstorms. The weatherDescription field translates these to plain English automatically.

Open-Meteo is an open-source weather API released under the Creative Commons Attribution 4.0 license. The data is publicly available and explicitly licensed for commercial and non-commercial use. This actor does not scrape any website or bypass any access control; it calls official, documented, publicly advertised API endpoints. Attribution to Open-Meteo is appreciated per their license terms. This actor respects all API terms of service.