Aviation Weather API — METAR & TAF Reports and Watch (NOAA AWC) avatar

Aviation Weather API — METAR & TAF Reports and Watch (NOAA AWC)

Pricing

from $1.00 / 1,000 report returneds

Go to Apify Store
Aviation Weather API — METAR & TAF Reports and Watch (NOAA AWC)

Aviation Weather API — METAR & TAF Reports and Watch (NOAA AWC)

METAR and TAF reports for any airport by ICAO code from the Aviation Weather Center Data API, or only new ones: raw text, flight category, wind, clouds; failed or unchanged rows are never charged. Not affiliated with or endorsed by NOAA, the National Weather Service or the Aviation Weather Center.

Pricing

from $1.00 / 1,000 report returneds

Rating

0.0

(0)

Developer

COMPASS DEV

COMPASS DEV

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Returns the latest METAR and TAF aviation weather reports for any airport by ICAO code from the Aviation Weather Center's public Data API, or in watch mode only the new reports since your last run; failed or unchanged rows are never charged.

Give ICAO station codes (KJFK, EGLL, LFPG, RJTT …); get one flat row per station and report type: the coded report as published, the station's name and position, and the source's own decoded fields: the flight category (VFR, MVFR, IFR, LIFR), wind, gusts, visibility, clouds, weather, temperature, dew point and altimeter for a METAR, and the validity period and forecast groups for a TAF. Built for flight-ops dashboards, drone and charter operators, airport and logistics tools, travel apps and AI agents that need airport weather without polling a website. Not affiliated with or endorsed by NOAA, the National Weather Service or the Aviation Weather Center.

Not an official weather briefing. These are the published reports as data, for information. For flight planning and operations, use an official briefing service and the authorities' own products.

What it does

  • Export mode: the latest METAR (observation) and TAF (forecast) of every station you give, one row each. METARs are usually issued every hour (and as SPECIs when the weather changes); TAFs about every 6 hours.
  • Watch mode (give a watch list name in stateName): remembers each station's latest report and returns only:
    • baseline: the first run of the list;
    • new: a station added to the list;
    • changed: a newer or corrected report (changedFields and previousValues say what and from what, for example the previous flight category);
    • unchanged reports are free and left out (includeUnchanged: true returns them as free rows).
    • A watch run with nothing new returns exactly one free no_data row that says so.
  • Flight category alerts: with onlyCategoryChanges: true, a watch run (after its baseline) returns only the METARs whose flight category changed, for example from VFR to IFR. Every other new report is left out, free.
  • Worldwide stations, as the Aviation Weather Center publishes them: up to 400 stations a run, 100 per request.
  • You are never charged for failed results: failed, no_data and unchanged rows are free.

Quick start

The latest METAR and TAF of New York JFK and London Heathrow:

{ "stations": ["KJFK", "EGLL"] }

Watch three airports for new reports (the first run is the baseline; run it every 30 or 60 minutes with an Apify schedule):

{ "stations": ["KJFK", "KBOS", "KDCA"], "stateName": "east-coast" }

Alert only when a flight category changes (VFR, MVFR, IFR, LIFR):

{ "stations": ["KSFO", "KOAK", "KSJC"], "reportTypes": ["metar"], "stateName": "bay-area", "onlyCategoryChanges": true }

Input

FieldTypeDefaultDescription
stationslist of ICAO codes— (prefilled KJFK, EGLL)Four letters or digits each; at most 400 a run. Never a URL
reportTypeslist of metar, taf["metar","taf"]The latest observation and the latest forecast of each station
onlyCategoryChangesbooleanfalseWatch: after the baseline, only METARs whose flight category changed
modewatch or export—Empty: watch when stateName is given, otherwise export. An explicit mode wins
stateNamestring— (prefilled aviation-weather)Watch list name. Watch mode without a name uses the list default
includeUnchangedbooleanfalseWatch: also return unchanged reports (free)
maxItemsinteger 1–100,0001000Most charged reports per run; in watch mode the rest come in the next run

Adding or removing stations keeps a watch list as it is (a new station gets a new row); changing reportTypes starts a new baseline.

Output

{
"status": "ok",
"attempts": 1,
"error": null,
"input": "KJFK",
"mode": "export",
"watchList": null,
"dropReason": null,
"reportType": "metar",
"stationId": "KJFK",
"stationName": "New York/JF Kennedy Intl, NY, US",
"latitude": 40.6392,
"longitude": -73.7639,
"elevationM": 3,
"rawText": "METAR KJFK 050651Z 32007KT 10SM BKN037 OVC050 14/12 A3002 RMK AO2 SLP165 T01390122 $",
"observedAt": "2026-10-05T06:51:00.000Z",
"issuedAt": null,
"validFrom": null,
"validTo": null,
"flightCategory": "VFR",
"metarType": "METAR",
"temperatureC": 13.9,
"dewpointC": 12.2,
"windDirection": "320",
"windSpeedKt": 7,
"windGustKt": null,
"visibility": "10+",
"altimeterHpa": 1016.7,
"weather": null,
"cloudCover": "OVC",
"clouds": "BKN 3700 | OVC 5000",
"verticalVisibilityFt": null,
"forecastPeriods": null,
"changeType": null,
"changedFields": null,
"previousValues": null,
"url": "https://aviationweather.gov/api/data/metar?ids=KJFK&format=json",
"source": "Aviation Weather Center Data API (NOAA National Weather Service). U.S. Government work, not subject to copyright (17 U.S.C. § 403 notice).",
"license": "U.S. Government work (NOAA/NWS), public domain",
"licenseUrl": "https://www.weather.gov/disclaimer",
"scrapedAt": "2026-10-05T07:10:00.000Z"
}
StatusMeaningCharged?
okA report returnedExport: yes. Watch: baseline, new and changed yes; unchanged no
no_dataNo report of that type for the station right now, or nothing new since the last runNo
failedAn invalid station code, or no answer after retries (error says why)No

The key-value store holds RUN_REPORT (counts, charged and free rows, stop reason) and, when something fails, the raw response (SNAPSHOT_*).

Output fields

Output fields

FieldTypeDescription
statusstring (or null)ok = report returned (charged in export mode and for baseline, new and changed rows; free when unchanged); no_data = nothing to return (no report for the station, or nothing new since the last run) (free); failed = invalid input or no answer (free)
attemptsinteger (or null)Requests made for this row (retries included)
errorstring (or null)Why a row is no_data or failed; null on ok rows
inputstring (or null)The station code this row came from, or the input that failed
modestring (or null)watch or export
watchListstring (or null)Watch list name (watch mode); null in export mode
dropReasonstring (or null)Always null: stations and coded reports name no one, so nothing is left out for people
reportTypestring (or null)metar (observation) or taf (terminal aerodrome forecast)
stationIdstring (or null)ICAO station code
stationNamestring (or null)The station's name as the Aviation Weather Center gives it
latitudenumber (or null)Station latitude (degrees)
longitudenumber (or null)Station longitude (degrees)
elevationMnumber (or null)Station elevation in metres
rawTextstring (or null)The report as published, unmodified (the coded METAR or TAF)
observedAtstring (or null)METAR: observation time (ISO 8601, UTC)
issuedAtstring (or null)TAF: issue time (ISO 8601, UTC)
validFromstring (or null)TAF: start of the forecast period (ISO 8601, UTC)
validTostring (or null)TAF: end of the forecast period (ISO 8601, UTC)
flightCategorystring (or null)METAR: the source's flight category (VFR, MVFR, IFR, LIFR)
metarTypestring (or null)METAR (routine) or SPECI (special)
temperatureCnumber (or null)METAR: air temperature in degrees Celsius
dewpointCnumber (or null)METAR: dew point in degrees Celsius
windDirectionstring (or null)METAR: degrees true as text, or VRB (variable)
windSpeedKtnumber (or null)METAR: wind speed in knots
windGustKtnumber (or null)METAR: gust speed in knots
visibilitystring (or null)METAR: visibility in statute miles as the source gives it ("10+" means 10 or more)
altimeterHpanumber (or null)METAR: altimeter setting in hectopascals
weatherstring (or null)METAR: present weather codes (e.g. -RA BR)
cloudCoverstring (or null)METAR: the source's overall cover (SKC, FEW, SCT, BKN, OVC …)
cloudsstring (or null)METAR: cloud layers as "
verticalVisibilityFtnumber (or null)METAR: vertical visibility in feet (an obscured sky)
forecastPeriodsinteger (or null)TAF: the number of forecast groups (FM, TEMPO, PROB …)
changeTypestring (or null)Watch mode: baseline (first run of the list), new (a station added), changed (a newer or corrected report) or unchanged; null in export mode
changedFieldsstring (or null)Watch mode: the tracked fields that changed, comma-separated
previousValuesstring (or null)Watch mode: the changed fields' previous values, as JSON (e.g. the previous flight category)
urlstring (or null)The documented Data API request for this station and report type
sourcestring (or null)The data source and its copyright notice
licensestring (or null)The terms of the data
licenseUrlstring (or null)Where the terms are published
scrapedAtstring (or null)When the row was made (ISO 8601)

Pricing

Pay per event: one report event per returned report (export: every report; watch: baseline, new and changed rows).

PlanPrice per reportPer 1,000 reports
Free (no discount)$0.0015$1.50
Bronze$0.0013$1.30
Silver$0.00115$1.15
Gold (and Platinum, Diamond)$0.0010$1.00
  • Never charged: failed rows (an invalid code, no answer), no_data rows (no report, nothing new) and unchanged rows. You are never charged for failed results.
  • Apify also charges its small per-run start event. There are no usage fees on top, so the actor is eligible for x402 agent payments.

Use it from AI agents

One clear main input, stations (ICAO codes); every row has status, error, reportType, stationId, rawText and scrapedAt. Call it through the Apify API, the Apify MCP server (mouadapi/aviation-weather) or x402 agentic payments. Copy-paste call (your Apify token in place of YOUR_APIFY_TOKEN):

$curl -X POST "https://api.apify.com/v2/acts/mouadapi~aviation-weather/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" -H "Content-Type: application/json" -d '{"stations": ["KJFK", "EGLL"]}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('mouadapi/aviation-weather').call({ stations: ['KSFO', 'KLAX'], reportTypes: ['metar'], stateName: 'west', onlyCategoryChanges: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Limits

  • The Aviation Weather Center limits its Data API to 100 requests a minute; this actor sends one request every 2 seconds at most, and a run needs only one per 100 stations and report type. If the API answers HTTP 429, the run pauses 60, 120 and 240 seconds on the same connection, then stops with free failed rows; an HTTP 403 is a block and stops the run. No other IP or proxy is ever tried.
  • The latest report of each station only (no history), as the API gives it; times are UTC.
  • Some stations publish METARs but no TAF (a free no_data row says so), and a station that does not report has none.

Known issues

  • The decoded fields (flight category, wind, visibility, clouds) are the Aviation Weather Center's own; the coded rawText is the report as published and is the reference.

FAQ

Which stations can I use? Any ICAO code the Aviation Weather Center publishes reports for, worldwide (US airports start with K, Canadian with C, UK with EG, French with LF …).

Why did a watch run return one no_data row? Nothing was new since the last run of the watch list; the row says how many reports were unchanged. It is free.

Data and licence

  • Source: the Aviation Weather Center's Data API (aviationweather.gov/api/data), documented at https://aviationweather.gov/data/api/.
  • Terms: the National Weather Service's disclaimer: NWS information "is in the public domain, unless specifically noted otherwise, and may be used without charge for any lawful purpose" so long as it is not claimed as one's own, not used to imply an endorsement or affiliation with NOAA/NWS, and not modified and presented as official government material. Notice under 17 U.S.C. § 403: the reports in this actor's output are U.S. Government works, not subject to copyright.
  • This actor is not affiliated with, endorsed by or provided by NOAA, the National Weather Service or the Aviation Weather Center. It returns the reports as published, unmodified; it is not an official weather briefing.