Each event carries a two-character reliability rating: a letter (A-F) for how reliable the source is, and a digit (1-6) for how corroborated the information is. The ratings here are derived automatically from the source domain and the number of independent outlets reporting it - a starting point for an analyst, not a replacement for one.
| A | Completely reliable - official / government / CERT |
| B | Usually reliable - established wire / outlet of record |
| C | Fairly reliable - national / institutional press |
| D | Not usually reliable |
| E | Unreliable |
| F | Cannot be judged / unattributed |
| 1 | Confirmed - many independent outlets |
| 2 | Probably true - several outlets |
| 3 | Possibly true - two outlets |
| 4 | Doubtful - single source |
| 5 | Improbable |
| 6 | Cannot be judged |
High (A-B and 1-2), Low (E-F, or 5-6), Moderate otherwise.
GDELT DOC 2.0 - global news monitoring, queried per sub-domain. Free, no key. Events are placed at the reporting outlet's country centroid (approximate), so treat location as country-level, not a precise incident point. Each event links out to the underlying articles with their publish timestamps.
TfL JamCams - ~890 public London street cameras with real coordinates and official snapshot URLs. Free, no key.
ACLED (optional) - analyst-coded armed-conflict and protest events with precise coordinates. Needs a free key; enable it in the ingestion script for exact placement.
Refresh by re-running osint_feed.py and importing the resulting feed.json, or bake it straight into this page. The sandbox blocks live in-page network calls, so the feed is pulled by the script, not by the map itself.
This is the schema the map reads - events (with their source links), cameras and feed metadata. Copy it to save or edit, then bring it back with Import, or regenerate it with osint_feed.py.
This page pulls OSINT at runtime wherever cross-site requests are allowed - a normal web host such as GitHub Pages. In this preview sandbox those requests are blocked, so the map falls back to the baked snapshot.
/api/feed, which the Worker assembles server-side (GDELT events + TfL cameras, plus any RSS feeds below), caches for ~25 min, and refreshes on a cron. Same-origin, so no CORS limits and no browser-side GDELT proxy needed. A baked feed.json snapshot from osint_feed.py also works as the URL below./api/feed, which fetches them server-side (RSS has no CORS), classifies each item into a sub-domain, places it by the location it mentions, and deep-links the article.