How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
[{"name": "New York", "lat": 40.7128, "lon": -74.006}…in Locations. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Get hourly or daily weather forecasts for up to 10 coordinates in one table: US points come from the US National Weather Service (NWS), all other points from MET Norway, and active NWS weather alerts for US points come as separate rows. No API key or login.
- chooses one provider: NWS (api.weather.gov) for the United States and its territories, MET Norway Locationforecast 2.0 (api.met.no) for the rest of the world;
- returns hourly rows (1–48 hours) or daily rows (1–7 days) in metric or imperial units;
- for US points, returns each active NWS alert (for example a Flood Warning) as a separate row.
Good for
- A dashboard or report that needs the next 24–48 hours for several sites.
- A travel or event plan: daily min/max temperature, rain and wind for 7 days.
- A US operations check: “is there an active NWS warning at this site right now?”
- An AI agent that needs a small, typed forecast table for a few coordinates.
Not a good fit
- No current conditions, observations or historical weather.
- Not more than 10 locations per run and 48 hours / 7 days ahead.
- Alerts only for US points (NWS). For other points
alertsStatusisnot_available. - This is not an emergency warning service. Always follow official local warnings.
Who uses it
Operations teams
Check if a US site has an active weather warning.
Travel and event planners
See 7 days of rain, wind and temperature for each stop.
AI agent builders
Give an agent a small, clear forecast table.
Price
Prices will be shown after release.
Questions
Do I need an API key?
No. Both sources are free public APIs without a key.
Can I get alerts outside the US?
No. Alerts come only from NWS, for US points.
Can I get past weather?
No. It gives forecasts only, not past or current conditions.
How many places can I add?
Up to 10 places per run.
Does the Actor store anything in my account between runs?
Yes, when useCache is on: a named key-value store weather-forecast-alerts-cache keeps provider answers so repeat runs make fewer requests. Old entries are not used after 2 days. You can delete this store at any time, or set useCache: false.
How fresh is the data?
Every row has sourceUpdatedAt (when the provider updated the forecast) and fetchedAt. With useCache: true the Actor reuses a provider answer only until the provider's own expiry time. Alerts are always requested fresh.
Why do two locations have different models?
US points use NWS and other points use MET Norway. The provider and model fields tell you which one. One location never mixes models.
Is this an official warning service?
No. Alert rows copy active NWS alerts for information. They can be late or missing. Always follow official local warnings.
Details
Step by step on Apify
- Open the Input tab. The form already has New York, London and Tokyo.
- Keep Hourly, 24 hours and Include NWS alerts.
- Click Start.
- Open the Forecast table view of the Dataset. You get 72 forecast rows: 24 hours × 3 locations (plus alert rows if New York has active alerts). New York rows say
provider: "nws", London and Tokyo rows sayprovider: "met-norway".
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Next-day weather for several offices | locations, granularity: hourly, hours: 24 | hourly forecast row | forecastTimeLocal, temperature, precipitationAmount, windSpeed | Google Sheets, BI dashboard |
| 7-day plan for travel stops | granularity: daily, days: 7 | daily forecast row | date, temperatureMin, temperatureMax, summary | travel itinerary, email |
| Warning check for US sites | US locations, includeAlerts: true | alert row | event, severity, urgency, expires, areaDesc | Slack or email via webhook |
| Forecast table for an AI agent | 1–3 locations | forecast row | provider, model, units, forecastTimeUtc | MCP tool call |
Tips for better results
- Choose hourly for up to 48 hours or daily for up to 7 days.
- Turn off the cache if you do not want a store in your account.
- Check the provider column. US and non-US places use different models.
Limits and good to know
- 1–10 locations per run; hourly 1–48 hours, daily 1–7 days
- Tested: 10 locations × 48 hours (480 rows) in about 8 seconds with 256 MB
- Source requests stop after 240 seconds, so a run fits in the default 300-second timeout
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"rowType": "forecast",
"locationName": "New York",
"latitude": 40.7128,
"longitude": -74.006,
"provider": "nws",
"model": "NWS gridpoint forecast OKX/33,42",
"timeZone": "America/New_York",
"granularity": "hourly",
"date": "2026-10-12",
"forecastTimeUtc": "2026-10-12T12:00:00Z",
"forecastTimeLocal": "2026-10-12T08:00:00-04:00",
"periodEndUtc": "2026-10-12T13:00:00Z",
"summary": "Mostly Cloudy",
"symbolCode": null,
"temperature": 16.1,
"apparentTemperature": 16.1,
"dewPoint": 13.9,
"relativeHumidity": 87,
"precipitationAmount": 0,
"precipitationPeriodStartUtc": "2026-10-12T12:00:00Z",
"precipitationPeriodEndUtc": "2026-10-12T18:00:00Z",
"precipitationProbability": 3,
"windSpeed": 24.1,
"windGust": 31.5,
"windDirection": 10,
"windDirectionCardinal": "N",
"cloudCover": 72,
"coverageHours": 1,
"alertsStatus": "checked",
"activeAlertCount": 0,
"units": { "temperature": "°C", "precipitation": "mm", "windSpeed": "km/h", "cloudCover": "%", "relativeHumidity": "%", "precipitationProbability": "%", "windDirection": "degrees (from)" },
"sourceUpdatedAt": "2026-10-12T10:26:40+00:00",
"fetchedAt": "2026-10-12T12:03:30.873Z",
"sourceUrl": "https://api.weather.gov/gridpoints/OKX/33,42",
"attribution": "Forecast and alerts: US National Weather Service (weather.gov). Units converted and daily values aggregated by this Actor; not an official NWS product."
}Data fields (40)
| Field | Type | Meaning |
|---|---|---|
rowType | string | forecast, alert or location_error. |
locationName | string | Your label for the location. |
latitude | number | Latitude used for the request (4 decimals). |
longitude | number | Longitude used for the request (4 decimals). |
provider | string | nws or met-norway; null when no provider answered. |
model | string | Provider product, e.g. "NWS gridpoint forecast OKX/33,42" (office/x,y) or the MET Norway Locationforecast product. |
granularity | string | hourly or daily. |
date | string | Local calendar date of the forecast time. Daily output starts today when at least 6 forecast hours of today remain, otherwise tomorrow. |
timeZone | string | IANA time zone used for local times. |
forecastTimeUtc | string | Start of the forecast hour (or first step of the day), UTC. |
forecastTimeLocal | string | Same instant in local time with UTC offset. |
periodEndUtc | string | End of the hour or day covered by the row, UTC. |
summary | string | Short text: NWS forecast wording or MET Norway symbol in words. For MET Norway daily rows it describes the weather around midday, not the whole day. |
symbolCode | string | MET Norway symbol code (null for NWS). For daily rows: the symbol around midday. |
temperature | number | Air temperature at the hour (hourly). |
temperatureMin | number | Daily minimum temperature (daily). |
temperatureMax | number | Daily maximum temperature (daily). |
apparentTemperature | number | Feels-like temperature from the provider (null when it does not give one, and on daily rows). |
dewPoint | number | Dew point. |
relativeHumidity | number | Relative humidity, % (daily: time-weighted mean). |
precipitationAmount | number | Precipitation amount for the provider period in precipitationPeriodStartUtc–EndUtc. On hourly rows this period can be longer than the hour (NWS gives 6-hour totals), so do not sum hourly rows; daily rows give the day total. null = not forecast, not zero. |
precipitationPeriodStartUtc | string | Start of the provider precipitation period (hourly rows). |
precipitationPeriodEndUtc | string | End of the provider precipitation period (hourly rows). |
precipitationProbability | number | Probability of precipitation, % (null when the provider does not give it). |
windSpeed | number | Wind speed (daily: max). |
windGust | number | Wind gust (null when the provider does not give it). |
windDirection | number | Direction the wind blows from, degrees. |
windDirectionCardinal | string | Compass point (N, NNE, …). |
cloudCover | number | Cloud cover, % (daily: time-weighted mean). |
detailedForecast | string | NWS day and night text forecast (daily NWS rows). |
coverageHours | number | Forecast hours that went into the row (1 for hourly). Daily MET Norway rows far ahead are built from 6-hour steps and can show less than 24 for a full day. |
activeAlertCount | number | Active NWS alerts at the point when alerts were checked, else null. |
alertsStatus | string | checked, not_requested, not_available (outside NWS) or error. |
units | object | Unit labels by quantity: temperature also applies to temperatureMin/Max, apparentTemperature and dewPoint; windSpeed also applies to windGust; precipitation to precipitationAmount. null on alert and error rows. |
sourceUpdatedAt | string | When the provider last updated the forecast (for alert rows: when the alert was sent). |
fetchedAt | string | When this run received the data (cached responses keep their original time). |
sourceUrl | string | Provider URL the data came from. |
attribution | string | Required source credit. |
alertId | string | NWS alert id. |
event | string | Alert event, e.g. Flood Warning. |
Input settings (8)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Locations required | locations | array | [{"name": "New York", "lat": 40.7128, "lon": -74.006}, {"name": "London", "lat": 51.507… |
| Forecast provider | provider | string | "auto" |
| Granularity | granularity | string | "hourly" |
| Hours (hourly mode) | hours | integer | 24 |
| Days (daily mode) | days | integer | 7 |
| Include NWS weather alerts (US only) | includeAlerts | boolean | true |
| Units | units | string | "metric" |
| Reuse fresh provider responses | useCache | boolean | true |

