Weather Forecast API - Worldwide, Any City or Coordinates avatar

Weather Forecast API - Worldwide, Any City or Coordinates

Pricing

from $1.46 / 1,000 forecast row returneds

Go to Apify Store
Weather Forecast API - Worldwide, Any City or Coordinates

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

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

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:

FieldExampleNotes
queryParisWhat you typed
matchedPlaceParis, FR (most populous of 3 matching places)Which place a city name was matched to. null for coordinates
countryCode / countryFR / FranceCity inputs only
latitude / longitude48.8534 / 2.3488The point that was forecast (4 decimals)
elevationM42Height used for the forecast
timezoneEurope/ParisCity inputs only
timeUtc2026-09-18T14:00:00ZForecast time in UTC
localTime2026-09-18T16:00Same time on the local clock (city inputs only)
hoursToNextRow11 in the hourly part, 6 further out
temperatureC / temperatureF21.9 / 71.4Air temperature at 2 m
precipitationMmNext1h0Only in the hourly part; null (not 0) where MET Norway gives no 1-hour value
precipitationMmNext6h1.2
symbolNext1h / symbolNext6h / symbolNext12hpartlycloudy_dayMET Norway weather symbol codes
windSpeedMs / windSpeedKmh / windSpeedMph4.5 / 16.2 / 10.110-minute mean at 10 m
windFromDirectionDeg / windFromCompass279.6 / WDirection the wind comes from
cloudCoverPercent77.3
relativeHumidityPercent45.9
pressureHpaSeaLevel1023.3
forecastUpdatedAt2026-09-18T13:16:43ZWhen MET Norway last updated this forecast
attribution / licenseData from MET Norway ... / CC BY 4.0 linkKeep these if you republish the data
placeAttributionCity 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

FieldWhat it does
citiesCity names, one per line ("Paris, FR", "Austin, TX", "Tokyo")
locationsCoordinates: "lat,lon" strings or { "latitude", "longitude", "label", "altitude" } objects
maxHoursAheadOptional. Only forecast times up to this many hours from now
useCacheReuse a still-valid forecast (default on, see Caching below)
maxRetriesAttempts 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 in matchedPlace.
    • Several places share a name? Without a country, the most populous one is used and matchedPlace says 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 and matchedPlace shows 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).
  • 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 cities is listed as Not a city name (the London/Tokyo/New York example is only used when both cities and locations are 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 with If-Modified-Since; 304 Not Modified means 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 attribution column 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