USGS Earthquakes 2025 dataset

A Brightfield dashboard of the USGS's 2025 earthquakes of magnitude 4.5 and up. The main panel maps them by longitude and latitude, shaded by how many fall in each hexagon, under the title "A fifth of 2025's M4.5+ earthquakes (1,794 of 8,502) struck off Kamchatka, 1,607 of them from the M8.8 of 29 July on". Below it, earthquakes per week; beside it, a histogram of depth, its counts on a log scale, and a count by magnitude scale.
Credit: U.S. Geological Survey

The earthquakes of magnitude 4.5 and up that the US Geological Survey's own network reported in 2025, from the USGS earthquake catalogue. Each row says when and where one struck, its depth, its magnitude and the scale that magnitude was measured on, and the USGS's description of the place. The recipe's describe step recognises latitude and longitude as coordinates, so a dashboard can draw the earthquakes straight onto a map. The USGS revises events after the fact, so the recipe reads the catalogue as it stands on the day it runs: it kept 8,502 earthquakes on 26 October 2026.

Load it

These commands install arc, Meridian’s open-source Protocol runner, clone the open-analytics repository and run this Protocol, which writes build/earthquakes.parquet in open-analytics/examples/usgs-earthquakes-2025.

shell
curl -fsSL https://install.meridian.online/arc | bash
git clone https://github.com/meridian-online/open-analytics
cd open-analytics/examples/usgs-earthquakes-2025 && arc run

arc runs the Protocol’s SQL on DuckDB 2.x, which its installer puts in place when no DuckDB is on your PATH, saying what to add to PATH; the last step, which describes the Parquet, needs finetype 0.6.54 or later on your PATH.

Columns

NameTypeDescription
timedatetimeWhen the earthquake struck, in UTC.
weekdateThe Monday of the week it struck, in UTC.
latitudenumberEpicentre latitude, in decimal degrees.
longitudenumberEpicentre longitude, in decimal degrees.
depthnumberDepth of the event, in kilometres.
magnumberMagnitude, on the scale named in magType.
magTypestringThe USGS's code for the method or algorithm the magnitude was computed with, such as mb or mww.
magnitude_scalestringmagType grouped into the scale it belongs to: body wave (mb), moment (Mw), local (ML) or surface wave (Ms). A code that belongs to none of those, which a later run of the live catalogue can bring, is kept as the USGS's own code rather than guessed at.
placestringThe USGS's description of where it struck, relative to the nearest named place.

Source and licence

Licence

Sources

Meridian hosts none of this data: the Protocol downloads it, from the address its fetch step names, when you run it.

The steps

5 stepsduckdb >=1.2

Every step runs in order. op: steps are typed, versioned operators; sql: steps are DuckDB models.

  1. 01fetch_earthquakesop: http_fetch@1

    Fetch the USGS FDSN event service's CSV of every 2025 event of magnitude 4.5 and up. No sha256 pin, deliberately: the USGS revises events after the fact, so each run reads the catalogue as it stands that day.

    producesbuild/earthquakes_2025.csv
    with
    url: https://earthquake.usgs.gov/fdsnws/event/1/query?format=csv&starttime=2025-01-01&endtime=2026-01-01&minmagnitude=4.5
    out: build/earthquakes_2025.csv
    headers:
      User-Agent: Meridian Protocol (open-analytics demo; research@meridian.online)
  2. 02raw_earthquakessql: models/01_raw_earthquakes.sql

    Keep only events the USGS's own network reported (net = us) of type earthquake, in seven columns, with time as a UTC timestamp. Checks that every event is in 2025 at magnitude 4.5 or above, and that between 8,000 and 9,000 are kept.

    readsbuild/earthquakes_2025.csvproducesraw_earthquakes
    model
    models/01_raw_earthquakes.sql
  3. 03earthquakessql: models/02_earthquakes.sql

    Add the week each earthquake struck and the scale its magnitude was measured on: the table a dashboard reads.

    producesearthquakes
    model
    models/02_earthquakes.sql
  4. 04export_earthquakesop: parquet_export@1

    Write build/earthquakes.parquet, on your own disk. ORDER BY ALL makes the bytes reproducible for a given day's catalogue, not across days.

    readsearthquakesproducesbuild/earthquakes.parquet
    with
    input: earthquakes
    dest: build/earthquakes.parquet
    compression: zstd
    order_by: ALL
  5. 05describeop: datapackage_describe@1

    Emit datapackage.json from the built Parquet: finetype types every column, and descriptor.overrides.json adds the curated title, licence, sources and per-field prose.

    readsbuild/earthquakes.parquetdescriptor.overrides.jsonproducesdatapackage.json
    with
    parquet: build/earthquakes.parquet
    overrides: descriptor.overrides.json
    out: datapackage.json