Wildfire Asset Exposure Screener — Live Perimeter Distance
Pricing
from $5.50 / 1,000 results
Wildfire Asset Exposure Screener — Live Perimeter Distance
Screen assets - offices, homes, facilities, portfolios - against live NIFC wildfire perimeters plus USFS Wildfire Hazard Potential class and historical burn history. Per point: distance to nearest fire, hazard class, past burn year. MCP-ready wildfire risk API.
Pricing
from $5.50 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Screen any list of asset locations against live US wildfire perimeters from NIFC WFIGS (the interagency system behind official fire maps). For every point you supply, this actor answers the question insurers, portfolio managers, and ops teams actually ask:
"Is this location inside or near an active wildfire — and how close, exactly?"
One input row in, one enriched row out: in-perimeter flag, distance in miles to the
nearest active fire perimeter edge, fire name, acres, containment %, a simple
exposure level (IN_PERIMETER / WITHIN_5_MI / WITHIN_25_MI / CLEAR) — plus
two background risk signals looked up at the same point: USFS Wildfire Hazard Potential
class and whether the point has ever burned before.
All active-fire geometry math (ray-casting point-in-polygon with holes, point-to-perimeter-edge distance) runs locally against the live perimeter polygons — no geocoding services, no API keys, no rate-limited third parties. The two background signals are live per-point lookups against USFS and NIFC ArcGIS services.
What changed in v1.1 (2026-08-01 validation pass)
Fixed a false all-clear. v1.0 loaded two WFIGS sources (perimeters and incident
points), computed a failure flag for each, and never put either on the row. It then
continued as long as one source loaded. So a perimeter-layer outage plus a healthy
incident-points layer emitted a billable row reading exposure_level: "CLEAR",
in_perimeter: false, fires_within_radius: 0, error: null — a confident low-risk
verdict computed from a partial fire dataset. That is the same shape as the FAA drone
screener, which computed "all failed" as every layer failing and so emitted a
confident airspace verdict with 7 of 8 layers down.
Now: every row carries perimeters_status, incident_points_status, whp_status,
historical_burn_status and screening_complete. If any requested WFIGS source
fails to load, exposure_level reads ERROR (already part of this field's vocabulary)
with in_perimeter: null and a PARTIAL SCREEN message, instead of a false CLEAR.
If both fail, the run fails and bills nothing.
Contained fires are now distinguishable. NIFC keeps fully-contained fires in its
Current layers for weeks or months. Measured live on 2026-08-01: 59 of 229
perimeters (25.8%) were 100% contained, including a 642,029-acre Nebraska fire
discovered on 2026-03-13, and 96 of 573 incident points (16.8%). v1.0 reported
IN_PERIMETER for those exactly as it would for an active burn.
exposure_level is unchanged (append-only — it has always meant "against all current
WFIGS records"), but v1.1 adds fire_is_contained, active_exposure_level,
active_fires_within_radius, contained_fires_within_radius,
nearest_active_fire_name and nearest_active_fire_distance_miles. Read
active_exposure_level for an operational answer.
A live drift gate runs before a single billable row exists. It verifies every layer
still exposes every column this actor queries; that POOState still uses the US-XX
form (a bare postal code silently matches nothing, which turns every state-scoped run
into a false all-clear); that the state filter actually filters — measured live,
attr_POOState IN ('US-CA') returns 14 of 229 and the bare-'CA' form returns 0, so
both a dropped WHERE clause and a changed encoding are caught; that geometry comes back
in WGS84, checked by coordinate magnitude rather than by proximity; that the
incident-type vocabulary is closed (WF/RX/CX — an unknown category fails the run);
that the USFS WHP raster is not a superseded release (it parses the release year out
of the live service description and refuses anything older than 2023) and that its
legend still maps exactly seven classes to the codes this actor hard-codes; plus four
static point canaries — Plumas NF must return WHP 4 or 5, downtown Chicago 6 or 7,
Paradise CA must return the 2018 Camp Fire, and Chicago must return no burn history.
Every measured value is logged on every run.
Truncation and billing honesty. A still-truncated read now fails rather than
screening assets against a partial fire dataset, and rows are buffered so the billing
gate runs before pushData.
Nine columns recovered from the 119 the perimeter layer publishes and the 10 v1.0
read: fire_perimeter_date (how stale the polygon is), fire_unique_id, fire_gacc,
fire_cause, fire_complexity_level, fire_behavior, fire_jurisdictional_agency,
fire_personnel, fire_incident_type. Two more (attr_ContainmentDateTime 0/228 and
attr_PredominantFuelGroup 1/228) were checked and deliberately left out — they would
have been dead columns.
No output field was removed or renamed, exposure_level still uses only its v1.0
vocabulary, and the price is unchanged.
Who it's for
- Insurance & underwriting teams — screen a book of insured properties every morning; triage anything
WITHIN_5_MI. - Real-estate & asset portfolio managers — exposure roll-up across hundreds of sites in one run.
- Risk, BCP & security ops — automatic checks of offices, warehouses, cell sites, substations; alert on level changes.
- Supply-chain teams — screen supplier plants and distribution centers during fire season.
- AI agents — a clean, chainable "wildfire check" tool: coordinates in, structured verdict out.
Example input
{"assets": [{ "lat": 34.05, "lon": -118.24, "label": "Los Angeles office" },{ "lat": 38.58, "lon": -121.49, "label": "Sacramento site" }],"radiusMiles": 25,"states": [],"includeIncidentPoints": true,"includeWhp": true,"includeHistoricalBurn": true}
Output fields (one row per asset = one $0.01 check)
| Field | Meaning |
|---|---|
asset_label, asset_lat, asset_lon | Your input point, echoed back |
exposure_level | Verdict against all current WFIGS records: IN_PERIMETER, WITHIN_5_MI, WITHIN_25_MI, CLEAR, or ERROR. ERROR now also covers a partial screen. |
active_exposure_level | The operational verdict. The same scale, computed only over fires that are not 100% contained. |
in_perimeter | true inside a mapped perimeter, false checked and negative, null not checked |
nearest_fire_name | Incident name of the nearest fire within radiusMiles |
distance_miles | Miles to the nearest perimeter edge (0 when inside); point distance for fires without a mapped perimeter |
fire_is_contained | True when that nearest fire reports 100% containment. NIFC keeps contained fires in its Current layers — 25.8% of perimeters were fully contained when this was measured. |
nearest_active_fire_name, nearest_active_fire_distance_miles | The same, restricted to fires that are not fully contained |
fire_acres, percent_contained | Size and containment of the nearest fire |
fire_state, fire_county, fire_discovery_date | Where and when it started |
fire_perimeter_date | When that perimeter polygon was last mapped — perimeters lag real spread, and this tells you by how much |
fire_source | perimeter (polygon) or incident_point (new/small fire, no perimeter yet) |
fire_unique_id | WFIGS UniqueFireIdentifier — the stable key for cross-referencing InciWeb and ICS-209 |
fire_gacc | Geographic Area Coordination Center responsible for the fire |
fire_cause | Human / Natural / Undetermined / Unknown |
fire_complexity_level | Type 1 through Type 5 incident — a direct proxy for how serious the response is |
fire_behavior | Minimal / Moderate / Active / Extreme |
fire_jurisdictional_agency | Agency with jurisdiction over the point of origin |
fire_personnel | Total personnel assigned |
fire_incident_type | WF (wildfire) or CX (complex). Prescribed burns (RX) are excluded from this screen. |
fires_within_radius | How many current WFIGS fire records are within the radius. null when the screen did not complete. |
active_fires_within_radius, contained_fires_within_radius | The same, split by containment |
whp_class, whp_class_label | USFS Wildfire Hazard Potential class at the point: 1 Very Low, 2 Low, 3 Moderate, 4 High, 5 Very High, 6 Non-burnable (developed/open land), 7 Water |
whp_dataset_version | Release year of the WHP raster this run scored against, read live (2023) |
historical_burn, last_burn_year, last_burn_fire_name | Whether the point has ever burned before (NIFC historical fire-perimeter archive), and if so, the most recent year and fire name |
perimeters_status, perimeters_error | Per-source outcome for the WFIGS perimeter layer |
incident_points_status, incident_points_error | Per-source outcome for the WFIGS incident-locations layer |
whp_status, historical_burn_status | ok / unavailable / not_requested for each background signal |
screening_complete | True only when every requested WFIGS source loaded |
perimeters_loaded, incident_points_loaded | How many fire records this run actually screened against |
data_last_updated | ISO timestamp of NIFC's last edit to the perimeter layer, read live |
whp_source_url, historical_burn_source_url | The exact ArcGIS services each background signal was looked up from |
enrichment_note | Human-readable note when a background lookup was skipped or failed |
checked_at, error, disclaimer, source_url | Run metadata and advisory notice |
null means not checked. false means checked and negative. Invalid points produce
an ERROR row and the run continues — one bad coordinate never fails a 500-asset batch.
The two background lookups follow the same rule: an unreachable USFS or NIFC service
leaves that asset's whp_class / historical_burn null with a status of
unavailable and a note in enrichment_note, never a confident false.
Inputs that populate the conditional columns
perimeters_error, incident_points_error and the PARTIAL SCREEN form of error are
null on a healthy run by design — that is good news, not a dead column. Both paths
are pinned by offline fixtures and mutation-verified. nearest_active_fire_name is
null when the only fires in range are fully contained, which is the point of the
field. fire_perimeter_date is null on an incident_point hit, because a point has
no polygon.
Data sources
- NIFC WFIGS Current Interagency Fire Perimeters (ArcGIS FeatureServer, updated continuously through the fire day) — fetched with full polygon geometry once per run.
- WFIGS Current Incident Locations (points) — catches brand-new or small wildfires that have no mapped perimeter yet; deduplicated against perimeters by IRWIN id.
- USFS Wildfire Hazard Potential (WHP), classified raster — a 270m landscape-scale fuels-and-fire-behavior rating from the USFS Rocky Mountain Research Station, served via the USFS Interagency Image and Point Product (IIPP) ImageServer. This is a background wildland-fuels metric, not a structure-level risk score or a prediction that a specific building will burn — treat it as one input to a broader risk picture, alongside the live perimeter distance above.
- NIFC InterAgency Fire Perimeter History (All Years) — the historical companion to the WFIGS Current layers; mapped perimeters going back decades, contributed independently by multiple agencies (this actor takes the most recent burn year per point when a fire is mapped more than once).
Keyless, official, and free — you pay only for the per-asset checks. The two background
lookups can be turned off (includeWhp: false, includeHistoricalBurn: false) if you only
want the live-perimeter distance check.
Use as an MCP tool
This actor is exposed via mcp.apify.com — AI agents (Claude, Cursor,
etc.) can call it as a wildfire-exposure verification tool. The input schema (lat/lon/label
list) and the field-level output descriptions are designed to be read and chained by agents:
geocode an address upstream, screen it here, branch on exposure_level downstream.
FAQ
Is this an official evacuation source?
No. Perimeters can lag real fire spread by hours — fire_perimeter_date tells you when
the polygon was last mapped. This is an advisory screening layer — every row carries a
disclaimer. For life-safety decisions use local authorities and
inciweb.wildfire.gov.
Why does exposure_level say IN_PERIMETER for a fire that is out?
Because NIFC keeps fully-contained fires in its Current layers, sometimes for months —
25.8% of perimeters were 100% contained when this was last measured. exposure_level
has always meant "against all current WFIGS records" and is unchanged so existing
pipelines keep working. Read active_exposure_level (and fire_is_contained) for a
verdict that excludes them.
What does null mean?
Not checked. false means checked and negative. If a WFIGS source did not load, this
actor emits exposure_level: "ERROR" with in_perimeter: null rather than a confident
CLEAR — check perimeters_status, incident_points_status and screening_complete.
How is pricing calculated? $10 per 1,000 result rows ($0.01 per asset check). Graduated discounts apply on paid Apify plans. A run in which nothing could be determined bills nothing.
How do I check if an address is near a wildfire?
Geocode the address to lat/lon (any geocoder), then pass it in assets. The row tells you
the nearest active fire and the distance in miles.
What does distance_miles: 0 mean?
The point is inside the fire perimeter polygon (in_perimeter: true,
exposure_level: IN_PERIMETERWhy did a fire I saw in the news not appear?
If it is fully contained and dropped from the Current WFIGS layers it is no longer an
active fire. Very new starts may exist only as incident points (keep
includeIncidentPoints: true).
Can I screen only one state?
Yes — set states: ["CA"] to fetch only fires originating in California. Leave it empty
when assets sit near state lines (fires cross borders; the point of origin determines the
state tag).
How is the distance computed? Locally: ray-casting point-in-polygon (holes and multi-part perimeters respected) plus haversine-based point-to-segment distance to every perimeter edge, taking the minimum. No server-side geometry calls, so 500 assets screen in seconds.
What does a "Non-burnable" WHP class mean — is that an error?
No. The USFS raster classifies developed land and open water as Non-burnable /
Water rather than assigning a hazard tier — a town center or a lake pixel legitimately
comes back that way even in a fire-prone region. Check the surrounding wildland (or the
live perimeter distance above) for the actual local exposure picture.
Has this location ever burned before?
historical_burn checks the point against NIFC's historical fire-perimeter archive
(decades of mapped fires, independent of the current active-fire layers). true means
the point falls inside a past fire perimeter; last_burn_year and last_burn_fire_name
give the most recent one on record.
Is WHP a guarantee a property will or won't burn? No. It's a landscape-scale (270m) wildland-fuels and fire-behavior potential rating, not a structure-level risk score, defensible-space assessment, or insurance underwriting verdict — use it as one input alongside the live perimeter/historical-burn signals, not a standalone yes/no answer.
