Weather Forecast API - Worldwide, Any City or Coordinates
Pricing
from $1.46 / 1,000 forecast row returneds
Weather Forecast API - Worldwide, Any City or Coordinates
For travel apps, logistics, farming and dashboards: hourly weather forecasts for any city name or latitude/longitude on Earth, about 9 days ahead, with temperature in C and F, rain, wind, clouds, humidity and pressure. About 34,000 cities match by name. MET Norway data, CC BY 4.0. No API key.
Pricing
from $1.46 / 1,000 forecast row returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Hour-by-hour weather forecasts for any city name or any latitude/longitude on Earth, up to about 9 days ahead. No API key, no sign-up with a weather provider.
Give it "Tokyo", "Paris, FR", "Austin, TX" or "-33.8688,151.2093" and get one clean row per forecast time: temperature in °C and °F, precipitation, wind (m/s, km/h, mph and compass direction), cloud cover, humidity, sea-level pressure and a weather symbol.
The forecast comes from MET Norway (the Norwegian Meteorological Institute), whose public forecast API serves the whole globe and is free to reuse under CC BY 4.0. This Actor calls it the way MET Norway's terms ask (identified User-Agent, coordinates rounded to 4 decimals, cached answers reused until they expire, If-Modified-Since on refresh), and turns the nested GeoJSON into flat rows you can drop into a spreadsheet, database or dashboard.
What you get
One row per forecast time, per location:
| Field | Example | Notes |
|---|---|---|
query | Paris | What you typed |
matchedPlace | Paris, FR (most populous of 3 matching places) | Which place a city name was matched to. null for coordinates |
countryCode / country | FR / France | City inputs only |
latitude / longitude | 48.8534 / 2.3488 | The point that was forecast (4 decimals) |
elevationM | 42 | Height used for the forecast |
timezone | Europe/Paris | City inputs only |
timeUtc | 2026-09-18T14:00:00Z | Forecast time in UTC |
localTime | 2026-09-18T16:00 | Same time on the local clock (city inputs only) |
hoursToNextRow | 1 | 1 in the hourly part, 6 further out |
temperatureC / temperatureF | 21.9 / 71.4 | Air temperature at 2 m |
precipitationMmNext1h | 0 | Only in the hourly part; null (not 0) where MET Norway gives no 1-hour value |
precipitationMmNext6h | 1.2 | |
symbolNext1h / symbolNext6h / symbolNext12h | partlycloudy_day | MET Norway weather symbol codes |
windSpeedMs / windSpeedKmh / windSpeedMph | 4.5 / 16.2 / 10.1 | 10-minute mean at 10 m |
windFromDirectionDeg / windFromCompass | 279.6 / W | Direction the wind comes from |
cloudCoverPercent | 77.3 | |
relativeHumidityPercent | 45.9 | |
pressureHpaSeaLevel | 1023.3 | |
forecastUpdatedAt | 2026-09-18T13:16:43Z | When MET Norway last updated this forecast |
attribution / license | Data from MET Norway ... / CC BY 4.0 link | Keep these if you republish the data |
placeAttribution | City coordinates from GeoNames ... | City inputs only |
A real row (Sydney, run on 2026-09-18)
{"query": "-33.8688,151.2093","matchedPlace": null,"latitude": -33.8688,"longitude": 151.2093,"elevationM": 41,"timeUtc": "2026-09-18T14:00:00Z","hoursToNextRow": 1,"temperatureC": 16.5,"temperatureF": 61.7,"precipitationMmNext1h": 0,"precipitationMmNext6h": 0,"symbolNext1h": "partlycloudy_night","symbolNext6h": "partlycloudy_night","symbolNext12h": "fair_day","windSpeedMs": 4.5,"windSpeedKmh": 16.2,"windSpeedMph": 10.1,"windFromDirectionDeg": 279.6,"windFromCompass": "W","cloudCoverPercent": 77.3,"relativeHumidityPercent": 45.9,"pressureHpaSeaLevel": 1023.3,"forecastUpdatedAt": "2026-09-18T13:16:43Z","attribution": "Data from MET Norway (api.met.no), CC BY 4.0 - reformatted and unit-converted by this Actor","license": "https://creativecommons.org/licenses/by/4.0/"}
How far ahead, and how many rows
MET Norway publishes about 9 days per point: hourly for about the first 2.5 days, then every 6 hours. In our test runs on 2026-09-18 that was 91-92 time steps per location. Northern Europe gets a higher-resolution model; the rest of the world uses the ECMWF global model (about 9 km).
Want less? Set Hours ahead (maxHoursAhead), e.g. 24 returns the current hour plus the next 24 (25 rows per location).
Input
| Field | What it does |
|---|---|
cities | City names, one per line ("Paris, FR", "Austin, TX", "Tokyo") |
locations | Coordinates: "lat,lon" strings or { "latitude", "longitude", "label", "altitude" } objects |
maxHoursAhead | Optional. Only forecast times up to this many hours from now |
useCache | Reuse a still-valid forecast (default on, see Caching below) |
maxRetries | Attempts per location on temporary errors (default 3) |
{"cities": ["London, GB", "Tokyo", "Austin, TX"],"locations": ["-33.8688,151.2093", { "latitude": 64.1466, "longitude": -21.9426, "label": "Reykjavik harbour", "altitude": 10 }],"maxHoursAhead": 48}
- Cities are matched against a bundled copy of the GeoNames list of about 34,000 cities with 15,000+ people or national capitals. Accents and case do not matter (
sao paulo=São Paulo), and many English and local names work (Munich=München,Kiev=Kyiv). A city whose own name matches always wins over a city that only has it as an alternate name; alternate-name matches say so inmatchedPlace.- Several places share a name? Without a country, the most populous one is used and
matchedPlacesays how many there were. Add a 2-letter country code ("Paris, US") or, for the US, a state code ("Paris, TX"). - Two-letter codes are read as a country code and as a US state code, so a few overlap (
CA= Canada or California,IN= India or Indiana). If both match, the most populous place wins andmatchedPlaceshows which one; add a second code to narrow it ("Ontario, CA, US"= Ontario, California) or use coordinates. - A name that is not in the list, or a country that does not have that name, is not silently replaced by another place: it is skipped and explained (see below).
- Several places share a name? Without a country, the most populous one is used and
- Coordinates work anywhere, including the ocean. Optional
altitude(meters) improves temperature in hilly terrain; for cities the GeoNames elevation is sent automatically. - The same point asked twice (e.g. a city and its own coordinates rounded to 4 decimals) is fetched and billed once.
- Leave everything empty and you get London, Tokyo and New York as an example.
When something cannot be answered
Inputs that cannot be used are never turned into empty or made-up rows. They are listed, with the reason, in the run log and in the RUN_ISSUES record of the run's key-value store, and they are not billed. For example:
"Xyzzy": No city named "Xyzzy" in the bundled GeoNames list ... Use coordinates for smaller places."Paris, DE": "Paris" exists in the bundled list, but not in "DE". Places with that name are in: FR, US-TX, ZA.- MET Norway refusing a point or throttling (HTTP 429) after the retries: the HTTP status and message.
- If 5 locations in a row fail with temporary MET Norway errors (5xx, 429, timeouts), the remaining locations are not requested and are listed with that reason instead of waiting for hours.
- An empty or non-text entry in
citiesis listed as Not a city name (the London/Tokyo/New York example is only used when bothcitiesandlocationsare left empty).
If every input fails, the run returns 0 rows and its status message says why.
Caching (why a second run can be instant)
MET Norway's terms ask API users not to re-download a forecast before its Expires time and to refresh with If-Modified-Since. With Reuse a still-valid forecast on (default), the Actor keeps the last answer per point in a named key-value store in your own Apify account, weather-forecast-worldwide-cache, and:
- before
Expires: reuses it without calling MET Norway; - after
Expires: asks MET Norway withIf-Modified-Since;304 Not Modifiedmeans the stored forecast is still the current one.
Either way the rows are the forecast MET Norway is serving at that moment, and they are billed like any other row. Turn it off to always fetch; you can delete the store at any time.
Pricing
Pay per result: one row = one forecast time for one location. Nothing is charged for inputs that could not be used. With no maxHoursAhead, one location is typically about 90 rows. If you set a maximum charge for a run and it is reached, the Actor stops fetching, keeps the rows already delivered, and says in the log and status that the result is incomplete.
Data sources and license
- Forecasts: MET Norway Locationforecast 2.0, licensed under CC BY 4.0 and the Norwegian Licence for Open Government Data (NLOD) 2.0. This Actor flattens the data and adds unit conversions (°F, km/h, mph, compass direction, local time). If you publish the data, credit "Data from MET Norway" as the
attributioncolumn says. - City names and coordinates: GeoNames
cities15000, licensed under CC BY 4.0. - This Actor is an independent tool. It is not made or endorsed by MET Norway, Yr or NRK.
Also from NeverEmpty
- Weather Forecast API - NWS (US only): the National Weather Service's own day/night and hourly forecasts with its text descriptions.