What is polwarden?
A single URL you can send someone instead of arguing about whether a threat is real.
polwarden collects open-source intelligence from 20+ feeds โ satellite imagery, military flight tracking, vessel positions, GPS jamming data, media narratives, economic indicators โ and structures it into a daily threat assessment with source links you can verify yourself. Every number traces back to a public source. No classified data, no editorial opinion, no paywalls.
It runs on one VPS, checks 38 Russian military sites from space every day at 08:00 EET, and produces a composite threat score from 0 to 100.
polwarden augments, not replaces, professional intelligence analysis. Indicators may contain errors. Use as a starting point, not a sole source of truth.
Data sources
Every data point is verified, enriched, and classified before display. We never use LLM-generated data for factual claims โ all numbers come from official published sources.
Intelligence map โ real-time layers
Economy โ official sources only
Russia intelligence
Narrative monitoring
Monitored military sites (38)
Each site is monitored via Sentinel-2 optical imagery, Sentinel-1 SAR radar (all-weather), ESRI high-resolution base maps, NASA FIRMS thermal detections, and daily AI-powered change analysis.
- Tier 1 โ Direct border threat (<200 km from NATO): Kaliningrad (Chkalovsk, Baltiysk, Chernyakhovsk, Gusev, Donskoye), Pskov (76th VDV, Ostrov, Strugi Krasnye), Leningrad (Luga 6th CAA, Kamenka 138th MRB, Levashovo, Kronstadt), Belarus (Machulishchy, Baranovichi, Grodno, Brest, Osipovichi)
- Tier 2 โ Staging and reserves: Klintsy, Smolensk, Bryansk, Tver Migalovo, Yelnya, Pogonovo, Mulino, Alabino, Nizhny Tagil UVZ
- Tier 3 โ Strategic depth: Severomorsk (Northern Fleet), Olenya (Tu-22M3/MiG-31K), Shaykovka, Engels 2 (strategic bombers)
- Tier 4 โ Southern/occupied: Morozovsk, Rostov Southern HQ, Saki, Sevastopol, Kursk Khalino, Millerovo, Voronezh Malshevo
Data quality
- No LLM-generated numbers. Economy metrics come directly from government statistical APIs.
- Every vessel has a name. AIS data enriched from Digitraffic metadata. No anonymous MMSI stubs.
- Every aircraft has a registration. ADS-B enriched from OpenSky metadata. Civilian flights filtered.
- NATO/allied forces never tracked. The public dashboard does not expose friendly force movements.
- Zero false positives. Weather radiosondes classified as routine, commercial shipping filtered, civilian aircraft dropped.
- Satellite analysis is AI-assisted. Gemini 2.5 Flash processes Sentinel-2 optical and Sentinel-1 SAR imagery daily. Human review for significant changes.
Integrations
Telegram
Join the public channel for a daily briefing at 08:00 EET with the composite threat index, active indicators, and a one-paragraph summary. No API keys, no setup.
Bash + Cron
Poll the API and act on the result. This script sends a notification when the threat level is not GREEN.
#!/bin/bash
# 0 9 * * * /usr/local/bin/polwarden-check.sh
API="https://polwarden.eu/api/latest"
DATA=$(curl -sf "$API") || exit 1
LEVEL=$(echo "$DATA" | jq -r '.threat_level')
if [ "$LEVEL" != "GREEN" ]; then
DATE=$(echo "$DATA" | jq -r '.date')
echo "$DATA" | jq -r '.indicators[] | select(.status != "GREEN") |
" \(.status) [\(.category)] \(.label): \(.finding)"' |
mail -s "polwarden: $LEVEL ($DATE)" [email protected]
fi
Grafana
Use the Infinity datasource plugin (JSON/REST) to add polwarden to your monitoring stack.
grafana-cli plugins install yesoreyeram-infinity-datasource
systemctl restart grafana-serverAdd datasource: Connections โ Data sources โ Infinity. Name it polwarden. No authentication required.
Type: JSON
URL: https://polwarden.eu/api/latest
Root: (blank)
Columns: threat_level โ String, date โ StringType: JSON
URL: https://polwarden.eu/api/latest
Root: indicators
Columns: status, category, label, finding โ StringHome Assistant
rest:
- resource: https://polwarden.eu/api/latest
scan_interval: 3600
sensor:
- name: "Baltic Threat Level"
value_template: "{{ value_json.threat_level }}"
icon: mdi:shield-alert
json_attributes: [date, summary]Audio Podcast
A daily AI-generated audio briefing synthesized via ElevenLabs TTS. Covers the threat index, active indicators, satellite analysis highlights, and a narrative summary โ in a conversational tone.
API Reference
All endpoints return JSON. No authentication. CORS open.
Core
/api/latestMost recent report with all indicators/api/todayToday's report (404 if not yet collected)/api/report/{date}Report for a specific date/api/history?days=90Threat level history/api/datesAll available report dates/api/threat-indexComposite Threat Index (0โ100) with sub-scores/api/threat-index/history?days=30CTI time series/api/metricsLatest socioeconomic metrics/api/categories?days=90Per-category breakdown over time/healthService health checkSatellite & Intelligence
/api/satellite/preview/{site_id}ESRI high-res preview image/api/satellite/sentinel2/{site_id}Latest Sentinel-2 acquisition metadata/api/satellite/analysis/{site_id}AI analysis for a site (optical + SAR)/api/satellite/analysis-summaryAll sites summary with activity levels/api/russia/intelRussia dashboard data (losses, economy, opinion)/api/russia/mapMilitary sites with coordinates and analysisExports
/api/stix/report/{date}STIX 2.1 bundle/api/stix/person/{id}Person entity as STIX/api/briefing/{date}.htmlHTML intelligence briefing/api/briefing/{date}.pdfPDF intelligence briefing/api/podcast/latest.mp3Latest audio briefing/api/podcast/metaPodcast episode metadataExample
{
"date": "2026-03-09",
"threat_level": "YELLOW",
"summary": "GPS jamming elevated near Kaliningrad...",
"indicators": [
{
"status": "YELLOW",
"category": "HYBRID",
"label": "GPS Interference",
"finding": "21.4% disruption rate in Baltic Sea corridor",
"confidence": "HIGH",
"source_url": "https://gpsjam.org"
}
]
}