# USGS Earthquakes Scraper: Quakes by Place and Date | $1/1K (`one_dollar_store/usgs-earthquakes-scraper`) Actor

$1 per 1,000 results, platform usage included. Earthquake events from the official USGS catalog: time, magnitude, place, depth, latitude, longitude, alert level, felt reports and event link. Filter by date, magnitude, depth, a radius around a point, or a map box. No key.

- **URL**: https://apify.com/one_dollar_store/usgs-earthquakes-scraper.md
- **Developed by:** [One Dollar Store](https://apify.com/one_dollar_store) (community)
- **Categories:** Other, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## USGS Earthquakes Scraper: earthquakes by date, place and magnitude

**$1 per 1,000 earthquakes. Platform usage included. No rental, no minimum.**

Pull earthquake events from the official USGS catalog (the FDSN event service that serves earthquake.usgs.gov). Pick a date range, a minimum magnitude, and optionally a place: a radius around a point, a map box, or a word in the place name such as Alaska or Japan. Each event comes back as one row with time, magnitude, place, depth, latitude, longitude, alert level, felt reports and a link to the USGS event page. No API key and no account with USGS.

[Open it in Apify Console](https://console.apify.com/actors/xRruoYMgm7eaKRoGW/input)

### What it costs

| Earthquakes | This actor |
|---|---|
| 1,000 | $1.00 |
| 10,000 | $10.00 |
| 100,000 | $100.00 |

Plus $0.001 per run. One flat price, platform usage included, so there is no separate compute or proxy bill. Only event rows are charged. A run returns at most 10,000 events, so 100,000 events is ten runs, for example one per year of data. A weekly refresh of the 500 largest events of the last seven days costs about $0.50 a run, or about $2.00 a month.

### Why use it

- **Official data, no key.** The rows come straight from the USGS earthquake catalog. Nothing to sign up for on the USGS side.
- **Search by place without writing coordinates.** Use a radius around a point, a map box, or a word from the place text. The place text is what USGS writes for each event, for example "45 km SSE of Hachinohe, Japan".
- **Flat rows.** Magnitude, depth, coordinates and times are plain numbers and ISO dates, ready for a spreadsheet, a database or a map. Times are UTC.
- **Impact fields when USGS has them.** Alert level, felt reports, intensity, significance and the tsunami flag are on the row.
- **Safe for scheduled jobs.** A search that matches nothing ends cleanly with zero rows. A bad date or an incomplete radius ends with a short message, not a crash.

### Quick start

1. Open the actor, keep the example values, press **Start**.
2. Or paste this input, which returns the 100 newest magnitude 4 and up events of the last 30 days:

```json
{ "daysBack": 30, "minMagnitude": 4, "maxItems": 100 }
```

3. Download the results as JSON, CSV or Excel, or read them through the API.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~usgs-earthquakes-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"daysBack": 30, "minMagnitude": 4, "maxItems": 100}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/usgs-earthquakes-scraper").call(
    run_input={"daysBack": 30, "minMagnitude": 4, "maxItems": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["time"], item["magnitude"], item["place"])
```

### Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

```
https://mcp.apify.com?tools=one_dollar_store/usgs-earthquakes-scraper
```

Then ask, for example: "List the magnitude 5 and up earthquakes of the last 30 days, largest first, with place and depth."

### Switching from another earthquake scraper

Time range is `daysBack`, or `startDate` and `endDate` (YYYY-MM-DD, UTC). Size is `minMagnitude` and `maxMagnitude`. Place is `latitude`, `longitude` and `maxRadiusKm`, or the box fields `minLatitude`, `maxLatitude`, `minLongitude` and `maxLongitude`, or the word filter `placeContains`. The core output fields are `id`, `time`, `magnitude`, `place`, `latitude`, `longitude` and `depthKm`. One row is one event.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `daysBack` | number | 7 | Only events from the last N days, counted back from now (UTC). Ignored when `startDate` is set. |
| `startDate` | text | empty | First day to include, YYYY-MM-DD (UTC). |
| `endDate` | text | now | Last day to include, YYYY-MM-DD (UTC). |
| `minMagnitude` | number | none | Only events at or above this magnitude. |
| `maxMagnitude` | number | none | Only events at or below this magnitude. |
| `placeContains` | text | none | Keep only events whose place text contains this word, without regard to case. |
| `latitude`, `longitude`, `maxRadiusKm` | numbers | none | Radius search. All three are needed together. Radius up to 20,001 km. |
| `minLatitude`, `maxLatitude`, `minLongitude`, `maxLongitude` | numbers | none | Map box. Ignored when a radius is set. |
| `minDepthKm`, `maxDepthKm` | numbers | none | Depth range in kilometres. |
| `eventType` | choice | earthquake | Earthquake, any type, quarry blast, explosion or ice quake. |
| `reviewStatus` | choice | any | Reviewed events only, automatic ones only, or both. |
| `alertLevel` | choice | any | Only events with this PAGER alert color (green, yellow, orange, red). |
| `orderBy` | choice | time | Newest first, oldest first, largest magnitude first or smallest first. |
| `maxItems` | number | 100 | Most events in the run. Minimum 10, maximum 10,000. |

When the list is longer than `maxItems`, `orderBy` decides which events you get. With the default you get the newest. With largest first you get the biggest events of the period.

### Output fields

| Field | Meaning |
|---|---|
| `id` | USGS event ID. |
| `time` | When the event happened, UTC, ISO 8601. |
| `magnitude`, `magnitudeType` | Preferred magnitude and the method behind it (for example mww, mb, ml). |
| `place`, `title` | The place text USGS writes, and a short title that joins magnitude and place. |
| `latitude`, `longitude`, `depthKm` | Epicenter and depth in kilometres. |
| `type`, `status` | Kind of event, and whether it is reviewed or still an automatic solution. |
| `alert` | PAGER impact color, when USGS has set one. |
| `tsunami` | True for large events in ocean regions, where a tsunami is possible. It does not mean one happened. |
| `significance` | USGS significance number. Larger means more significant. |
| `feltReports`, `communityIntensity`, `instrumentalIntensity` | Felt reports and the highest intensities from reports and from sensors, when available. |
| `stationsUsed`, `azimuthalGapDeg`, `nearestStationDeg`, `rmsSeconds` | Quality numbers for the location, when available. |
| `network` | Code of the network behind the preferred solution. |
| `updated` | When USGS last changed the record, UTC. |
| `url`, `detailUrl` | The USGS event page and the full GeoJSON detail of the event. |
| `source`, `scrapedAt` | Where the row came from and when this run read it. |

Fields USGS leaves empty are left out of the row, so small events often have no `alert`, `feltReports` or intensity.

### Sample results

Real rows from a test run on 20 October 2026: the newest magnitude 4 and up events of the last 30 days.

```json
[
  {"id": "us6000u3jl", "time": "2026-10-20T04:20:38.737Z", "magnitude": 6.3, "magnitudeType": "mww", "place": "197 km NW of Port-Olry, Vanuatu", "title": "M 6.3 - 197 km NW of Port-Olry, Vanuatu", "latitude": -13.9906, "longitude": 165.5892, "depthKm": 16, "type": "earthquake", "status": "reviewed", "alert": "green", "tsunami": true, "significance": 611, "feltReports": 1, "communityIntensity": 3.4, "instrumentalIntensity": 0, "stationsUsed": 138, "azimuthalGapDeg": 27, "nearestStationDeg": 6.641, "rmsSeconds": 0.81, "network": "us", "updated": "2026-10-20T05:09:13.719Z", "url": "https://earthquake.usgs.gov/earthquakes/eventpage/us6000u3jl", "detailUrl": "https://earthquake.usgs.gov/fdsnws/event/1/query?eventid=us6000u3jl&format=geojson", "source": "USGS FDSN event service", "scrapedAt": "2026-10-20T05:51:16.374Z"},
  {"id": "us6000u3jd", "time": "2026-10-20T02:54:15.972Z", "magnitude": 5, "magnitudeType": "mb", "place": "Pagan region, Northern Mariana Islands", "title": "M 5.0 - Pagan region, Northern Mariana Islands", "latitude": 18.2529, "longitude": 146.0345, "depthKm": 129.361, "type": "earthquake", "status": "reviewed", "tsunami": false, "significance": 385, "stationsUsed": 71, "azimuthalGapDeg": 74, "nearestStationDeg": 3.011, "rmsSeconds": 1.01, "network": "us", "updated": "2026-10-20T05:05:28.819Z", "url": "https://earthquake.usgs.gov/earthquakes/eventpage/us6000u3jd", "detailUrl": "https://earthquake.usgs.gov/fdsnws/event/1/query?eventid=us6000u3jd&format=geojson", "source": "USGS FDSN event service", "scrapedAt": "2026-10-20T05:51:16.532Z"},
  {"id": "us6000u3db", "time": "2026-10-19T16:13:53.665Z", "magnitude": 4.6, "magnitudeType": "mb", "place": "south of the Fiji Islands", "title": "M 4.6 - south of the Fiji Islands", "latitude": -23.5497, "longitude": 179.8713, "depthKm": 536.111, "type": "earthquake", "status": "reviewed", "tsunami": false, "significance": 326, "stationsUsed": 35, "azimuthalGapDeg": 126, "nearestStationDeg": 6.021, "rmsSeconds": 0.69, "network": "us", "updated": "2026-10-19T16:29:35.040Z", "url": "https://earthquake.usgs.gov/earthquakes/eventpage/us6000u3db", "detailUrl": "https://earthquake.usgs.gov/fdsnws/event/1/query?eventid=us6000u3db&format=geojson", "source": "USGS FDSN event service", "scrapedAt": "2026-10-20T05:51:17.164Z"}
]
```

### Limits

- **10,000 events per run.** For more, run again with a different date range, for example one run per year.
- **Speed.** A 100 event run takes 6 to 38 seconds. A run of 2,267 events took just under 5 minutes in our tests: USGS needed 18 to 21 seconds for each page of 2,000 events, and rows are saved at about 8 a second. A full 10,000 event run takes roughly 20 to 25 minutes, so the run timeout is set to one hour by default. If you lower it, the run stops cleanly before the limit and keeps what it has.
- **Rate limit.** USGS does not publish a number for this service. The actor sends one request at a time, at most one per second, with a User-Agent that names the actor, and it tries a failed request up to three times with a pause between tries.
- **Place text is USGS wording.** `placeContains` matches the place text as USGS writes it, in English, for example "45 km SSE of Hachinohe, Japan" or "south of the Fiji Islands". It reads up to 40,000 events and then stops, so combine it with dates or a magnitude. For an exact area use the radius or the map box.
- **Events change.** USGS revises magnitudes and locations, and an automatic solution becomes reviewed later. `updated` shows the last change. A row is the record as USGS held it at the time of the run.
- **Not every event is equal.** Small events are reported by the contributing networks, and coverage is not the same in every country. Many fields (alert, felt reports, intensity) exist only for some events and are left out of the row when empty.
- **UTC and kilometres.** All times are UTC. Depth is in kilometres.

### FAQ

**How much does it cost to collect 10,000 earthquakes?**
$10, plus $0.001 for each run.

**Do I pay for compute or proxy on top?**
No. Platform usage is included in the $1 per 1,000 price. No proxy is used.

**Do I need an API key or a USGS account?**
No. The actor reads the public USGS event service.

**How do I get the earthquakes near a city or in a country?**
For a city, give its latitude and longitude and a radius in kilometres. For a region, give a map box. For a country or region name, use `placeContains`, for example Japan. The radius and box are exact. The word filter depends on how USGS writes the place.

**How current is the data?**
The actor reads the USGS catalog at the moment you run it. USGS adds an event when its networks report it, and may revise it afterwards.

**Is it legal?**
The actor reads earthquake data that USGS publishes openly for public use, and it does not log in to anything. How you use the data is up to you: follow USGS's terms and the law where you live.

**Is this an official USGS product?**
No. It is an independent tool and is not affiliated with or endorsed by USGS.

**Do I need an Apify account?**
Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can [sign up here](https://www.apify.com?fpr=ymnoit). This is a referral link and it costs you nothing.

**Is there a limit on the free plan?**
Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

### More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

**Health and science**

- [NPI Provider Search](https://apify.com/one_dollar_store/npi-providers-search): US healthcare providers from the NPI registry.
- [PubMed Articles Scraper](https://apify.com/one_dollar_store/pubmed-articles-scraper): Biomedical articles with abstracts and authors.
- [ClinicalTrials.gov Scraper](https://apify.com/one_dollar_store/clinical-trials-search): Clinical studies by condition, drug or sponsor.
- [Product Recalls Scraper](https://apify.com/one_dollar_store/consumer-product-recalls-cpsc): US consumer product recalls from the CPSC.
- [Crossref Scraper](https://apify.com/one_dollar_store/crossref-doi-metadata): Scholarly works by DOI, title or author.
- [EPA ECHO Scraper](https://apify.com/one_dollar_store/epa-echo-facility-compliance): US facility inspections and violations.
- [NIH RePORTER Scraper](https://apify.com/one_dollar_store/nih-reporter-grants): US NIH research grants and awards.
- [FDA Recalls Scraper](https://apify.com/one_dollar_store/fda-recalls-scraper): US FDA enforcement reports and recalls.
- [CMS Hospital Quality](https://apify.com/one_dollar_store/cms-hospital-quality-data): US hospital ratings and quality measures.
- [FDA 510(k) Scraper](https://apify.com/one_dollar_store/fda-510k-device-clearances): Cleared medical devices with applicant and date.

### Changelog

- October 2026: first release.

# Actor input Schema

## `daysBack` (type: `integer`):

Only events from the last N days, counted back from now (UTC). Ignored when you set a start date.

## `startDate` (type: `string`):

First day to include, as YYYY-MM-DD (UTC). Leave empty to use Days back.

## `endDate` (type: `string`):

Last day to include, as YYYY-MM-DD (UTC). Leave empty for now.

## `minMagnitude` (type: `number`):

Only events at or above this magnitude. A higher value gives fewer, larger events; leave it empty for every event the catalog holds.

## `maxMagnitude` (type: `number`):

Only events at or below this magnitude. Leave empty for no upper limit.

## `placeContains` (type: `string`):

Keep only events whose place text contains this word, for example Alaska, Japan or Chile. The text is matched without regard to case. For an exact area use the radius or the map box below.

## `latitude` (type: `number`):

Latitude of a point for a radius search, from -90 to 90. Use together with longitude and radius.

## `longitude` (type: `number`):

Longitude of a point for a radius search, from -180 to 180.

## `maxRadiusKm` (type: `number`):

Distance from the center point, up to 20,001 km.

## `minLatitude` (type: `number`):

Southern edge of a map box, from -90 to 90. A map box and a radius cannot be combined; the radius wins.

## `maxLatitude` (type: `number`):

Northern edge of a map box, from -90 to 90.

## `minLongitude` (type: `number`):

Western edge of a map box, from -180 to 180.

## `maxLongitude` (type: `number`):

Eastern edge of a map box, from -180 to 180.

## `minDepthKm` (type: `number`):

Only events at least this deep, in kilometres.

## `maxDepthKm` (type: `number`):

Only events at most this deep, in kilometres.

## `eventType` (type: `string`):

Earthquakes only, or other seismic event types the catalog also holds.

## `reviewStatus` (type: `string`):

Reviewed events have been checked by a seismologist. Automatic ones are the first computer solution.

## `alertLevel` (type: `string`):

Only events with this PAGER alert color (estimated impact). Most events have no alert.

## `orderBy` (type: `string`):

Which events come first when the list is longer than Maximum results.

## `maxItems` (type: `integer`):

The run stops after this many events. Minimum 10, maximum 10,000.

## Actor input object example

```json
{
  "daysBack": 30,
  "startDate": "2026-01-01",
  "endDate": "2026-01-31",
  "minMagnitude": 4.5,
  "placeContains": "Japan",
  "latitude": 35.68,
  "longitude": 139.69,
  "maxRadiusKm": 300,
  "eventType": "earthquake",
  "reviewStatus": "any",
  "alertLevel": "any",
  "orderBy": "time",
  "maxItems": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "daysBack": 30,
    "minMagnitude": 4,
    "eventType": "earthquake",
    "orderBy": "time",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("one_dollar_store/usgs-earthquakes-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "daysBack": 30,
    "minMagnitude": 4,
    "eventType": "earthquake",
    "orderBy": "time",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("one_dollar_store/usgs-earthquakes-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "daysBack": 30,
  "minMagnitude": 4,
  "eventType": "earthquake",
  "orderBy": "time",
  "maxItems": 100
}' |
apify call one_dollar_store/usgs-earthquakes-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,one_dollar_store/usgs-earthquakes-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xRruoYMgm7eaKRoGW/builds/fLl0gOxCVDma6IOPg/openapi.json
