USGS Earthquakes: Search Quakes by Magnitude, Area and Date avatar

USGS Earthquakes: Search Quakes by Magnitude, Area and Date

Pricing

from $0.70 / 1,000 earthquake records

Go to Apify Store
USGS Earthquakes: Search Quakes by Magnitude, Area and Date

USGS Earthquakes: Search Quakes by Magnitude, Area and Date

One row per earthquake from the official USGS catalog: time, place, magnitude, depth, coordinates, PAGER alert, tsunami flag, felt reports and the event page. Filter by magnitude, time window, named region, radius, depth, alert level or event type; look events up by USGS id. UTC times.

Pricing

from $0.70 / 1,000 earthquake records

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Every earthquake the U.S. Geological Survey publishes, as one dataset row: origin time and last revision in UTC, place, magnitude and magnitude type, depth, coordinates, PAGER alert level, tsunami flag, significance score, public felt reports, reported and instrumental shaking, kind of event, review status and the event page. Search a rolling window or a fixed period, filter by magnitude, depth, named region, radius around a point, alert level, felt reports or kind of event — or hand over USGS event ids and get one row each. The source is the public, keyless event web service of the USGS Earthquake Hazards Program over the ANSS catalog: no API key, no account, no browser, no proxy.

Use cases

  • A newsroom's earthquake desk: the magnitude 4.5 and above events of the last seven days worldwide, newest first, with felt reports and the PAGER alert, ready for a table or a map.
  • Insurance and facility risk: everything that shook within 300 km of a plant, a pipeline or a building site, each row carrying its distanceKm from the point you gave — the "how close was it" answer without a GIS step.
  • A region watch on a schedule: set region (or a radius) with onlyNew and a schedule; each run writes only the quakes that appeared since the last one. Add trackRevisions to get an event again when USGS revises its magnitude or depth.
  • Catastrophe and humanitarian teams: the short PAGER list — only the few dozen events a year USGS gives an alert level, with its estimated-impact fields (alert, mmi, cdi, significance).
  • Claims and local reporting by what people felt: filter on minFeltReports instead of magnitude and you get the events a city noticed, whatever the number on the scale said.
  • Agents and pipelines resolving an identifier: a link or an alert mail gives you us6000u18k; put up to 100 such ids in eventIds and every one comes back as a row (unknown ids as found: false).
  • Research and back-testing: a fixed startTime/endTime window with a depth or magnitude band, up to 2 000 rows a run.

Input

Every field is optional. With an empty input the run returns the magnitude 2.5 and above earthquakes of the last week, newest first.

FieldTypeDefaultAllowed values / notes
sinceHoursinteger1681–8760. Rolling window on the origin time, UTC. Ignored when startTime is set.
startTimestringemptyYYYY-MM-DD or a full timestamp (2026-10-09T18:00:00), read as UTC. Earliest origin time, inclusive.
endTimestringemptySame format. Latest origin time; empty means now. Used together with startTime — on its own it is ignored and the run says so.
eventIdsstring[]emptyUp to 100 USGS event ids (us6000u18k). When set, every filter below is ignored. An id the catalog does not know gets one row with found: false.
minMagnitudenumberempty (prefill 2.5)−2 to 10. Empty means every magnitude.
maxMagnitudenumberempty−2 to 10. Combined with minMagnitude as a range.
minDepthKmnumberempty−100 to 1000. Depth of the hypocentre in km; negative above sea level.
maxDepthKmnumberempty−100 to 1000.
eventTypesstring[]emptyForgiving free text, OR-combined. Case, spaces and underscores are ignored, aliases are accepted, anything else is refused with the closest values named. Values: Kinds of event.
reviewStatusstringallStrict dropdown: all, reviewed, automatic. An off-list value is refused by the platform before the run starts, with the allowed values named.
regionstring[]emptyForgiving free text, OR-combined: 34 named areas, each a bounding box. Case, spaces, diacritics and aliases accepted; anything else refused with a suggestion. List: Named regions.
latitudenumberempty−90 to 90. Centre point of a circle; needs longitude. Every row then carries distanceKm.
longitudenumberempty−180 to 180. Needs latitude.
radiusKmnumberempty1–20000. Radius around the centre point. Without it the point narrows nothing and only adds distanceKm; without latitude/longitude it is ignored.
minLatitudenumberempty−90 to 90. Rectangle search: all four edges are needed. Ignored when region is set.
maxLatitudenumberempty−90 to 90.
minLongitudenumberempty−360 to 360. For a box across the date line raise the east edge past 180 (e.g. 170 to 190).
maxLongitudenumberempty−360 to 360.
minAlertLevelstringemptyStrict dropdown: green, yellow, orange, red. Keeps only events with a PAGER alert at or above that level. An off-list value is refused by the platform before the run.
onlyTsunamiFlaggedbooleanfalseKeep only events the catalog marks with a tsunami message.
minFeltReportsintegerempty1–200000. Minimum Did You Feel It responses.
minSignificanceintegerempty0–5000. Minimum sig score.
onlyNewbooleanfalseRemember the event ids this run writes and skip them next time (per actor or task). Made for schedules.
trackRevisionsbooleanfalseOnly with onlyNew: remember the event together with its revision time, so a revised event comes through again as a new row (and is charged again).
sortBystringtimeStrict dropdown: time (newest first), time-asc, magnitude (largest first), magnitude-asc. Decides what a small maxItems keeps.
maxItemsinteger501–2000. Hard cap on the rows a run writes, and so on what it costs.
fieldsstring[]allKeep only these columns, in this order. eventId, time, place, url, fetchedAt and found are always kept — they come first, unless you name one of them here, which puts it exactly where you put it. Names that are not columns are listed in the run's status instead of being dropped in silence. Column names: Output.

Reference

Named regions

Each region is a rectangle in decimal degrees (south / north / west / east), checked against the catalog on 2026-10-09. A rectangle always reaches a little past the border it is named after, so a quake just across the line is included — use latitude/longitude/radiusKm or your own four edges when you need an exact area.

RegionSouthNorthWestEastAlso accepted
California32.042.5−125.0−114.0ca, calif
Southern California32.036.0−121.0−114.0socal, s california
Pacific Northwest41.049.5−125.5−116.0pnw, cascadia
Alaska51.072.0−170.0−129.0ak
Hawaii18.522.5−161.0−154.5hi, big island
Yellowstone43.545.2−111.5−109.7yellowstone caldera
Oklahoma33.637.1−103.1−94.4ok
Puerto Rico17.019.5−68.0−64.5pr
Mexico14.033.0−118.5−86.0mx
Central America7.018.5−93.0−77.0
Panama7.09.8−83.1−77.1
Caribbean9.023.0−88.0−58.0antilles
Chile−56.0−17.0−76.0−66.0
Peru−18.50.0−82.0−68.5
Japan24.046.0128.0146.5jp, japan islands, nippon
Taiwan21.525.5119.5122.5tw
Philippines4.521.0116.0127.0ph
Indonesia−11.06.595.0141.0id, java, sumatra
Papua New Guinea−11.5−1.0140.0156.0png
New Zealand−48.0−33.0165.0179.5nz, aotearoa
China18.054.073.0135.0cn
India6.036.068.097.5in
Nepal26.330.580.088.3np
Himalaya26.036.073.097.0himalayas
Kazakhstan40.555.546.587.5kz, qazaqstan
Central Asia35.045.055.080.0tien shan, pamir
Kyrgyzstan39.043.469.080.3kg, kyrgyz republic, kirgizia
Caucasus38.045.038.050.0caucasia
Iran25.040.044.063.5ir
Turkey35.542.525.545.0tr, türkiye, turkiye, anatolia
Greece34.042.019.029.5gr, aegean
Italy36.547.26.518.6it, italia
Mediterranean30.046.0−6.036.0med
Iceland62.567.5−25.5−13.0is

region is free text, so the platform cannot pre-check it: the run resolves what you typed. California, california, CALIFORNIA, Turkiye and türkiye all work. Anything else ends the run at once with the closest names named ("Unknown region "Californa" (did you mean "California"?)"), never with a wider search than you asked for.

Kinds of event

The catalog is not only earthquakes: mining districts produce quarry blasts, glaciers produce ice quakes. Leave eventTypes empty for everything, or name the kinds you want. The catalog spells several of them two ways (quarry blast and quarry_blast); the run sends every spelling it knows for the kind you picked, so you get them all either way.

earthquake (aliases eq, quake) · quarry blast (quarry, blast) · mining explosion · explosion · chemical explosion · nuclear explosion (nuclear test) · industrial explosion · accidental explosion · experimental explosion · collapse · mine collapse · building collapse · rock burst · landslide · rockslide (rock slide) · debris avalanche · snow avalanche (avalanche) · ice quake (icequake, cryoseism) · volcanic eruption (eruption) · volcanic explosion · sonic boom (sonicboom) · acoustic noise · meteorite (meteor, bolide) · induced or triggered event (induced) · train crash · other event (other) · not reported

PAGER alert levels

PAGER is the USGS estimate of how bad an event was for people, computed from the shaking and the exposed population: green no significant losses expected, yellow local impact, orange a regional disaster, red a national one. Only a few dozen events a year get any alert at all, so minAlertLevel is the short list of quakes that hurt somebody. minAlertLevel: "yellow" keeps yellow, orange and red.

Review status

automatic is the solution a computer published within minutes of the event; reviewed is the record after a seismologist checked it, which can move the epicentre and change the magnitude by a few tenths. reviewStatus: "all" (the default) gives both, and every row carries its own status.

Magnitude types

magnitudeType says which scale the number comes from: mww and mw* moment magnitude (the standard for large events), mb body wave, ms_20 surface wave, ml/md local and duration magnitudes used for small regional quakes, mi/mwp rapid estimates, uk/Unknown where the contributing network did not say. Magnitudes from different scales are close but not identical, which is one reason a fresh event's number keeps moving.

Shaking: MMI and CDI

Both are Modified Mercalli intensities, 1 to 10+. mmi is what ShakeMap computes from instruments and models for the worst-shaken place; cdi is the strongest intensity the public reported through Did You Feel It. Either can be missing, and they often differ.

Examples

This week's significant earthquakes worldwide (M4.5+)

{ "sinceHours": 168, "minMagnitude": 4.5, "maxItems": 15 }

Everything within 300 km of central Tokyo in the last 90 days, with the distance per row

{ "latitude": 35.68, "longitude": 139.69, "radiusKm": 300, "sinceHours": 2160, "minMagnitude": 3.5, "maxItems": 15 }

California over the last 30 days, largest first, four columns only

{ "region": ["California"], "sinceHours": 720, "minMagnitude": 2.5, "sortBy": "magnitude", "fields": ["magnitude", "place", "depthKm", "time"], "maxItems": 15 }

The quakes people reported feeling, whatever their magnitude

{ "minFeltReports": 50, "sinceHours": 4320, "maxItems": 10 }

The PAGER alert list of 2026, biggest first

{ "startTime": "2026-01-01", "minAlertLevel": "yellow", "sortBy": "magnitude", "maxItems": 10 }

Three USGS event ids, resolved to rows

{ "eventIds": ["us6000u18k", "ci38457511", "official20110311054624120_30"] }

A scheduled watch on Kazakhstan and Central Asia that only reports what is new

{ "region": ["Kazakhstan", "Central Asia"], "sinceHours": 24, "onlyNew": true, "trackRevisions": true, "maxItems": 100 }

Output

One row per event. A real row from the cloud run Z5tKlj689yVfZ9rZa (an eventIds lookup of the M7.7 Panama earthquake of 9 October 2026):

{
"eventId": "us6000u18k",
"time": "2026-10-09T17:56:06.036Z",
"place": "12 km WSW of Pitaloza Arriba, Panama",
"url": "https://earthquake.usgs.gov/earthquakes/eventpage/us6000u18k",
"fetchedAt": "2026-10-09T20:54:45.331Z",
"found": true,
"updatedAt": "2026-10-09T20:49:31.001Z",
"magnitude": 7.7,
"magnitudeType": "mww",
"title": "M 7.7 - 12 km WSW of Pitaloza Arriba, Panama",
"latitude": 7.5868,
"longitude": -80.769,
"depthKm": 12.647,
"distanceKm": null,
"alert": "red",
"tsunamiFlag": false,
"significance": 2483,
"feltReports": 568,
"cdi": 8.5,
"mmi": 8.714,
"eventType": "earthquake",
"status": "reviewed",
"network": "us",
"detailUrl": "https://earthquake.usgs.gov/fdsnws/event/1/query?eventid=us6000u18k&format=geojson"
}
FieldTypeMeaning
eventIdstringThe catalog's id, the last part of an event page link. Always present.
foundbooleanTrue for an event read from the catalog, false only on the marker row of an unknown eventIds value. Always present.
timestringOrigin time, ISO 8601 UTC. Null only on a found: false row.
updatedAtstringWhen the catalog last changed the record, UTC.
magnitudenumberSize on the scale in magnitudeType. Null for a few entries without one.
magnitudeTypestringmww, mb, ml, … — see Magnitude types.
placestringThe catalog's own description of the epicentre's location.
titlestringMagnitude and place in one line, as USGS writes it.
latitude, longitudenumberEpicentre in decimal degrees (north/east positive).
depthKmnumberDepth below the surface in km; can be slightly negative.
distanceKmnumberGreat-circle km from the latitude/longitude in the input to the epicentre. Null when the run had no centre point.
alertstringPAGER level green/yellow/orange/red; null for the vast majority of events.
tsunamiFlagbooleanTrue when a tsunami message was issued for the event.
significancenumberUSGS sig score from magnitude, shaking, felt reports and impact.
feltReportsnumberDid You Feel It responses so far; null where nobody reported.
cdinumberStrongest shaking the public reported (MMI scale); null without felt reports.
mminumberStrongest shaking ShakeMap estimates; null without a ShakeMap.
eventTypestringearthquake or one of the other kinds.
statusstringreviewed or automatic.
networkstringContributing seismic network code (us, ci, ak, …).
urlstringThe USGS event page. Always present.
detailUrlstringEvent web service link returning this one event with all its products.
fetchedAtstringWhen the run read the catalog, UTC. Always present.

Dataset views: Earthquakes (time, magnitude, place, depth, coordinates, alert, tsunami, felt reports, kind, link), Shaking and impact (alert, MMI, CDI, felt reports, significance, tsunami, solution, fetched), Epicentres (ids, coordinates, depth, distance, magnitude type, revision time, found).

A run also writes a SUMMARY record to its key-value store: what was searched, how many events matched the filters, how many rows were written, which ids were unknown, how many requests were made and why the run stopped.

Use it from code / agents

curl -X POST "https://api.apify.com/v2/acts/yadroo~usgs-earthquakes/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"sinceHours":168,"minMagnitude":4.5,"maxItems":15}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/usgs-earthquakes').call({
latitude: 35.68, longitude: 139.69, radiusKm: 300, sinceHours: 2160, minMagnitude: 3.5, maxItems: 15,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/usgs-earthquakes").call(run_input={
"eventIds": ["us6000u18k", "ci38457511"], "fields": ["magnitude", "place", "alert", "mmi"]
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

MCP: add https://mcp.apify.com to Claude, Cursor or any MCP client and call the yadroo/usgs-earthquakes tool with the same JSON input. Agents see the field descriptions of the input schema, so region, eventIds and fields are usable without reading this page — and fields keeps the payload small, which matters when the answer goes into a context window.

Pricing

Pay per event: $0.001 per run start + $0.001 per earthquake row. Both are charged on the actor's free tier; Apify's plan discounts apply to the row event automatically (Bronze $0.0009, Silver $0.0008, Gold and above $0.0007).

RunRowsCost
This week's M4.5+ events150.001 + 15 × 0.001 = $0.016
The default run (M2.5+, last week)500.001 + 50 × 0.001 = $0.051
A 100-id lookup1000.001 + 100 × 0.001 = $0.101
The largest run the schema allows20000.001 + 2000 × 0.001 = $2.001

Every run is charged the start event, also a run that finds nothing. Every row written to the dataset is charged, including the found: false marker row of an eventIds value the catalog does not know — it is an answer, and the run says so in its status. maxItems is the hard cap on rows and so on cost; on top of it, Apify's Maximum cost per run stops the run when the budget is used up, keeping (and charging) only the rows already paid for and saying so in the run status: "Stopped at your spending limit: 3 rows delivered."

Limits & FAQ

Measured speed (2026-10-09, Apify cloud, 256 MB). A search run makes one counting request per area plus one request per 1 000 events, paced one request per second. Measured: the default run (50 rows, magnitude 2.5+, last week) took 5 s with 2 requests; the widest search the schema allows returned 1 345 rows in 12 s with 3 requests (magnitude 1+ worldwide for a week, maxItems 2000) — about 110 rows a second once a page arrives, and roughly 15 requests a minute at the actor's own pace. No HTTP 429 and no Retry-After was seen in any run. An eventIds lookup is the slow job, because each id is one request: about 1 id a second, so 100 ids need around 100 s. Everything the schema allows fits comfortably into the default run timeout of 900 s.

Rate limits. USGS publishes no request limit and no quota for this service (checked 2026-10-09), so this actor sets its own polite pace: one request per second per host, retries included, with exponential backoff and Retry-After honoured on HTTP 429 and 5xx. There is no robots.txt on the host (it answers 404), so there is no Crawl-delay to follow. A bigger run does not go faster — it just uses more one-second-apart requests.

The run stops before it is killed. If the clock or your spending limit runs out, the run ends successfully with the rows it has and says so in its status ("Stopped before the run timeout: N rows saved", "Stopped at your spending limit: N rows delivered") instead of being cut off without a word.

One query hands out at most 20 000 events. That is the service's own limit. The actor's maxItems goes to 2 000, so it never runs into it; when your filters match more than 20 000 events the run says so in the status and returns the newest (or largest, with sortBy: "magnitude") ones first. Narrow the window for the rest.

Magnitudes and epicentres change. A new event is published automatically within minutes and revised for hours or days: magnitude, depth, epicentre, alert level and felt count all move. status tells you whether a record is reviewed or still automatic, updatedAt when it last changed. A schedule with onlyNew alone delivers each event once, as first seen; add trackRevisions to receive it again with its corrected numbers (a new row, charged as a row).

Impact fields are rare. alert (PAGER) exists for a few dozen events a year. mmi needs a ShakeMap, cdi and feltReports need public reports, and almost no event before about 2010 has any of them. The tsunami flag means a message was issued, not that a wave arrived, and is empty for most older events.

Felt reports are US-heavy and keep growing. Did You Feel It is well known in the United States and little known elsewhere, so a Californian M3 can have more reports than a much larger quake abroad, and a count read an hour after an event is lower than the final one.

Detection is not uniform. The dense U.S. networks catalog quakes down to magnitude 0, while most of the world is complete only from about magnitude 4.5. Counting small quakes across regions therefore compares network density, not seismicity.

It is a catalog, not a warning system. No forecasts, no casualty figures, no building-level damage, no waveform data, and no alerting: a run reads what the catalog holds at that moment. For the non-earthquake entries (quarry blasts, explosions, ice quakes, landslides) use eventTypes; leave it empty and they are included.

Empty is a valid answer. Narrow filters — orange alerts in one month, M5+ in a quiet region — legitimately match nothing. The run then succeeds with zero rows and says "the filters matched nothing in that window", while a filter value it cannot resolve (a misspelled region) fails the run immediately with the closest values named.

The service can be slow exactly when you need it. USGS is busiest right after a large earthquake. The actor retries with backoff and, if it still cannot read, ends with a clear error instead of hammering the service.

Questions or problems: open an issue on the Issues tab of this actor.


Made by Yadroo. Sibling actors: nasa-eonet-events, nasa-asteroid-approaches, open-meteo-weather, osm-geocode, public-holidays.