Open-Meteo Weather Scraper
Get current weather and 16-day forecasts for any city or coordinates: temperature, humidity, wind and precipitation. $0.20 per 1,000 rows.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
mode,places,latitude(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0002 per weather result = $0.2 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Weather result | Charged per weather/geocode row returned. | $0.0002 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
mode | What to return: "current" = current conditions per place, "forecast" = one row per day (up to Forecast days, or every day between Start date and End date), "geocode" = just resolve place names to coordinates and metadata. | string |
places | List of place names to look up (e.g. ["Berlin", "Tokyo", "New York"]). Each is geocoded to its top match. Leave empty if you provide Latitude + Longitude directly. | array |
latitude | Optional. Use exact coordinates instead of a place name. Only used when Places is empty. Must be paired with Longitude. Example: 52.52. | string |
longitude | Optional. Use exact coordinates instead of a place name. Only used when Places is empty. Must be paired with Latitude. Example: 13.41. | string |
forecastDays | Number of days to return in forecast mode (1-16). Ignored in current / geocode modes, and when Start date and End date are set. | integer |
startDate | Forecast mode only. The first day you want, as YYYY-MM-DD, and set End date too. Days before today come from Open-Meteo's historical record, which goes back to 1940-01-01. Today and later come from the forecast. Leave both dates empty for the usual forecast starting today. | string |
endDate | Forecast mode only. The last day you want, as YYYY-MM-DD, at most 15 days after today. For a single day, use the same date as Start date. Max items still caps the rows, so a long window is cut at its far end. | string |
maxItems | Maximum total output rows across all places. Caps forecast rows too (each forecast day is one row). | integer |
notionConnector | Optional. Write each item as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
What you get
A structured dataset — each result includes fields like:
apparentTemperaturedatehumiditylatitudelongitudeplaceprecipitationprecipitationSumtempMaxtempMintemperaturetimetimezoneweatherExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
2 ready-to-run use cases
Current Weather API for a List of Cities, No Key
Temperature, feels-like, humidity, wind and a plain-language condition per city, from Open-Meteo. City names get geocoded, so spell them properly.
7 Day Weather Forecast API by City, Highs and Lows
One row per day with high, low, wind and total precipitation. Forecast mode carries no humidity field; that one lives on current-conditions mode.
Where this tool sits
- Categories
- Weather Data
Weather Scraper: current conditions and a 16-day forecast, by city name or coordinates
Give it a list of cities and get the weather back as rows. Temperature, what it feels like, humidity, precipitation, wind and a plain-English description instead of a raw numeric code. Ask for a forecast instead and you get one row per day, up to 16 days out, or give it a start and end date and get every day in between, as far back as 1940. It runs on Open-Meteo, which needs no API key, so it needs nothing from you either.
A city name resolves to whichever place Open-Meteo ranks first. That is almost always the one you meant, and for the Springfields and Cambridges of the world it is a coin toss, so send coordinates when the answer has to be exact.
| Input | Place names, or one latitude and longitude pair, and an optional date window |
| Output | One row per place, or one row per day |
| Ceiling | 10,000 rows per run; days from 1940-01-01 to 15 days after today |
| Account needed | None, and no weather API key |
| Price | $0.20 per 1,000 rows, flat on every plan |
🔍 What Weather Scraper does
Three modes, and they return different things.
mode | What comes back |
|---|---|
current | One row per place: the conditions right now. |
forecast | One row per place per day, up to forecastDays, or every day from startDate to endDate. Daily high and low, rain total, top wind. |
geocode | One row per place, with coordinates, country, region, timezone and population. No weather call at all. |
Places are looked up by name and resolved to Open-Meteo's top match. If you already have coordinates, leave places empty and fill in latitude and longitude instead. That path takes one point per run.
Set startDate and endDate on a forecast run to pick the days yourself, from 1940-01-01 to 15 days after today. Days before today come from Open-Meteo's historical record, the rest from the forecast.
Units are Open-Meteo's own: Celsius, kilometres per hour, millimetres. There is no setting to change them.
📥 What you give it
{
"mode": "forecast",
"places": ["Paris", "Madrid"],
"forecastDays": 5,
"maxItems": 100
}
| Field | Default | What it is |
|---|---|---|
mode | current | current, forecast or geocode. |
places | none | Place names, each resolved to its top match. The Console box starts at Berlin, London and Tokyo; an API call has to send its own. |
latitude | none | An exact latitude, used only when places is empty. Must be paired with longitude. |
longitude | none | An exact longitude, same rules. |
forecastDays | 7 | 1 to 16. Ignored outside forecast mode, and when a date window is set. |
startDate | none | Forecast mode only. The first day of a date window, YYYY-MM-DD, no earlier than 1940-01-01. Set endDate with it. |
endDate | none | Forecast mode only. The last day of the window, at most 15 days after today. Use the same date as startDate for a single day. |
maxItems | 100 | 1 to 10,000 total rows across every place. |
notionConnector | none | Optional. Writes one Notion page per row when the run finishes. Authorise the connector once under Settings, API & Integrations, MCP connectors. |
notionParentId | none | Optional. The Notion data source to write into. Leave it empty and the pages land privately in your workspace. |
proxyConfiguration | off | Optional network settings. A normal run does not need them. |
In forecast mode a row is one day, so maxItems has to cover places times days. Five cities at 7 days is 35 rows; leave maxItems at 10 and the last cities get cut off part way down your list. A date window counts the same way, and a window longer than maxItems is cut at its far end.
{
"mode": "forecast",
"places": ["Paris"],
"startDate": "2025-07-01",
"endDate": "2025-07-31"
}
If you go the coordinates route, type real numbers into both boxes. Sending two empty strings with no places is not the same as leaving them out, and it reads as 0, 0, which is a spot in the Atlantic that will happily report its weather.
📤 What you get back
A real current row from a recent run:
{
"ok": true,
"place": "Berlin",
"latitude": 52.52437,
"longitude": 13.41053,
"time": "2026-09-14T07:45",
"temperature": 14.9,
"apparentTemperature": 14,
"humidity": 88,
"precipitation": 0,
"windSpeed": 12.3,
"weatherCode": 3,
"weather": "Overcast",
"timezone": "Europe/Berlin"
}
| Mode | Fields |
|---|---|
current | place, latitude, longitude, time, temperature, apparentTemperature, humidity, precipitation, windSpeed, weatherCode, weather, timezone |
forecast | place, latitude, longitude, date, tempMax, tempMin, precipitationSum, windSpeedMax, weatherCode, weather |
geocode | place, name, latitude, longitude, country, admin1, timezone, population |
place is what you typed. In geocode mode, name is what Open-Meteo matched it to, and comparing the two is the quickest way to catch a wrong city.
weatherCode is the WMO number and weather is the short text for it, like Overcast or Slight rain. A code with no text mapping reads as Unknown rather than going blank.
🧾 Reading the output
Two kinds of row land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| A result | ok: true and a place or coordinates | yes |
| A diagnostic | ok: false and an errorCode | no |
| Code | What it means |
|---|---|
BAD_INPUT | No places and no coordinates, only one half of a coordinate pair, or a mode that is not one of the three. Also a date window with one date missing, a date that is not YYYY-MM-DD, a window that runs backwards or falls outside 1940-01-01 to 15 days ahead, or a window outside forecast mode. Nothing is fetched. |
NO_RESULTS | None of your place names resolved. The row lists the ones that failed. |
When some places resolve and others do not, the run keeps going. The ones that worked come back as rows and are charged; the ones that did not are named in the run log, not in the dataset. Compare your row count against the number of places you sent.
Coordinates outside the legal range can come back as a row with the weather fields empty rather than as an error, so keep latitude within 90 and longitude within 180.
A forecast day that comes back completely empty, often the 16th, is left out and not charged, so a 16-day forecast can return 15 rows for a place. In a date window, each row is also checked against the window by its own date.
▶️ How to run it
1. Open Weather Scraper and click Try for free. 2. Pick a Mode. Current weather is the default. 3. Type your cities into Places, or leave it empty and fill in Latitude and Longitude. 4. Set Forecast days if you chose the forecast, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.20 per 1,000 rows. Flat on every Apify plan, no volume tiers.
You pay per row delivered. In forecast mode a row is one day, so a 7-day forecast for 10 cities is 70 rows, and the whole of July for 3 cities is 93. In current and geocode mode a row is one place. Diagnostic rows and empty forecast days are not charged.
💡 What people use it for
- A morning run over a list of depots or sites, with the rows going straight into a sheet.
- Checking the 16-day outlook for a set of event locations before committing to a date.
- Resolving a column of city names to coordinates and timezones in geocode mode, then using those
coordinates everywhere else.
- Building a rain history by scheduling
currenthourly and keeping every row.
🚧 What it does not do
- No hourly data. Current conditions, or daily forecast rows. Nothing in between.
- Past days are estimates, not station readings. Open-Meteo's historical record rebuilds each day
from observations and weather models on a grid, so a row describes the area around your coordinates. Nothing before 1940-01-01.
- No unit choice. Celsius, kilometres per hour and millimetres, always.
- One coordinate pair per run. A list of exact points means a run each, or place names instead.
- Top match only when resolving a name, and no list of the alternatives it rejected.
- A forecast is a forecast. Day 14 is a model output, not a promise.
- No alerts, warnings, air quality or marine products, even though Open-Meteo publishes some of
those separately.
🧭 Which location scraper do you need?
| If you want | Use |
|---|---|
| Weather now, or a 16-day forecast | This one |
| Full details for a place: address, hours, phone, rating | Google Maps Scraper |
| Reviews for a place | Google Maps Reviews Scraper |
| Hotel prices and availability | Booking.com Hotels Scraper |
| Short-let listings and nightly prices | Airbnb Listings Scraper |
❓ Questions people ask
Do I need a weather API key? No. Nothing to apply for and no quota to watch.
How far ahead can it forecast? Sixteen days, set with forecastDays.
Can I get past weather? Yes: forecast mode with startDate and endDate, back to 1940-01-01, one row per day per place.
I asked for Springfield and got the wrong one. Add the country, like Springfield, US, or send the coordinates. The name lookup takes the top match and does not ask.
Can I get hourly readings? Not from this one. Run current on a schedule instead and keep the rows.
Can I schedule it? Yes, like any Apify actor. A saved list of places makes a daily run trivial.
Where does the data come from? Open-Meteo, for both the weather and the place lookup. Read their terms for attribution and fair use before building on it at volume.
🆘 If something breaks
Open the Issues tab on the actor page. Send the mode, the places or coordinates you used, and the run ID. The errorCode on the diagnostic row usually names the problem on its own.