USGS Earthquake Data Scraper — Events by Time & Area
Pricing
from $13.40 / 1,000 seismic event records
USGS Earthquake Data Scraper — Events by Time & Area
Scrape USGS earthquake data from the official FDSN event service: magnitude, location, depth, time and event ID for every event in your time window, with optional magnitude and bounding-box filters. One record per event. Pay per result.
Pricing
from $13.40 / 1,000 seismic event records
Rating
0.0
(0)
Developer
NexGen Watch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
🔔 USGS Earthquake Data Scraper — Events by Time & Area
USGS earthquake data as rows: every event in your time window from the official USGS FDSN service, with magnitude, location, depth, time and event ID.
Scrape USGS earthquake events (FDSN): magnitude, location, depth, time and event ID. Run it once and you get the current records as a dataset; put it on a schedule to keep the list current.
Structured seismic event records from the official U.S. Geological Survey FDSN Event web service
(earthquake.usgs.gov/fdsnws/event/1), read keyless over GeoJSON. One record per event in your requested
time window — official event parameters for exposure joins, carried source-native and verbatim.
Output is one seismic_event_record row per result; billing is pay-per-event, the value event being one seismic event record (a $0.02 start fee per run, then $0.02 per seismic event record). Source: earthquake.usgs.gov.
Who buys this
- Insurance and reinsurance analysts joining USGS earthquake events to exposure.
- Risk, logistics and supply-chain teams screening earthquake data near sites.
- Researchers and journalists pulling earthquake data by time, magnitude and area.
📊 Sample Output
Real rows from run Py4Ow3x6BlyKTWIt6 on build 0.1.8 (2026-09-27), the same input as the Quick start below — every value is as the source published it (emails masked, long text shortened):
| event_id | event_type | place | time_epoch_ms | updated_epoch_ms | status |
|---|---|---|---|---|---|
| hv74998796 | earthquake | 33 km SW of Laupāhoehoe, Hawaii | 1783468799850 | 1783469002940 | automatic |
| nc75391711 | earthquake | 0 km SSW of Angwin, CA | 1783468344700 | 1784500643591 | reviewed |
| tx2026nhcgxp | earthquake | 7 km NNW of Nordheim, Texas | 1783468343897 | 1783527550051 | reviewed |
| nc75391706 | earthquake | 5 km NW of The Geysers, CA | 1783468294880 | 1784496034958 | reviewed |
| aka2026njftrr | earthquake | 50 km SSE of Adak, Alaska | 1783468167682 | 1784177495329 | reviewed |
| uu80144826 | earthquake | 17 km NE of Milford, Utah | 1783468025770 | 1783519782360 | reviewed |
| uu80144821 | earthquake | 16 km NE of Milford, Utah | 1783467842050 | 1783518875250 | reviewed |
| nn00921304 | earthquake | 17 km NNW of Indian Springs, Nevada | 1783467391025 | 1784053297945 | reviewed |
The run finished with the status message: NORMAL: 50 unique rows (0 duplicates collapsed) from 2026-07-08T00:00:00. billable=50
✅ What you get
Each row is flat JSON with these fields (from the dataset schema and the sample run; a field the source does not publish for a given row is null):
record_type(string/null) — e.g.seismic_event_recordevent_id(string/null) — e.g.hv74998796event_type(string/null) — e.g.earthquakemagnitude(number/integer/string/null) — e.g.1.71mag_type(string/null) — e.g.mdplace(string/null) — e.g.33 km SW of Laupāhoehoe, Hawaiitime_epoch_ms(string/integer/null) — e.g.1783468799850updated_epoch_ms(string/integer/null) — e.g.1783469002940status(string/null) — e.g.automaticnet(string/null) — e.g.hvcode(string/null) — e.g.74998796longitude(number/integer/string/null) — e.g.-155.419494628906latitude(number/integer/string/null) — e.g.19.7403335571289depth_km(number/integer/string/null) — e.g.24.8700008392334significance(string/integer/null) — e.g.45tsunami_flag(string/integer/null) — e.g.0nst(string/integer/null) — e.g.20event_url(string/null) — e.g.https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796scope_note(string/null) — e.g.official USGS seismic event record for exposure joins; no PAGER alert, shaking isource_url(string/null) — e.g.https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796source(string/null) — e.g.usgs-earthquake-event-feedrelease_date(string/null) — e.g.2026-07-08T00:00:00observed_at(string/null) — e.g.2026-09-27T16:43:29Zlicense(string/null) — e.g.U.S. Geological Survey (USGS) Earthquake Hazards Program, FDSN Event web serviceattribution(string/null) — e.g.U.S. Geological Survey — Earthquake Hazards Program (https://earthquake.usgs.govrelease_checksum(string/null) — null in every sample rowterminal(string/null) — null in every sample rowscope(string/null) — null in every sample rownote(string/null) — null in every sample rowreported_total(string/integer/null) — null in every sample rowraw_seen(string/integer/null) — null in every sample rowduplicates(string/integer/null) — null in every sample rowunique_found(string/integer/null) — null in every sample rowdelivered(string/integer/null) — null in every sample row
✅ What you get
record_type(string/null) — e.g.seismic_event_recordevent_id(string/null) — e.g.hv74998796event_type(string/null) — e.g.earthquakemagnitude(number/integer/string/null) — e.g.1.71mag_type(string/null) — e.g.mdplace(string/null) — e.g.33 km SW of Laupāhoehoe, Hawaiitime_epoch_ms(string/integer/null) — e.g.1783468799850updated_epoch_ms(string/integer/null) — e.g.1783469002940status(string/null) — e.g.automaticnet(string/null) — e.g.hvcode(string/null) — e.g.74998796longitude(number/integer/string/null) — e.g.-155.419494628906latitude(number/integer/string/null) — e.g.19.7403335571289depth_km(number/integer/string/null) — e.g.24.8700008392334significance(string/integer/null) — e.g.45tsunami_flag(string/integer/null) — e.g.0nst(string/integer/null) — e.g.20event_url(string/null) — e.g.https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796scope_note(string/null) — e.g.official USGS seismic event record for exposure joins; no PAGER alert, shaking isource_url(string/null) — e.g.https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796source(string/null) — e.g.usgs-earthquake-event-feedrelease_date(string/null) — e.g.2026-07-08T00:00:00observed_at(string/null) — e.g.2026-09-19T02:15:04Zlicense(string/null) — e.g.U.S. Geological Survey (USGS) Earthquake Hazards Program, FDSN Event web serviceattribution(string/null) — e.g.U.S. Geological Survey — Earthquake Hazards Program (https://earthquake.usgs.govrelease_checksum(string/null) — null in every sample rowterminal(string/null) — null in every sample rowscope(string/null) — null in every sample rownote(string/null) — null in every sample rowreported_total(string/integer/null) — null in every sample rowraw_seen(string/integer/null) — null in every sample rowduplicates(string/integer/null) — null in every sample rowunique_found(string/integer/null) — null in every sample rowdelivered(string/integer/null) — null in every sample row
✅ What you get
record_type(string/null) — e.g.seismic_event_recordevent_id(string/null) — e.g.hv74998796event_type(string/null) — e.g.earthquakemagnitude(number/integer/string/null) — e.g.1.71mag_type(string/null) — e.g.mdplace(string/null) — e.g.33 km SW of Laupāhoehoe, Hawaiitime_epoch_ms(string/integer/null) — e.g.1783468799850updated_epoch_ms(string/integer/null) — e.g.1783469002940status(string/null) — e.g.automaticnet(string/null) — e.g.hvcode(string/null) — e.g.74998796longitude(number/integer/string/null) — e.g.-155.419494628906latitude(number/integer/string/null) — e.g.19.7403335571289depth_km(number/integer/string/null) — e.g.24.8700008392334significance(string/integer/null) — e.g.45tsunami_flag(string/integer/null) — e.g.0nst(string/integer/null) — e.g.20event_url(string/null) — e.g.https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796scope_note(string/null) — e.g.official USGS seismic event record for exposure joins; no PAGER alert, shaking isource_url(string/null) — e.g.https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796source(string/null) — e.g.usgs-earthquake-event-feedrelease_date(string/null) — e.g.2026-07-08T00:00:00observed_at(string/null) — e.g.2026-09-19T01:32:41Zlicense(string/null) — e.g.U.S. Geological Survey (USGS) Earthquake Hazards Program, FDSN Event web serviceattribution(string/null) — e.g.U.S. Geological Survey — Earthquake Hazards Program (https://earthquake.usgs.govrelease_checksum(string/null) — null in every sample rowterminal(string/null) — null in every sample rowscope(string/null) — null in every sample rownote(string/null) — null in every sample rowreported_total(string/integer/null) — null in every sample rowraw_seen(string/integer/null) — null in every sample rowduplicates(string/integer/null) — null in every sample rowunique_found(string/integer/null) — null in every sample rowdelivered(string/integer/null) — null in every sample row
What you get
One seismic_event_record per event:
event_id,event_type,magnitude,mag_type,place,status,net,codetime_epoch_ms,updated_epoch_ms— origin and last-revision timestampslongitude,latitude,depth_km— location for spatial/exposure joinssignificance,tsunami_flag,nst,event_url,release_date,license,attribution
⚙️ Sample inputs
1. Quick start — the Store example (this is what the sample above came from)
{"startTime": "2026-07-01","endTime": "2026-07-08","maxRecords": 10}
The sample run charged exactly: 1 × $0.02 apify-actor-start + 50 × $0.02 seismic_event_record = $1.02 on the Free tier — every delivered row was billed.
If you leave maxRecords out, the run delivers at most 50 rows (the schema default); pass a number up to 20000 for a bigger export. An explicit value is always honoured up to that maximum.
2. A smaller, narrowed run
{"startTime": "2026-07-01","endTime": "2026-07-08","maxRecords": 5}
Caps the run at 5 rows — about $0.12 on the Free tier ($0.02 start + 5 × $0.02). startTime narrows what the source is asked for.
3. A full-size run
{"startTime": "2026-07-01","endTime": "2026-07-08","maxRecords": 5000}
Up to 5000 rows — about $100.02 on the Free tier ($0.02 start + 5000 × $0.02) if the source has that many; maxRecords goes up to 20000.
🧾 JSON sample record
One real record from run Py4Ow3x6BlyKTWIt6, exactly as it lands in the dataset (emails masked, long text shortened):
{"record_type": "seismic_event_record","event_id": "hv74998796","event_type": "earthquake","magnitude": 1.71,"mag_type": "md","place": "33 km SW of Laupāhoehoe, Hawaii","time_epoch_ms": 1783468799850,"updated_epoch_ms": 1783469002940,"status": "automatic","net": "hv","code": "74998796","longitude": -155.419494628906,"latitude": 19.7403335571289,"depth_km": 24.8700008392334,"significance": 45,"tsunami_flag": 0,"nst": 20,"event_url": "https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796","scope_note": "official USGS seismic event record for exposure joins; no PAGER alert, shaking intensity, or loss estimate is included or generated; this is a run-output feed, not a notification service","source_url": "https://earthquake.usgs.gov/earthquakes/eventpage/hv74998796","source": "usgs-earthquake-event-feed","release_date": "2026-07-08T00:00:00","observed_at": "2026-09-27T16:43:29Z","license": "U.S. Geological Survey (USGS) Earthquake Hazards Program, FDSN Event web service — U.S. Government work, public domain. Official seismic event records only; no forecast, PAGER alert, shaking intensity, or loss estimate is generated or deliv","attribution": "U.S. Geological Survey — Earthquake Hazards Program (https://earthquake.usgs.gov/)"}
🔧 How it works
Source. The actor reads earthquake.usgs.gov — endpoints: https://earthquake.usgs.gov/, https://earthquake.usgs.gov/fdsnws/event/1, https://earthquake.usgs.gov/fdsnws/event/1/query, https://earthquake.usgs.gov/robots.txt. Public pages and feeds only; nothing behind a login.
Transport. Plain HTTPS from the Apify platform, no proxy. robots.txt is read first and a disallowed path is never fetched. Every request carries an identified contact User-Agent. Pacing: CRAWL_DELAY=0.0.
Terminal states. A run ends NORMAL, CAPPED (your cap was reached), PARTIAL (something was withheld and the message says what), GENUINE_EMPTY (the source was read and truly had nothing in scope) or BLOCKED (the source refused or changed shape — the run FAILS loud and bills nothing). A zero-row run is never reported as a silent success.
Charging. Each seismic event record is charged at the moment it is pushed (seismic_event_record); a row that fails to charge is not delivered, so the dataset count always equals the charged count.
Window & the 20,000-event cap
startTime and endTime (ISO) are required — the feed is never queried unbounded. The FDSN service caps
a single query at 20,000 events; this actor COUNT-probes your window and recursively partitions it so
every underlying query stays under the cap. A window that cannot be split below the cap fails loud (narrow it
or add minMagnitude). Optional minMagnitude and a lat/long bounding box further scope the window.
Revisions & integrity
Records are revision-aware: deduped by event_id + updated timestamp, so a re-reviewed event is a
distinct record and accidental boundary duplicates collapse. A non-JSON (HTML) or non-GeoJSON response fails
loud and bills nothing.
Scope
This is a run-output feed of official event records for exposure joins — not a notification service. It
generates and delivers no forecast, PAGER alert, shaking-intensity, or loss estimate; only the seismic
event parameters are emitted (scope_note on every record states this).
Robots & door
earthquake.usgs.gov/robots.txt returns 404 (no policy); the actor re-reads it every run and STOPS loudly if
USGS ever disallows /fdsnws. It never spoofs or works around a block.
Source & licence
U.S. Geological Survey, Earthquake Hazards Program — U.S. Government work, public domain. Acknowledgement: data from the U.S. Geological Survey (https://earthquake.usgs.gov/).
What is not done. No login, no cookie or CAPTCHA bypass, no private or personal-account data, no browser automation.
⏰ Optional: run it on a schedule
A single run returns the current records. If you also want to be told what changed over time, open the actor in Apify Console → Schedules → Create new, add this actor with the input you want, and pick a cadence:
- Daily —
0 7 * * *(07:00 UTC): catch changes within a day. - Weekly —
0 7 * * 1: a Monday digest.
Each run is independent; keep the same input on the schedule so the results stay comparable. Schedules can also POST results to a webhook (Console → Integrations).
💰 Pricing example
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
Actor Start (apify-actor-start) | $0.02 | $0.02 | $0.02 | $0.02 |
Seismic event record (seismic_event_record) | $0.02 | $0.018 | $0.016 | $0.0134 |
Worked at the live Free-tier price:
- 8 seismic event records: $0.02 start + 8 × $0.02 = $0.18
- 25 seismic event records: $0.02 start + 25 × $0.02 = $0.52
- 50 seismic event records: $0.02 start + 50 × $0.02 = $1.02
A run that delivers zero rows charges the $0.02 start fee only. A BLOCKED run (source refused) fails loud and charges no value event. The start fee is charged once per GB of run memory; the default run memory is 4096 MB.
Yield on the sample run: NORMAL: 50 unique rows (0 duplicates collapsed) from 2026-07-08T00:00:00. billable=50. maxRecords is a hard ceiling on what is delivered and billed, never a target.
⚖️ Legal & ToS
This actor reads public, logged-out pages and feeds published by earthquake.usgs.gov. It collects only what the source publishes to any visitor, keeps to the source's robots rules (checked on every run), identifies itself with a contact User-Agent, and does not access accounts, private data or anything behind authentication. Use the output in line with the source's terms and your local law; the intended use is B2B research and monitoring.
❓ FAQ
Q: Do I need an API key or a login?
A: No. The source (earthquake.usgs.gov) is read logged-out; the input schema has no key field and the actor carries no secrets.
Q: Why did my run return 0 rows?
A: Read the run's status message. GENUINE_EMPTY means the source was read and had nothing in scope for your input; BLOCKED means the source refused and the run failed without billing a value event — retry later or narrow the input. A zero-row run bills the start fee only.
Q: How many rows can one run return?
A: Up to maxRecords (default 50). Raise the cap for a bigger run; you pay per delivered row.
Q: How fresh is the data?
A: Every run reads the source live at run time; nothing is cached between runs. Put it on a schedule for a continuous feed.
Q: What formats can I export?
A: The dataset downloads as JSON, CSV, Excel, XML or RSS from the run's Dataset tab or the Apify API, and any run can push to a webhook or integration.
Q: How is this different from the other NexGen Watch actors actors?
A: Same output shape and billing model; this one covers earthquake.usgs.gov. The siblings under Related Actors cover the other sources or slices — run several on one schedule for a combined feed.
Q: Are there rate limits?
A: The actor paces itself against the source (CRAWL_DELAY=0.0) and honours its robots rules; there is no per-buyer limit beyond your Apify plan's concurrency.
🆘 Troubleshooting
- Run FAILED with BLOCKED → the source refused the request or changed its page shape → nothing was billed beyond the start fee; retry after a while, and if it persists open an Issue with the run id.
- Status says CAPPED → your cap (
maxRecords) was reached → raise it for a bigger run. - Input validation error on start → a field is outside the schema's allowed values → start from the Quick start block and change one field at a time.
- Run TIMED-OUT → a very wide request on a slow day → raise the run timeout in Run options or narrow the input; what was delivered before the timeout is still in the dataset.
🔗 Related Actors
- USDA FDC Portion / Serving Weight Master — One food_portion_record per row of USDA FoodData Central's food_portion table — a food's serving/portion definition: portion ID, food FDC ID, serving…
- USDA FDC Product Update Ledger — One food_update_record per entry in USDA FoodData Central's own product update log — the FDC id, the product description, and the last_updated date,…
- USDA FNDDS Ingredient-Nutrient Matrix — One fndds_nutrient_record per row of USDA FoodData Central's fndds_ingredient_nutrient_value table — a single nutrient value for an FNDDS ingredient…
- USGS MRDS Mineral Occurrence Master — One structured occurrence record per USGS Mineral Resource Data System (MRDS) deposit — the source-native dep_id, deposit name, commodities, coordina…
- Washington Contractor License Registry — One record per Washington L&I contractor licence/registration (number, type, effective/expiry, licence status + suspension date, UBI, principal) from…
- Washington Transportation-Industry Business Licenses — One record per Washington Department of Licensing transportation-industry business licence (tow-truck operators, vehicle transporters, wreckers, deal…
- 🏢 About NexGen Watch — NexGen Watch is a catalog of more than 300 public data actors built on official sources, pay-per-result. Browse the catalog at apify.com/nexgenwatch.
⭐ Found this useful?
If this actor saved you a manual check, a quick review on the Apify Store helps other teams find it. Feature request or a source that changed? Open it from the Issues tab — every one is read.
