Environmental OSINT for conflict zones: a Sentinel Hub and HDX workflow
How to detect, verify, and responsibly publish evidence of environmental damage in war and displacement contexts using free satellite imagery and humanitarian datasets.
TL;DR
Environmental OSINT for conflict zones pairs free Copernicus Sentinel-1 SAR and Sentinel-2 optical imagery with change indices such as NDVI, NBR, and dNBR, then overlays HDX humanitarian layers like admin boundaries, IOM DTM sites, and ACLED events to turn satellite anomalies into verified, ethically published claims about war-driven environmental damage.
Why environmental OSINT matters
Armed conflict degrades soils, water, forests, and air long after the fighting subsides. Access to conflict zones is usually restricted, so satellites and public humanitarian datasets are often the only way to document what is happening at scale. The methodology below is designed for small newsrooms, university teams, and humanitarian analysts working without a commercial imagery budget.
It complements the country-level work on Humanity Centered Data, including the environmental impact of armed conflict hub and the Sudan, Ukraine, and Yemen environmental dashboards.
Six steps from question to verified map
Step 1.Scope the environmental question
Start with a precise, verifiable claim: burn scars around Al-Fasher between April and June 2026, oil-facility damage in eastern Ukraine, deforestation near IDP settlements in North Kivu. A tight geography and time window keeps satellite pulls small and analysis reproducible.
Step 2.Pull baseline and post-event imagery from Sentinel Hub
Use the Copernicus Sentinel-2 (10 m optical) and Sentinel-1 (SAR, cloud-penetrating) archives via Sentinel Hub or the free Copernicus Browser. Grab one clear pre-event scene and the closest post-event scene over the same bounding box, matching sensor and season to control for phenology.
Step 3.Compute change indices, not just RGB
For vegetation loss use NDVI difference (NDVI_pre minus NDVI_post). For burn scars use NBR (Normalized Burn Ratio) and dNBR. For flooding use Sentinel-1 VV backscatter thresholding. Indices expose changes that a raw true-colour composite hides under haze, shadow, or seasonal variation.
Step 4.Cross-reference humanitarian datasets on HDX
On data.humdata.org pull the matching COD-AB admin boundaries, IOM DTM site locations, ACLED conflict events, and any WFP or OCHA damage assessments for the same window. Overlaying these on your change raster turns a pixel anomaly into a claim about people, camps, and incidents.
Step 5.Corroborate with independent sources
Confirm findings against NASA FIRMS active-fire pixels, Global Forest Watch loss alerts, PlanetScope tasking (where available), and ground reporting from ReliefWeb, local media, and named eyewitnesses. A single-sensor anomaly is a lead, not a finding, until at least one independent source agrees.
Step 6.Publish with methods, coordinates, and dates
Every map needs the sensor, acquisition dates, index formula, bounding box, and provenance of overlaid data. Share the AOI as GeoJSON and the processing steps as a notebook or Sentinel Hub Custom Script so peers can reproduce the analysis and challenge it.
Working code: dNBR burn-severity mapping
Sentinel Hub Custom Script
// Sentinel Hub Custom Script: dNBR (burn severity)
// Requires two Sentinel-2 L2A scenes as inputs.
function setup() {
return {
input: [{ bands: ["B08", "B12"], units: "REFLECTANCE" }],
output: { bands: 1, sampleType: "FLOAT32" },
mosaicking: "ORBIT",
};
}
function evaluatePixel(samples) {
const pre = samples[samples.length - 1]; // earliest scene
const post = samples[0]; // latest scene
const nbrPre = (pre.B08 - pre.B12) / (pre.B08 + pre.B12);
const nbrPost = (post.B08 - post.B12) / (post.B08 + post.B12);
return [nbrPre - nbrPost]; // dNBR: >0.27 = moderate/high burn
}Python with rasterio and HDX admin boundaries
import rasterio, numpy as np
with rasterio.open("s2_pre.tif") as pre, rasterio.open("s2_post.tif") as post:
nir_pre, swir_pre = pre.read(1), pre.read(2)
nir_post, swir_post = post.read(1), post.read(2)
def nbr(nir, swir):
return (nir - swir) / (nir + swir + 1e-6)
dnbr = nbr(nir_pre, swir_pre) - nbr(nir_post, swir_post)
# Zonal stats against an HDX admin-boundary GeoJSON
import geopandas as gpd
from rasterstats import zonal_stats
admin = gpd.read_file("hdx_admin2.geojson")
stats = zonal_stats(admin, dnbr, affine=pre.transform,
stats=["mean", "max"], nodata=np.nan)
admin["burn_mean"] = [s["mean"] for s in stats]
admin.to_file("burn_by_admin2.geojson", driver="GeoJSON")Requires rasterio, geopandas, and rasterstats. Admin polygons come from the HDX Common Operational Dataset (COD-AB) for the country of interest.
Core sources and tools
| Source or tool | What it is and when to use it |
|---|---|
| Sentinel-2 L2A | Free 10 m multispectral optical imagery, 5-day revisit. Best for NDVI, NBR, and true-colour mapping when skies are clear. |
| Sentinel-1 GRD | Free C-band SAR, cloud- and night-independent. Essential for flood mapping, oil-slick detection, and monitoring conflict zones under persistent cloud. |
| Sentinel Hub | Hosted processing API and Custom Scripts (JavaScript) that return analysis-ready rasters without downloading full scenes. |
| Copernicus Browser | Free web viewer for Sentinel and Landsat archives with built-in NDVI, NBR, and moisture indices for quick triage. |
| NASA FIRMS | Near-real-time active-fire detections from VIIRS and MODIS. Independent corroboration for burn-scar findings. |
| Global Forest Watch | Annual and near-real-time tree-cover loss alerts (GLAD, RADD) mapped to admin units. Good baseline for deforestation claims. |
| HDX (data.humdata.org) | Humanitarian Data Exchange hosts COD admin boundaries, IOM DTM sites, ACLED events, and cluster assessments for overlay analysis. |
| QGIS + rasterio | Open-source desktop GIS and Python raster library for reproducible change detection, zonal statistics, and cartographic output. |
Sources: Copernicus Programme (Sentinel Hub documentation), NASA FIRMS, Global Forest Watch, and the Humanitarian Data Exchange (OCHA).
From pixels to publishable maps
- Change-detection map. Pre and post NBR side by side with a dNBR panel and a legend keyed to burn-severity thresholds.
- Admin-level table. Zonal statistics of dNBR or NDVI change per admin2, joined to affected-population counts from HDX.
- Incident overlay. ACLED events plotted over the change raster in the same time window to show co-location of violence and damage.
- Reproducibility panel. Bounding box, sensor, acquisition dates, index formula, cloud mask threshold, and links to raw scenes.
Common pitfalls and ethical constraints
Do not mistake seasonality for damage
Cloud, haze, and shadow fake anomalies
Attribution is harder than detection
Protect people on the ground
Frequently asked questions
What is environmental OSINT and how does it apply to conflict zones?
Environmental OSINT is the use of publicly available satellite imagery, sensor data, and humanitarian datasets to document ecological damage in war and displacement contexts. In conflict zones it maps burn scars, oil-facility fires, cratered farmland, contaminated water, and destroyed forests without requiring physical access, using Sentinel Hub, NASA FIRMS, and HDX layers.
Which satellite sources are free for humanitarian researchers?
The Copernicus programme (Sentinel-1 SAR and Sentinel-2 optical) and NASA Landsat 8 and 9 are free at 10-30 m resolution. NASA FIRMS provides free active-fire pixels. PlanetScope, Maxar, and Airbus imagery is commercial but frequently released for humanitarian use through partnerships such as the International Charter Space and Major Disasters.
How do I detect burn scars or deforestation with Sentinel-2?
Compute the Normalized Burn Ratio (NBR = (NIR - SWIR) / (NIR + SWIR)) on a pre-event and post-event Sentinel-2 scene, then subtract to get dNBR. For deforestation, use NDVI differencing over a same-season baseline. Threshold values above 0.27 for dNBR typically indicate moderate to high burn severity; validate against Global Forest Watch and FIRMS.
How does HDX support environmental OSINT?
The Humanitarian Data Exchange (data.humdata.org) hosts Common Operational Datasets including admin boundaries, population rasters, IOM DTM site locations, ACLED conflict events, and cluster damage assessments. Overlaying these on a Sentinel change raster turns a satellite anomaly into a claim about affected populations, IDP sites, and conflict incidents.
What are the main risks and ethical constraints?
False positives from cloud, seasonality, and shadow are the biggest technical risk; attribution to a specific actor is the biggest analytical risk. Publishing precise coordinates of IDP camps, informal settlements, or humanitarian convoys can endanger civilians. Follow the Berkeley Protocol on Digital Open Source Investigations and consult protection colleagues before publication.
Related resources on Humanity Centered Data
Pair conflict events with your satellite change layers
Full methodology combining OSINT, satellite, and ACLED evidence
How HDX is structured and what to pull first
Country dashboards and methodology
Reading IDP, refugee, IPC, and ACLED figures
