Weather Forecast API: hourly + daily by city or lat/lon
On Apify StoreWeather forecasts for place names or coordinates, up to 10 days ahead: hourly temperature, precipitation, wind speed, direction and gusts, cloud cover, humidity and pressure, plus a daily summary in local time. The data come from MET Norway, the Norwegian national weather service (the forecasts behind yr.no), which covers the whole world. Built for AI agents planning travel, logistics, events, farming or energy work, and for people who need a clean forecast table.
Pricing (pay per event): $0.0015 per location forecast. Unknown places and invalid coordinates are returned too, free of charge.
Where to get it
The same data and the same rows on every channel; pick the one your agent or code already uses.
| Channel | How | Pay |
|---|---|---|
| Apify Store | apify.com/bosco_labs/weather-forecast: run it in the Apify Console, by the Apify API or from Apify's MCP server (https://mcp.apify.com?tools=bosco_labs/weather-forecast) | $0.0015 per location forecast, billed to your Apify account |
Questions agents ask
- “Will it rain in Amsterdam tomorrow afternoon?”
- “Wind speed forecast for these 5 wind farm coordinates, next 48 hours.”
Example
Input
{ "locations": ["Rotterdam", "Paris, FR", "Portland, Oregon", "52.3676,4.9041"], "hours": 48 }Output
{
"schema_version": "1",
"input": "Amsterdam",
"resolved": true,
"status": "ok",
"name": "Amsterdam, North Holland, NL",
"country_code": "NL",
"latitude": 52.374,
"longitude": 4.8897,
"elevation_m": 13,
"timezone": "Europe/Amsterdam",
"updated_at": "2026-11-05T19:17:13Z",
"fetched_at": "2026-11-05T23:13:00+00:00",
"hours": 48,
"units": {"temperature": "celsius", "precipitation": "mm", "precipitation_probability": "%", "wind_speed": "m/s", "wind_gust": "m/s", "wind_direction": "degrees, direction the wind comes from (0 = north, 90 = east)", "cloud_cover": "%", "humidity": "%", "pressure": "hPa (at sea level)"},
"timeseries": [
{"time": "2026-11-06T00:00:00+01:00", "period_hours": 1, "temperature": 4.7, "temperature_min": null, "temperature_max": null, "precipitation": 0.0, "precipitation_probability": null, "wind_speed": 4.0, "wind_gust": null, "wind_direction": 83.7, "cloud_cover": 0.0, "humidity": 92.8, "pressure": 1026.3, "symbol_code": "clearsky_night"},
{"time": "2026-11-06T01:00:00+01:00", "period_hours": 1, "temperature": 4.4, "temperature_min": null, "temperature_max": null, "precipitation": 0.0, "precipitation_probability": null, "wind_speed": 3.9, "wind_gust": null, "wind_direction": 78.0, "cloud_cover": 0.0, "humidity": 93.8, "pressure": 1026.2, "symbol_code": "clearsky_night"}
],
"daily": [
{"date": "2026-11-06", "hours_covered": 24, "temperature_min": 2.6, "temperature_max": 8.3, "precipitation": 0.0, "wind_speed_max": 4.4, "wind_gust_max": null, "symbol_code": "clearsky"},
{"date": "2026-11-07", "hours_covered": 24, "temperature_min": 0.7, "temperature_max": 6.6, "precipitation": 0.3, "wind_speed_max": 3.0, "wind_gust_max": null, "symbol_code": "fog"}
],
"warnings": [],
"source_url": "https://api.met.no/weatherapi/locationforecast/2.0/complete?lat=52.374&lon=4.8897&altitude=13",
"place_source_url": "https://www.geonames.org/2759794",
"attribution": "Data from MET Norway (CC BY 4.0)",
"attribution_details": "Forecast by MET Norway (api.met.no), CC BY 4.0, https://creativecommons.org/licenses/by/4.0/. Daily values and local times are derived by Bosco Labs from MET Norway's forecast; they are not the responsibility of MET Norway. Place name and coordinates from GeoNames (geonames.org), CC BY 4.0.",
"retrieved_at": "2026-11-05T23:13:00+00:00"
}What you get
| Field | Type | Meaning |
|---|---|---|
schema_version | string | Output schema version. |
input | string | The location as given. |
resolved | boolean | true = a forecast was returned; only these rows are charged. |
status | string | ok: forecast returned; not_found: place name not in the built-in list (give 'lat,lon'); invalid_input: coordinates out of range; source_error: MET Norway did not answer. |
name | string | null | Matched place as 'name, region, country code', e.g. 'Rotterdam, South Holland, NL'; null for coordinate input. |
country_code | string | null | ISO 3166-1 alpha-2 country of the matched place; null for coordinate input. |
latitude | number | null | Latitude used, decimal degrees, rounded to 4 decimals. |
longitude | number | null | Longitude used, decimal degrees, rounded to 4 decimals. |
elevation_m | number | null | Ground height used for the temperature, metres above sea level (MET Norway's, or the place's from GeoNames). |
timezone | string | null | IANA timezone of the output times and daily summaries. |
updated_at | string | null | When MET Norway's forecast model data were last updated (ISO 8601, UTC). |
fetched_at | string | null | When this forecast was fetched from MET Norway (ISO 8601, UTC); may be earlier than the run, because MET's terms require reusing a response until it expires. |
hours | integer | Hours ahead covered (the input hours); 0 when not resolved. |
units | object | Unit of each value field in timeseries and daily. |
timeseries | array | Forecast steps in time order: the next 12 hourly steps when summary=true, every step within hours when false. Empty when not resolved. |
daily | array | One summary per local calendar day within hours, derived from the steps. Empty when not resolved. |
warnings | array | Plain-language notes: ambiguous place names (with alternatives), UTC default for coordinates, why a location failed. |
source_url | string | null | The MET Norway Locationforecast request the forecast comes from; null when not resolved. |
provided_by | string | Who compiled this row; cite together with source_url. |
place_source_url | string | null | GeoNames record of the matched place; null for coordinate input. |
attribution | string | Required credit: 'Data from MET Norway (CC BY 4.0)'. |
attribution_details | string | Licence link, the note that daily values are derived (not MET Norway's responsibility), and GeoNames credit when a place name was used. |
retrieved_at | string | When the row was made (ISO 8601, UTC). |
Use with AI agents (MCP)
Add this URL to your MCP client (Claude, Cursor, VS Code, ...) to load the Actor as a tool through the Apify hosted MCP server. It signs you in with OAuth or accepts Authorization: Bearer <APIFY_TOKEN>.
https://mcp.apify.com?tools=bosco_labs/weather-forecast
For “Will it rain in Amsterdam tomorrow afternoon?” the agent passes:
{ "locations": ["Amsterdam"], "hours": 48, "summary": false }
Or call the Apify API: POST https://api.apify.com/v2/acts/bosco_labs~weather-forecast/run-sync-get-dataset-items with the input as JSON body. Cost: $0.0015 per location forecast.
Input fields
| Field | Type | Meaning |
|---|---|---|
locations | array (required) | Places to forecast, one per line: a town or city name, optionally with a country or region after a comma ("Amsterdam", "Paris, FR", "Portland, Oregon"), or coordinates as "lat,lon" in decimal degrees, latitude first ("52.3676,4.9041"; rounded to 4 decimals). Place names come from a built-in list of towns of 15,000+ people and capitals; for anything else (a farm, a venue, a wind turbine) give coordinates. Up to 50; repeats are forecast once. One output row per location. Required. |
hours | integer | How far ahead to forecast, counted from the current hour, e.g. 48 for today and tomorrow. Max 240 (10 days; MET Norway's forecast ends after about 9.5). Steps are hourly for the first ~2.5 days, then every 6 hours. Default (or empty) = 48. |
timezone | string | IANA timezone for output times and daily summaries, e.g. "Europe/Amsterdam", "America/New_York", "UTC". Empty (default) = the place's own timezone for place names, UTC for coordinates. |
summary | boolean | true (default) = a daily summary for every day in hours plus only the next 12 hourly steps (about 7 KB per location). false = the daily summary plus every forecast step in hours (about 18 KB per location for 48 hours, 33 KB for 240). The price is the same. |
Sources, licence and limits
Where does the data come from?
- Forecast: MET Norway's Locationforecast 2.0 (api.met.no). Outside the Nordic region it is based on the ECMWF global model. In the Nordic region MET uses its own high-resolution model, post-processed with local observations.
- Place names: GeoNames.
- Sources per row:
source_urlis the exact MET request;place_source_urlis the GeoNames record.
How fresh is it? MET Norway updates Nordic forecasts every hour and the rest of the world every 6 hours. Their terms forbid asking for the same point again within 30 minutes (Nordic) or 3 hours (elsewhere), and before the response's Expires time. So this Actor keeps each forecast in a key-value store named weather-forecast-cache in your Apify account, and serves it from there until it may be refreshed. fetched_at shows when it was fetched.
What is not included?
- Past weather or observations; only current forecasts.
- Weather warnings and alerts.
- Air quality, marine and aviation (above-ground) forecasts.
- Wind at hub height.
wind_speedis at 10 m above ground; for turbines, scale it up yourself. - Gusts and precipitation probability outside the Nordic region.
- Forecasts beyond about 9.5 days. MET's forecast ends there, even with
hours: 240.
Why is the daily precipitation off by a little at midnight? After the first ~2.5 days, steps are 6 hours long. A 6-hour period counts toward the local day it starts in, so in timezones that are not a multiple of 6 hours from UTC some rain can land on the neighbouring day.
My town isn't found. The built-in list holds places with 15,000+ people and capitals. Give the coordinates instead ("lat,lon"). Unknown places are free.
Limits?
- 50 locations per run.
- MET Norway is a free public service without an SLA. If it does not answer, the row is marked
source_errorand not charged. If a recent cached forecast exists (under 12 hours old), it is served with a warning instead.
Licence and attribution.
- Forecast: "Data from MET Norway", CC BY 4.0. Daily summaries and local times are derived by Bosco Labs and are not MET Norway's responsibility.
- Place names: GeoNames, CC BY 4.0.
If you republish the data, keep the attribution field. This Actor is not made or endorsed by MET Norway or Yr. See LEGAL.md.