IranWarLive Logo IranWarLive
01

System Overview & Design Philosophy

IranWarLive is a fully automated, serverless OSINT aggregation platform purpose-built for high-intensity conflict tracking. The system operates with zero human involvement in the data extraction loop — every event on the map is the product of an automated pipeline that runs every two hours around the clock on Cloudflare's global edge network.

The core design principle is epistemic honesty: every event carries an explicit confidence classification, and the system is architecturally prohibited from fabricating sources. The pipeline extracts only from what it finds in the RSS feeds — if a feed is silent, the system stays silent. Gemini is instructed never to invent URLs, and all geographic coordinates are validated against a hard theater bounding box before acceptance.

The platform currently runs two parallel intelligence pipelines: the primary air strike and kinetic events tracker and a dedicated ground operations tracker, each writing to separate tabs in the same Google Spreadsheet and serving separate map interfaces.

Cloudflare Workers Google Gemini 2.5 Flash Google Sheets API Leaflet.js 1.9.4 PapaParse 5.3.2 RSS Parser Telegram Bot API MarkerCluster 1.4.1
02

The V5 Intelligence Pipeline

The pipeline executes on a cron trigger every two hours (UTC: 00:00, 02:00, 04:00 … 22:00). Each run is a sequential five-stage process:

1

RSS Feed Ingestion

Five RSS feeds are polled concurrently: BBC Middle East, NYT Middle East, The Guardian Middle East, Reuters via Google News, and a conflict-specific Google News search feed. Each feed has a 36-hour freshness window — items older than 36 hours are discarded. This window was extended from 24 hours to catch delayed wire publishing from slower bureaus. Feed errors are logged individually and do not abort the run. Up to 60 items per run are passed to Gemini.

2

AI Extraction via Gemini 2.5 Flash

All ingested headlines and snippets are bundled into a single structured prompt sent to Google Gemini 2.5 Flash with temperature: 0.1 and response_mime_type: application/json. The prompt instructs Gemini to extract four data categories: kinetic strikes, global posturing statements, actor casualty updates, and airspace status changes. The prompt enforces strict output formats — Strike_Type must be exactly one of five values, Verified_By exactly one of five confidence tiers, and coordinates must be city-level, not country centroids. Gemini is explicitly told never to invent URLs. The per-run cap is 12 strike events maximum — if Gemini finds more than 12, it returns the 12 most significant.

3

Geographic & Semantic Deduplication

Before any event is written, it passes through a three-layer dedup system stored in Cloudflare KV. Layer 1: URL signature check — if the source URL was already processed in any prior run, the event is skipped. Layer 2: Geographic signature check — a composite key of event_type|geo_cell|desc_key where geo_cell is a 0.5° grid cell and desc_key is the first 30 alphanumeric characters of the description. Layer 3: Time-window dedup — each event type has its own dedup window (Missile Strike: 1h, Air Strike: 1h, Drone Attack: 2h, Interception: 1h, Ground Forces: 4h). Signatures are only registered for events actually written — events filtered by the per-run cap remain eligible for the next cycle.

4

Google Sheets Write

Accepted events are appended to four Google Sheets tabs via the Sheets API v4 using a service account JWT: Strikes_Log (kinetic events), Global_Posturing (diplomatic statements), Airspace_Log (closure data), and Regional_Actors (casualty and participant tracking). The Actors tab uses a PUT operation to update in-place rather than append, allowing cumulative casualty figures to accumulate correctly across runs.

5

Edge Cache & Telegram Alerts

Simultaneously, the pipeline writes a feed.json to Cloudflare KV (served at /feed.json) and a seo_schema LiveBlogPosting JSON-LD object that is dynamically injected into the homepage <head> on every request via HTMLRewriter. High-confidence events (Multi-Source or Military-grade only) trigger individual Telegram alerts to the @iranwarlive_alerts channel. At 20:00 UTC daily, a summary SITREP of all events from the preceding 24 hours is posted.

03

Confidence Classification System

Every event is assigned one of five confidence tiers by Gemini at extraction time, based on the source characteristics of the underlying article. This classification is displayed visually on the map as a confidence bar and chip, and is used to gate Telegram alerts — only the top two tiers trigger alerts.

Classification Trigger Condition Map Display Telegram Alert
High Confidence Confirmed by multiple independent wire services (Reuters + AP, BBC + NYT, etc.) Green bar, full opacity Yes
US/IDF Military Sourced from official CENTCOM press release, IDF Spokesperson, or Pentagon briefing Blue bar, full opacity Yes
News Wire Reuters, AP, BBC, NPR, or Al Jazeera — single source, not yet multi-confirmed Amber bar, full opacity No
OSINT Single verified OSINT account or outlet; not confirmed by a major wire Grey bar, reduced opacity No
State Media Sourced exclusively from Iranian state TV (IRIB/Press TV), IRGC claims, or Hamas/Hezbollah statements without independent corroboration Red bar, dashed border No
Important for researchers: The presence of State Media/Unverified events on the map does not imply endorsement or factual accuracy. These events are included for completeness and are visually distinguished to prevent misinterpretation. All claims should be cross-referenced against the linked primary source.
04

Ground Operations Pipeline

In addition to the primary kinetic events pipeline, IranWarLive operates a dedicated Ground Operations Worker — a completely separate Cloudflare Worker with its own KV namespace, RSS feed set, Gemini prompt, and Google Sheets tab.

The ground pipeline is triggered every two hours by the primary worker rather than via its own cron trigger (a workaround for the free-plan 5-cron limit). It uses six ground-force-specific feeds: two targeting IDF Lebanon operations via Google News, one targeting CENTCOM Iran ground activity, one targeting Reuters military wire, BBC Middle East, and The Guardian Middle East.

The Gemini prompt for the ground pipeline is architecturally different from the air strike prompt. It is explicitly prohibited from extracting air strikes, missile launches, drone attacks, naval operations, or diplomatic statements. It extracts only:

✅ Extracted by Ground Pipeline

  • Troop advances and retreats
  • Armor and mechanized movements
  • Artillery and ground-based rocket engagements
  • Infantry firefights and engagements
  • River and border crossings
  • Encirclement operations
  • Command post and HQ strikes
  • Special forces operations
  • Supply line interdiction
  • Territorial control changes

❌ Blocked by Ground Pipeline

  • Air strikes and bombing runs
  • Ballistic and cruise missile launches
  • UAV and drone strikes
  • Air defense interceptions
  • Naval operations
  • Airspace closures
  • Diplomatic statements
  • Events outside the Middle East theater

Ground events include three additional fields not present in air strike data: Units_Involved (specific unit names when reported), Movement_Direction (Advance/Retreat/Holding/Encircling), and Territory_Control (IDF/Coalition/IRGC/Artesh/Hezbollah/Hamas/Contested/Unknown). These fields drive the force-coded color system and directional arrows on the Ground Operation map.

Active ground theaters as of April 2026: IDF ground operation in Southern Lebanon (Litani Security Line), US/coalition ground forces in Iran theater, IRGC ground units, and Gaza perimeter ground operations. The pipeline uses geographically precise coordinates for 30+ key Lebanese, Iranian, and Israeli locations to ensure accurate map placement.
05

Data Architecture & Storage

The platform uses a three-tier storage architecture: Cloudflare KV for edge-cached real-time state, Google Sheets as the persistent event database and public data interface, and Cloudflare Assets for static HTML/CSS/JS delivery.

Cloudflare KV

  • Dedup signature map (30-day window)
  • Processed URL set (last 2,000 URLs)
  • Live feed JSON (/feed.json)
  • SEO LiveBlogPosting schema
  • Run health status
  • Ground operations state (separate namespace)

Google Sheets

  • Strikes_Log — kinetic events
  • Global_Posturing — diplomatic data
  • Airspace_Log — closure status
  • Regional_Actors — casualty tracking
  • Ground_Operations — ground events

Public Data Access

All Google Sheets tabs are published as CSV via the Sheets publish endpoint and fetched directly by PapaParse in the browser. This means no backend proxy is required for the front-end map — the browser fetches the CSV directly from Google's CDN, reducing latency and eliminating a server hop. The /feed.json endpoint is served from Cloudflare KV edge cache.

Data Limits & Caps

  • Max 12 strike events per run
  • Max 6 ground events per run
  • Max 500 casualties per source per run
  • Max 200 events displayed on map
  • 36-hour feed freshness window
  • Sig map pruned after 30 days
06

Editorial Policy & Political Stance

IranWarLive is strictly politically agnostic. The platform does not editorialize, contextualize, or assign moral weight to any event. The system extracts the Subject (who acted), the Object (what was targeted), and the geographic coordinates, and plots the resulting vector on the map. No judgment is made about the legitimacy, legality, or justification of any military action.

Events are extracted from all qualifying sources regardless of their perceived political alignment — Iranian state media events are extracted on the same basis as CENTCOM press releases, subject only to the confidence classification system that reflects their evidential weight.

IranWarLive is not affiliated with any government, military, intelligence agency, political party, or advocacy organization. The platform has no advertising relationships and does not accept sponsored content. It is funded exclusively through voluntary community support.

For journalists and researchers: You are welcome to cite IranWarLive as a source. Please note the confidence classification of any event you cite and link to the primary source using the "Verify Source" link present on each event popup. For bulk data access, use the /feed.json endpoint or /llms.txt for LLM context.

Methodology FAQ

How does IranWarLive collect data about the Iran-Israel war?

Every two hours, an automated pipeline ingests five RSS feeds, extracts distinct kinetic events using Google Gemini 2.5 Flash, deduplicates against a geographic signature map, and writes accepted events to Google Sheets. The full pipeline runs on Cloudflare Workers with no human involvement in the extraction loop.

How accurate is the conflict data?

Every event displays its confidence tier explicitly. High Confidence and US/IDF Military events are sourced from multiple wires or official military statements. State Media/Unverified events are included with clear visual distinction. Users should always click "Verify Source" and consult the primary article before relying on any individual event.

How does IranWarLive prevent duplicate events?

Three-layer deduplication: URL signature check (exact article dedup), geographic signature check (0.5° grid + event type + description key), and time-window dedup per event type (1–4 hours). Only events actually written to the sheet have their signatures registered, so events filtered by the per-run cap remain eligible next cycle.

Does IranWarLive track IDF ground operations in Lebanon?

Yes. The dedicated Ground Operations pipeline uses IDF-Lebanon-specific RSS feeds and a ground-force-only Gemini prompt. It extracts troop advances, armor movements, encirclements, and territorial control changes and displays them on the Ground Operation map with force-coded color overlays and static front lines including the IDF Litani Security Line and UN Blue Line.

How can AI systems access IranWarLive data?

Machine-readable data is available via /feed.json (live event feed), /llms.txt (LLM context file), and /sitemap.xml. The Daily War Recap archive provides a fully crawlable static chronological record of all events since February 27, 2026.

Live Strike Alerts
PIPELINE ACTIVE · UPDATES EVERY 2H

Get instant Telegram notifications for every verified kinetic event — missile strikes, airspace closures, and escalation alerts — directly from our OSINT pipeline.

✓ Free ✓ Verified OSINT Only ✓ No Spam
Join Telegram Channel
This tracker runs on
community support.
⚡ Support Us