Bosco Labs

Tools › Macro, health & places

Weather Forecast API: hourly + daily by city or lat/lon

On Apify Store

Weather 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.

Price$0.0015 per location forecast
DomainMacro, health & places
Get it onApify Store

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.

ChannelHowPay
Apify Storeapify.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

FieldTypeMeaning
schema_versionstringOutput schema version.
inputstringThe location as given.
resolvedbooleantrue = a forecast was returned; only these rows are charged.
statusstringok: 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.
namestring | nullMatched place as 'name, region, country code', e.g. 'Rotterdam, South Holland, NL'; null for coordinate input.
country_codestring | nullISO 3166-1 alpha-2 country of the matched place; null for coordinate input.
latitudenumber | nullLatitude used, decimal degrees, rounded to 4 decimals.
longitudenumber | nullLongitude used, decimal degrees, rounded to 4 decimals.
elevation_mnumber | nullGround height used for the temperature, metres above sea level (MET Norway's, or the place's from GeoNames).
timezonestring | nullIANA timezone of the output times and daily summaries.
updated_atstring | nullWhen MET Norway's forecast model data were last updated (ISO 8601, UTC).
fetched_atstring | nullWhen 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.
hoursintegerHours ahead covered (the input hours); 0 when not resolved.
unitsobjectUnit of each value field in timeseries and daily.
timeseriesarrayForecast steps in time order: the next 12 hourly steps when summary=true, every step within hours when false. Empty when not resolved.
dailyarrayOne summary per local calendar day within hours, derived from the steps. Empty when not resolved.
warningsarrayPlain-language notes: ambiguous place names (with alternatives), UTC default for coordinates, why a location failed.
source_urlstring | nullThe MET Norway Locationforecast request the forecast comes from; null when not resolved.
provided_bystringWho compiled this row; cite together with source_url.
place_source_urlstring | nullGeoNames record of the matched place; null for coordinate input.
attributionstringRequired credit: 'Data from MET Norway (CC BY 4.0)'.
attribution_detailsstringLicence link, the note that daily values are derived (not MET Norway's responsibility), and GeoNames credit when a place name was used.
retrieved_atstringWhen 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

FieldTypeMeaning
locationsarray (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.
hoursintegerHow 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.
timezonestringIANA 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.
summarybooleantrue (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_url is the exact MET request; place_source_url is 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_speed is 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_error and 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.