Operations · 4 min

Wildfire Monitoring with NASA FIRMS: A Practical Guide

How to consume NASA FIRMS VIIRS + MODIS active-fire detections, geofence them to pipelines, refineries, distribution centres and field crews. Latency benchmarks + false-positive filters that work.

2026-05-26

Every wildfire in the world large enough to throw thermal-IR energy at a polar-orbiting satellite shows up in NASA FIRMS within hours. For utilities, oil-and-gas operators, telecoms with above-ground infrastructure, and field crews working in remote terrain, FIRMS is the cheapest defensible wildfire monitoring layer available.

This post is about the practical pipeline: which FIRMS products to consume, how to filter, and how to wire them into an operations Slack channel without spam-firing on every prescribed burn.

What FIRMS actually publishes

FIRMS (Fire Information for Resource Management System) is NASA's near-real-time active-fire product. Two sensor sources:

MODIS (Aqua + Terra)

Two satellites in polar orbit since 2002. 1km thermal resolution. Each satellite passes over a given point ~twice per day. Combined, MODIS gives you 4 overpasses per 24 hours.

VIIRS (Suomi NPP + NOAA-20)

Newer instrument since 2011. 375m thermal resolution — finer than MODIS, catches smaller fires. Also two overpasses per satellite per day. Combined VIIRS gives ~4 more overpasses.

Total combined coverage: ~8 overpasses per 24 hours. Latency from fire-start to FIRMS publication is typically 1-3 hours (sensor pass + downlink + processing).

Consumption modes

Two ways to consume FIRMS data:

Area-CSV API

https://firms.modaps.eosdis.nasa.gov/api/area/csv/MAP_KEY/VIIRS_SNPP_NRT/BBOX/DAYS

Returns a CSV of active-fire pixels for the bounding box over the requested days. Free map-key on registration. Refresh hourly is fine.

Country-CSV API

Same as area but pre-filtered by ISO 3166-1 country code:

https://firms.modaps.eosdis.nasa.gov/api/country/csv/MAP_KEY/VIIRS_SNPP_NRT/USA/1

Useful if your monitoring scope is country-level.

WMS tile layer

For map UIs (Leaflet, Mapbox), FIRMS also publishes WMS tiles. Use as a visualisation overlay on your operations map.

Per-pixel fields

Each FIRMS row includes:

  • latitude, longitude
  • bright_ti4 / bright_ti5 — thermal brightness in two IR bands
  • scan, track — pixel size (varies with viewing angle)
  • confidence — low / nominal / high (VIIRS) or 0-100 % (MODIS)
  • frp — Fire Radiative Power in megawatts (energy released)
  • daynight — D or N
  • acq_date, acq_time — when the satellite scanned

The valuable fields for severity scoring are confidence and frp.

Severity scoring for fires

Convert FRP + confidence into a 0-100 score:

function fireSeverity(p: FirmsPixel): number {
  const conf = p.confidence === "h" ? 1 : p.confidence === "n" ? 0.7 : 0.4;
  const frpScore = Math.min(60, Math.log10(Math.max(1, p.frp)) * 25);
  const base = conf * 30 + frpScore;
  return Math.round(Math.min(100, base));
}
  • A single low-confidence ~5 MW pixel scores ~25 (probably a small prescribed burn or false positive)
  • A high-confidence ~500 MW pixel scores ~80 (real wildfire, large)
  • A high-confidence ~5000 MW pixel scores 100 (megafire — Camp Fire, Black Saturday, Maui)

Geofencing patterns

Three patterns for infrastructure protection from wildfire:

1. Long thin corridor polygons for linear infrastructure

For pipelines, power lines, fibre cables — define a 5-10km buffer polygon along the asset path. Set severity threshold to ≥40. Catches every fire in striking distance.

2. Asset-radius circles for facilities

For refineries, substations, telecom huts, agricultural operations — define a 25km circle. Set severity threshold to ≥50. Filters out distant fires that don't affect operations.

3. Country-level polygons for portfolio awareness

For reinsurers tracking exposure across whole countries during fire seasons — country polygon + severity ≥70 catches every megafire.

False-positive filters that work

FIRMS has known false-positive sources you can filter out:

  1. Industrial heat signatures — flares, steel mills, power plants show up as persistent "fires." Maintain a known-source mask (lat/lon list) and subtract these.
  2. Gas flares — natural-gas flaring in oil-producing regions (Nigeria, Iraq, North Dakota) generates persistent FIRMS pixels. Use a flaring-source database (or just exclude known oil-producing lat/lon buffers).
  3. Sun glint over water — VIIRS occasionally false-positives over water at low sun angles. Filter pixels where daynight=D AND lat/lon falls in water (use OSM water-polygon mask).
  4. Low-confidence single pixels — drop confidence=l pixels unless multiple are clustered.

Aggregating per fire

A single wildfire produces dozens of FIRMS pixels per satellite pass. Cluster nearby pixels (DBSCAN with eps=2km, minPts=3) into one "fire" before firing the alert. Otherwise the same fire generates 50 alerts on one pass.

Latency budget

End-to-end "fire starts → alert in your Slack":

  • Satellite overpass timing: 0-6 hours (until the next overpass)
  • FIRMS processing: 1-2 hours
  • Your hourly poll: 0-60 minutes
  • Dispatcher matching: under 1 second
  • Slack delivery: 1-3 seconds

Median: 3-8 hours. Worst case: 12 hours. Not real-time, but for asset-protection workflows it's enough.

For sub-hour wildfire detection you need:

  • GOES-R / Himawari geostationary thermal data (5-minute refresh)
  • Aircraft AFIRS data (US Forest Service, partner-only)
  • Ground-based sensors (commercial: Pano AI, ALERT California)

Free starter stack

Minimum viable wildfire monitoring this week:

  1. Register a free FIRMS map-key
  2. Wire VIIRS + MODIS area CSV polls hourly for your operating regions
  3. Cluster pixels into fires (DBSCAN)
  4. Define corridor / radius zones for your top 20 assets
  5. Score each fire on 0-100 via FRP + confidence
  6. Slack channel #ops-fires, route via incoming webhook

Augur's NASA FIRMS ingest wraps the cluster + dedupe + geofencing layer + known-source masking. The pixels are free; the pipeline is the work.

What this looks like in production

Western US utility: 200km of transmission line + FIRMS corridor zones + severity ≥50 threshold drives the fire-restoration crew dispatch decision. Replaced a manual analyst review process.

California-based reinsurer: state-wide FIRMS coverage + cluster-into-fire aggregation drives the daily portfolio-exposure dashboard during fire season. 30-minute pipeline replaces an old offline batch process.

West-Australian mining operator: 25km circle around each pit + FIRMS + severity ≥60 protects haul-road infrastructure during summer.

The data is public. The geofencing makes it useful.

← Back to blog · Start free