Everything on the map is a report, not a verdict.
UNREST aggregates machine-coded news reports into events, attaches every source, and labels how well each event is supported. This page documents exactly how.
Data sources
The primary source is the GDELT Project 2.0 event stream, which publishes machine-coded events from worldwide online news every 15 minutes. We keep only records with CAMEO root code 14 (“Protest”). Each record carries a source article URL, an action location, and the number of articles and sources that mentioned it.
We never display data that did not come from a source. If ingestion stops, the site shows when data was last updated rather than filling gaps.
Pipeline
- Fetch — a scheduled job downloads each new GDELT export file once; processed files are recorded so nothing is ingested twice.
- Normalize — rows are parsed, protest codes mapped to categories, and locations resolved to country, region, and city.
- Deduplicate — reports are clustered by place (rounded coordinates), category, and date. The same article URL is never attached to an event twice.
- Enrich — we fetch each source page's public title and description. Failed fetches are recorded, not guessed.
- Analyze — an AI model reads only the retrieved source text and returns a structured assessment.
- Label — a verification status is assigned from source counts and the AI assessment.
Verification labels
- Corroborated
- Described by two or more independent outlets with consistent details.
- Reported
- Described by a single outlet. Not independently confirmed.
- Conflicting reports
- Sources disagree on key details such as timing, scale, or whether it took place.
- Unverified
- Source text could not be retrieved or analyzed. Shown from structured event data only.
“Corroborated” means independent outlets reported it. It does not mean UNREST has confirmed the facts on the ground.
Categories
- Protest
- Demonstration
- Strike
- Civil unrest
- Political rally
- Public movement
Categories start from GDELT's CAMEO code and may be refined by AI analysis when the source text clearly supports a different type.
Location precision
GDELT resolves locations to a city, a state or province, or only a country. Events without a city-level location are drawn with a dashed uncertainty ring and labelled “region-level” or “country-level”. We never move a marker to look more precise than the source allows.
AI analysis
The model is instructed to use only the retrieved source text, to separate reported facts from interpretation, and to answer “unknown” rather than infer. It returns whether the text describes an actual protest, the event type, whether it occurred or was only planned, a neutral summary, and any contradictions between sources.
AI output is always labelled as such and shown alongside the original sources. It can be wrong; the sources are the record.
Limitations
- Coverage follows the media GDELT monitors. Countries with less online or English-language reporting are under-represented.
- Machine coding produces false positives — for example, a historical anniversary article coded as a new protest.
- Event counts measure reports, not crowd size or severity.
- Some publishers block automated retrieval, leaving events without a readable headline.
See how this feeds the Global Activity Index.