Supply Chain Risk Monitor — Earthquakes & Wildfires avatar

Supply Chain Risk Monitor — Earthquakes & Wildfires

Pricing

from $1.00 / 1,000 site checkeds

Go to Apify Store
Supply Chain Risk Monitor — Earthquakes & Wildfires

Supply Chain Risk Monitor — Earthquakes & Wildfires

Returns a 0–100 earthquake and wildfire risk score per supplier site or port from USGS and NASA FIRMS data, with reasons and alerts when a level rises; failed and unchanged rows are never charged. Our own score from the listed facts; not advice. Not affiliated with or endorsed by the USGS or NASA.

Pricing

from $1.00 / 1,000 site checkeds

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

Share

Returns a 0–100 natural-hazard risk score for each supplier site, plant, warehouse or port you give, from recent earthquakes nearby (USGS) and satellite fire detections nearby (NASA FIRMS), with the reasons in plain words; failed and unchanged rows are never charged.

Give it your sites by their coordinates; get one row per site with:

  • a risk score (0 to 100) and a level (low, moderate, high, severe), split into its earthquake part and its fire part;
  • the reasons in plain words ("M5.2 earthquake 166.6 km away on 2026-09-28 …; 3 fire detections …, the nearest 6.3 km away");
  • the earthquake facts: how many, the largest magnitude, the nearest, and the one that weighed most (its USGS ID, time, magnitude, distance, place, PAGER alert and link);
  • the fire facts: how many detections, how many of high confidence, how many within 25 km, the nearest, their total fire radiative power and the latest scan.

Built for supply-chain, procurement and logistics teams, insurers and AI agents that screen many sites for natural hazards in one call. Not affiliated with or endorsed by the USGS or NASA.

Our own score from the listed facts; not advice. It is a screening signal from public data, not an engineering, insurance or safety assessment; it covers earthquakes and fires only (no trade, political, port or weather risk).

What it does

  • One row per site, from two official sources read in the same run: the USGS earthquake catalog and NASA FIRMS fire detections (VIIRS on NOAA-20 and NOAA-21, optionally MODIS).
  • A published score (below), computed only from the sources' own facts: magnitude, distance, the USGS PAGER alert, and the distance and number of fire detections.
  • Supplier watch with alerts: give a watch list name (watchListName) and run it daily:
    • the first run returns every site (baseline);
    • later runs return only the sites whose score or level changed, with the previous values, and levelRose: true when the level went up (your alert);
    • a run with nothing new returns exactly one free no_data row that says so.
  • Your own NASA FIRMS key for fires (firmsApiKey, free, sent to you by email from FIRMS); used only in requests to FIRMS and never logged, stored or returned. Without a key the score covers earthquakes only (0 to 60), and each row says so (scoreCovers).
  • You are never charged for failed results: failed rows are free, a row whose fire part failed is free, and unchanged rows are free in watch mode. One charge per checked site.

How the score works

The score is our own formula over the sources' facts, the same for every site:

Earthquake part, 0 to 60. Each earthquake within the radius and the window gets magnitude points times a distance factor; the part is the highest of these.

MagnitudePointsDistanceFactor
under 40up to 25 km1.0
4.0 to 4.910up to 50 km0.8
5.0 to 5.925up to 100 km0.6
6.0 to 6.945up to 200 km0.4
7.0 and up60farther0.25

Then: at least 30 when an earthquake in the radius has a USGS PAGER alert of yellow, 45 for orange, 60 for red; plus 5 for a swarm (3 or more earthquakes of M4 or more); at most 60.

Fire part, 0 to 40 (with a FIRMS key). Points for the nearest fire detection (up to 5 km: 30; 10 km: 22; 25 km: 15; 50 km: 8; farther in the radius: 4), plus points for the detections within 25 km (1 or more: 2; 10 or more: 6; 50 or more: 10); at most 40.

Level: 0–19 low, 20–39 moderate, 40–59 high, 60–100 severe.

Quick start

{ "locations": ["Tokyo office: 35.68,139.69", "Santiago plant: -33.45,-70.66", "Los Angeles warehouse: 34.05,-118.24"], "firmsApiKey": "YOUR_FIRMS_MAP_KEY" }

A daily supplier watch with a 50 km radius:

{
"locations": ["Shenzhen plant: 22.54,114.06", "Port of Rotterdam: 51.95,4.14", { "name": "Hilo depot", "latitude": 19.72, "longitude": -155.08, "radiusKm": 150 }],
"radiusKm": 50,
"firmsApiKey": "YOUR_FIRMS_MAP_KEY",
"watchListName": "suppliers"
}

Input

FieldWhat it does
locationsMain input, up to 200 sites: "latitude,longitude" with an optional name first and an optional radius after ("Shenzhen plant: 22.54,114.06", "Port of Rotterdam: 51.95,4.14,50"), or objects { "name", "latitude", "longitude", "radiusKm" }. Coordinates only: no address lookup.
radiusKmHow far around each site to look, unless the site gives its own; default 100 (1 to 500 km).
earthquakeDaysEarthquakes of the last N UTC days, today included; default 30 (1 to 365).
minMagnitudeSmallest earthquake magnitude counted; default 4 (2.5 to 10).
fireDaysFire detections of the last N UTC days, today included; default 3 (1 to 10).
minFireConfidenceSmallest FIRMS confidence class counted: low, nominal or high; default nominal.
fireSourcesFIRMS products; default VIIRS_NOAA20_NRT,VIIRS_NOAA21_NRT (add MODIS_NRT for MODIS on Terra and Aqua).
firmsApiKeyYour own free NASA FIRMS MAP_KEY. Without it the score covers earthquakes only. Never logged, stored or returned.
modeEmpty: watch when a watch list name is given, otherwise export. An explicit watch or export wins.
watchListNameYour site watch list (kept in your own storage between runs). A name turns on watch mode; watch mode without a name uses the list "default". Changing the windows or filters starts the list again.
includeUnchangedWatch mode: also return unchanged sites (free); default false.

Field names from other tools: sites (→ locations); stateName (→ watchListName); apiKey, mapKey (→ firmsApiKey).

Output

One row per site. A site with both parts (lists shortened):

{
"status": "ok",
"input": "Port Hardy depot: 50.72,-127.49,300",
"locationName": "Port Hardy depot",
"latitude": 50.72,
"longitude": -127.49,
"radiusKm": 300,
"riskScore": 34,
"riskLevel": "moderate",
"earthquakePoints": 10,
"firePoints": 24,
"scoreCovers": "earthquakes and fires",
"reasons": "M5.2 earthquake 166.6 km away on 2026-09-28; 2 earthquakes of M4 or more within 300 km in 30 days (USGS); 3 fire detections within 300 km in 3 days, the nearest 6.3 km away (NASA FIRMS)",
"earthquakeCount": 2,
"maxMagnitude": 5.4,
"strongestEarthquakeId": "us6000ty43",
"strongestEarthquakeUrl": "https://earthquake.usgs.gov/earthquakes/eventpage/us6000ty43",
"fireCount": 3,
"firesWithin25Km": 2,
"nearestFireKm": 6.3,
"fireStatus": "ok",
"url": "https://www.openstreetmap.org/?mlat=50.72&mlon=-127.49#map=10/50.72/-127.49"
}

A watch run, a site whose level rose:

{ "status": "ok", "input": "Tokyo office: 35.68,139.69", "riskScore": 36, "riskLevel": "moderate", "changeType": "changed", "changedFields": "riskLevel, riskScore", "previousValues": "{\"riskLevel\":\"low\",\"riskScore\":0}", "levelRose": true }

Output fields

FieldTypeDescription
statusstring (or null)ok = the site was checked (charged in export mode, and in watch mode when it is a baseline, new or changed site; free when its fire part failed, or when unchanged and includeUnchanged is on); no_data = a site given again (the same coordinates and radius: checked and charged once), or nothing new since the last run (free); failed = an invalid location, or the USGS could not be read for this site (free)
errorstring (or null)Why a row is no_data or failed; null on ok rows
attemptsinteger (or null)Requests made for the USGS answer (retries included)
inputstring (or null)The location entry that produced this row, as given ("Name: latitude,longitude[,radiusKm]" or an object), or the watch list for the nothing-new row
locationNamestring (or null)The name given before the coordinates, or null
latitudenumber (or null)The site's latitude (degrees, WGS 84)
longitudenumber (or null)The site's longitude (degrees, WGS 84)
radiusKmnumber (or null)How far around the site the check looked (km)
modestring (or null)watch or export
watchListstring (or null)Watch list name (watch mode); null in export mode
riskScoreinteger (or null)The site hazard score, 0 to 100: the earthquake part (0 to 60) plus the fire part (0 to 40); the formula is in the README
riskLevelstring (or null)low (0-19), moderate (20-39), high (40-59) or severe (60-100)
earthquakePointsinteger (or null)The earthquake part of the score, 0 to 60
firePointsinteger (or null)The fire part of the score, 0 to 40; null when fires were not checked
scoreCoversstring (or null)"earthquakes and fires", or "earthquakes only" (no NASA FIRMS key, or FIRMS failed)
reasonsstring (or null)The score in plain words: the earthquake that weighed most, and the fire detections
earthquakeCountinteger (or null)Earthquakes of the minimum magnitude or more within the radius in the earthquake window
maxMagnitudenumber (or null)The largest of those magnitudes
nearestEarthquakeKmnumber (or null)The nearest of those earthquakes (km, 0.1)
strongestEarthquakeIdstring (or null)The USGS event ID of the earthquake that weighed most in the score
strongestEarthquakeTimestring (or null)Its origin time (ISO 8601, UTC)
strongestEarthquakeMagnitudenumber (or null)Its magnitude
strongestEarthquakeKmnumber (or null)Its distance from the site (km, 0.1)
strongestEarthquakePlacestring (or null)The USGS place text; null when the people filter left it out (it looked like a person's name)
strongestEarthquakeAlertstring (or null)Its USGS PAGER alert level (green, yellow, orange, red), or null
strongestEarthquakeUrlstring (or null)The earthquake's USGS page
fireCountinteger (or null)NASA FIRMS fire detections (at the minimum confidence or more) within the radius in the fire window; null when fires were not checked
highConfidenceFireCountinteger (or null)Of those, the high-confidence ones
firesWithin25Kminteger (or null)Of those, the ones within 25 km of the site
nearestFireKmnumber (or null)The nearest fire detection (km, 0.1)
totalFrpMwnumber (or null)The fire radiative power of those detections, summed (MW)
latestFireTimestring (or null)The newest of those detections (the satellite scan, ISO 8601, UTC)
earthquakeStatusstring (or null)"ok", or "failed: ..." with the reason
fireStatusstring (or null)"ok", "not checked: no NASA FIRMS key (...)", or "failed: ...; this row is free"
earthquakeWindowstring (or null)The earthquake window (UTC days, today included)
fireWindowstring (or null)The fire window (UTC days, today included); null without a FIRMS key
changeTypestring (or null)Watch mode: baseline (first run of the list), new (a site the list did not have), changed (its score or level changed) or unchanged (only with includeUnchanged); null in export mode, and when the fire part failed
changedFieldsstring (or null)Watch mode, changed rows: riskLevel and/or riskScore
previousValuesstring (or null)Watch mode, changed rows: the changed fields' previous values, as JSON
levelRoseboolean (or null)Watch mode: true when the risk level is higher than at the last run (an alert)
urlstring (or null)The site on OpenStreetMap (a link only; nothing is read from it)
sourcestring (or null)Both sources and the citations they ask for, with NASA's advice on local-scale use of fire data
licensestring (or null)Both sources' licences or terms
scrapedAtstring (or null)When the row was made (ISO 8601)

Pricing

Pay per event, one event per checked site (site-check), whatever the number of earthquakes and fires found:

PlanPrice per sitePer 1,000 sites
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
  • Charged: ok rows in export mode; baseline, new and changed rows in watch mode. A score of 0 is an answer and is charged.
  • Never charged: failed rows (an invalid location, the USGS not readable), rows whose fire part failed, no_data rows (a site given twice, the nothing-new row) and unchanged rows. You are never charged for failed results.
  • Pay per event only, with no usage fees, so the actor is eligible for x402 agent payments.

Use it from AI agents

One clear main input, locations; every row has status, error, riskScore, riskLevel, reasons and scrapedAt. Call it through the Apify API, the Apify MCP server (mouadapi/supply-chain-risk-monitor) 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~supply-chain-risk-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" -H "Content-Type: application/json" -d '{"locations": ["Shenzhen plant: 22.54,114.06", "Port of Rotterdam: 51.95,4.14"], "radiusKm": 100, "earthquakeDays": 30}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('mouadapi/supply-chain-risk-monitor').call({ locations: ['22.54,114.06', '51.95,4.14,50'], firmsApiKey: 'YOUR_FIRMS_MAP_KEY', watchListName: 'suppliers' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Limits

  • Earthquakes and fires only. No trade-flow, political, port-congestion, tariff, flood, storm or weather data: no source for them passed our rules for public, reusable data.
  • Fire detections are satellite pixels. One fire gives many detections, and a gas flare, a volcano or a hot factory roof can be detected too. NASA advises that, due to their spatial resolution, these data are not suited to tactical decision-making or to informing about conditions at a local scale: confirm with local authorities.
  • FIRMS near-real-time products only, up to 10 days; each satellite passes about twice a day, and clouds hide fires.
  • The USGS catalog is complete worldwide for larger earthquakes (about M4.5 and up) and in more detail in the United States; smaller earthquakes elsewhere may be missing.
  • Coordinates only: no address, port-code or place-name lookup. At most 200 sites per run, 500 km radius.
  • Suomi NPP (VIIRS_SNPP) is not offered: NASA ends its data products on 1 November 2026.

Known issues

  • The FIRMS key: a key FIRMS refuses, or one whose limit is used up (5,000 requests per 10 minutes), stops FIRMS for the rest of the run: those rows keep their earthquake part, say why in fireStatus, and are free.
  • A source that cannot be read (a rate limit that three pauses don't clear, an outage) stops for the rest of the run; another IP or proxy is never tried. Without the USGS a site has no score: its row is failed (free).
  • The place text of an earthquake is left out when it has the shape of a person's name; the coordinates stay.
  • The daily self-test of this actor checks the earthquake path; the fire path is checked with a key in every release test.

Sources and licences

  • USGS earthquake catalog (FDSN event web service): U.S. Public Domain (USGS copyrights and credits).
  • NASA FIRMS: "NASA promotes full and open sharing of data"; please cite it as "NASA FIRMS" (FIRMS FAQ). We acknowledge the use of data and/or imagery from NASA's Land, Atmosphere Near real-time Capability for Earth observations (LANCE) (https://earthdata.nasa.gov/lance), part of NASA's Earth Science Data and Information System (ESDIS). The data are provided "as is" (LANCE disclaimer).
  • The map link is an OpenStreetMap link to the site; nothing is read from it.

Each row's source and license name both sources.