Methodology
How LiveProtest works
LiveProtest maps demonstrations that news outlets have reported. We are an information service — we do not organise, endorse or oppose any protest. Every fact on the map comes from published reporting and links back to it.
1. Discovery — worldwide, any size
Every 30 minutes we look for new reporting from:
- GDELT 2.0 Event exports — machine-coded protest events from news worldwide, with city-level geocoding, every 15 minutes.
- GDELT DOC API and Google News search in each country’s own languages (about 45 languages, 130+ countries), rotating through countries so coverage stays broad without overloading anyone.
- Publisher feeds — RSS/Atom feeds of regional and local newspapers, public broadcasters’ local desks and international desks, trade unions (which announce strikes and demonstrations) and public authorities that publish demonstration notices.
- Live blogs — when a newsroom runs a live page on a demonstration, we follow it (where its robots.txt allows) and read each timestamped entry as its own report.
- Community sources — optionally, Reddit through its official API. Community posts can point us to activity but never confirm it on their own; we never store or show usernames.
Anything that may be happening right now is re-checked every 5–10 minutes, separately from the 30-minute worldwide sweep.
We include demonstrations of any size — a picket of 20 people or a vigil outside a town hall counts. We never require a crowd figure. New sources are discovered automatically from the outlets that report protests, but each is validated before use: robots.txt must allow us, publishers that reserve text-and-data-mining rights are excluded, and the source must offer a working feed. We read headlines and summaries from feeds; full pages are fetched only where needed and allowed, never past paywalls or logins, and article text is used only for extraction, never republished.
2. Extraction — no invented facts
An AI model reads each article in its original language and returns structured facts: place, date and time, cause, demands, crowd estimates and official responses. Each fact must come with a verbatim quote from the article. We check every quote against the article text automatically; anything that cannot be found is discarded. Crowd numbers are kept per source with who estimated them (police, organisers…), never averaged into one “true” figure.
3. Location & duplicates
Places are resolved to the city level with the GeoNames gazetteer. Public coordinates are rounded to about one kilometre and we never pinpoint meeting points. Reports about the same demonstration — even in different languages — are merged when they agree on place (within ~40 km), date (±2 days) and subject.
4. Status labels
| Label | Meaning |
|---|---|
| Live | A credible, corroborated report explicitly said it was under way within the last 6 hours. |
| Possibly ongoing | Recent reporting suggests it may be under way, but this is not yet confirmed (one outlet, indirect wording, or an ageing report). |
| Upcoming | Announced or scheduled for a future date. Announced ≠ confirmed ≠ happening. |
| Postponed | Sources report it was postponed or rescheduled. |
| Recent | Reported in the last 7 days. Not confirmed as still under way. |
| Ended | Reported concluded, or more than 7 days old. |
| Cancelled | Sources report it was cancelled, banned or called off. |
| Unverified | Single-source, conflicting, or a scheduled protest no report confirms took place. |
We never call an event live because an article is recent. Live requires a quoted statement that the demonstration is under way, observed within the last 6 hours, and corroborated by independent outlets (or a wire agency). Possibly ongoing marks reports that suggest activity without enough confirmation; Recent marks protests that were reported but are not confirmed as still under way. Without fresh confirmation the label falls back automatically.
5. Upcoming protests
Announced demonstrations appear as amber markers. We extract the scheduled date, local time, city, publicly named organisers and cause, with the source. An announcement by a single source is labelled Announced; it becomes Confirmed when independent outlets report it or when an official authorisation or organiser confirmation is reported. Postponements and cancellations are shown as such. An announced protest is never shown as happening on its own: when its date passes, it stays “not confirmed” until a report says it actually took place. We publish only city-level locations and never undisclosed meeting points.
6. Confidence
Confidence describes how well-sourced a report is — not the probability that it is true. It rises with independent publishers, established outlets and precise place/date details, and falls when sources conflict. Reports below the threshold are shown as “Unverified”.
7. Summaries
Summaries are written by AI only from the extracted, quote-checked facts, and every sentence cites its sources. A summary that fails this check is not shown.
8. Media
We link to the original reporting. Photos and videos appear only where the publisher permits embedding and an editor has approved them, with credit.
Crawler
Our crawler identifies itself as LiveProtestBot, follows robots.txt and spaces requests to each site. Publishers can contact us to opt out.
Who runs LiveProtest
LiveProtest.com is an independent project operated by EU DECID S.R.L. (CUI 51864362), based in Hunedoara, Romania. For press, business or general enquiries, use the contact form. Legal details are in the legal notice; coverage and source statistics are on the transparency page.
Corrections
Every report has a “Report a correction” button. Editors review reports, and status changes are logged publicly on each event.