Sample dataset: 26 reported events, not a census
Landslides, as the news saw them.
hazardlens reads global news through GDELT and turns landslide reports into structured, mappable data: where, when, how bad, and the article it came from. Floods got this treatment years ago. Landslides did not.
- landslide events
- 26
- countries
- 8
- date range
- Jul 24 to Oct 2
Source: GDELT 2.0 GKG (global news, updated every 15 minutes). Extracted 2026-10-09 with the documented doc-api-slug-geocode-v1 extractor. Every event carries its provenance.
Recent events
26 reported landslides on the map. Click a marker for sources.
Event feed
Filter the sample by country, confidence, or date. Click a card for full provenance.
26 of 26 events
Method
Exactly what the machine does.
The pipeline is deterministic and auditable: the same artlist responses always produce the same dataset. The extractor's limits are part of the product, printed next to the data, not buried in a footnote.
01
GDELT watches the news
GDELT 2.0 monitors global news in 65+ languages and updates every 15 minutes. hazardlens queries its DOC API in artlist mode, one query per landslide term across 6 languages, paced to respect rate limits.
02
Keyword match on URL slugs
A landslide keyword (English, Spanish, Portuguese, French, German, Italian) in the article URL slug marks a candidate. Slugs are publisher-written topic descriptors, far more precise than theme tags. Election metaphors and opinion pieces are excluded.
03
Slug geocoding with Nominatim
Each candidate's place name is cut from the URL slug, then geocoded with Nominatim (OpenStreetMap), preferring the story's country over the publisher's. Junk fuzzy matches are rejected by country-agreement and name-containment checks.
04
Dedupe, label, publish
Candidates collapse to one event per date, country and grid cell, with merged source links. Every event ships with its extraction method, match tier, confidence and the limits of what was measured.
Known limits
- No article body is fetched or read. Matching is keyword-level on URL slugs, so a follow-up report can look like a new event.
- Place names come from slugs, not article text. Geocoding can pin the wrong town; country-level events are approximate by definition.
- Casualty counts are parsed from headline slugs and are unverified. Treat them as leads.
- News coverage is the sampling frame. Under-reported regions are under-represented. This sample is not a census of landslides.
Reproduce it: node scripts/build-dataset.mjs --max-events 150. The script header documents every choice. GDELT rate-limits shared IPs, so queries are paced 10 seconds apart with backoff retries; Nominatim geocoding honors 1 request per second.
API
Query the dataset yourself.
One endpoint, no key. Every response is marked sample: true and every event carries its extraction method and confidence. Machine-readable contract at /api/openapi.json (OpenAPI 3.1).
GET /api/v1/events| hazard | Hazard type. v0.1 only ships landslide. | landslide |
| country | Country name substring or code, case-insensitive. | Nepal |
| since | Earliest event date. | 2026-01-01 |
| until | Latest event date. | 2026-10-09 |
| confidence | Extraction confidence tier. | high |
| limit | Page size, 1 to 100. Default 20. | 20 |
| offset | Page offset. Default 0. | 0 |
Example request
curl "https://hazards.nshipyard.com/api/v1/events?hazard=landslide&country=Nepal&limit=5"
Example response (trimmed)
{
"sample": true,
"total": 3,
"limit": 20,
"offset": 0,
"events": [
{
"id": "hl-7bb6b703c838",
"hazard_type": "landslide",
"title": "Rompimento de tubulacao da sabesp causa deslizamento em varzea paulista",
"country": "Brazil",
"country_code": "BR",
"lat": -23.482,
"lon": -47.435,
"date": "2026-10-01",
"severity_note": null,
"sources": [
{ "url": "https://g1.globo.com/.../rompimento-de-tubulacao-da-sabesp-causa-deslizamento-em-varzea-paulista.ghtml", "publisher": "g1.globo.com" }
],
"extraction_method": "doc-api-slug-geocode-v1",
"confidence": "high",
"confidence_note": "Landslide keyword in the article URL slug; place geocoded in the story's country. Article body not read; counts unverified."
}
]
}