Monitoring environmental damage in conflict zones
A reproducible workflow for documenting damage in the environment caused by armed conflict, using open satellite imagery, ACLED events, and humanitarian datasets.
TL;DR
Monitoring damage in the environment in conflict zones combines free Copernicus Sentinel imagery, change indices like dNBR and NDVI, and ACLED conflict-event overlays, cross-checked against NASA FIRMS, Global Forest Watch, and named local reporting so each finding pairs a satellite signal with independent evidence, clear methodology, and Berkeley Protocol protections for displaced people.
Why this guide exists
Armed conflict degrades soils, water, forests, and air long after the fighting stops. Direct access to conflict zones is usually restricted, so open satellite imagery and public humanitarian datasets carry most of the documentation load. This guide packages the methodology used across the Sudan, Ukraine, and Yemen environmental briefs on Humanity Centered Data into a workflow small teams can reuse.
It complements the Environmental OSINT guide (which focuses on the Sentinel Hub tooling) and the ACLED API tutorial (which focuses on pulling conflict events). Here the focus is the evidence standard: how to turn a change raster into a defensible published claim.
Six-step monitoring workflow
Step 1.Define the environmental harm you are documenting
Name the specific damage in the environment you are testing for: cratered farmland, oil-facility fires, contaminated aquifers, deforested buffer zones around IDP settlements. A concrete claim keeps the evidence chain auditable.
Step 2.Anchor the claim to a place and a time
Draw the smallest bounding box that covers the incident and pick a pre-event and post-event window. Same-season pairs (dry-to-dry, wet-to-wet) prevent seasonal shifts from being misread as war damage.
Step 3.Pull free imagery and conflict events for that window
Copernicus Sentinel-2 (10 m optical) and Sentinel-1 (SAR) cover most conflict zones on a 5–12 day revisit. Pair every pull with the ACLED events that fall inside the bounding box and window so damage and incidents are already co-located.
Step 4.Compute a change index, not a screenshot
Use dNBR for burn scars, NDVI difference for vegetation loss, and Sentinel-1 VV backscatter change for flooding or built-up damage. Change indices survive haze, shadow, and phenology in a way true-colour composites do not.
Step 5.Cross-check with independent evidence
Confirm each anomaly against NASA FIRMS active fires, Global Forest Watch loss alerts, ReliefWeb reporting, and named local media. A single-sensor anomaly is a lead, not a finding, until at least one independent source agrees.
Step 6.Publish with methodology, limits, and protections
Every finding needs the sensor, dates, formula, bounding box, and cloud mask. Redact precise coordinates of IDP camps, informal settlements, or humanitarian convoys before publication, following the Berkeley Protocol.
Indicators and how to detect them
| Indicator | Detection approach |
|---|---|
| Burn scars (dNBR) | Sentinel-2 NBR pre minus post; dNBR > 0.27 is moderate/high burn severity. Corroborate with NASA FIRMS active-fire pixels. |
| Deforestation (NDVI) | Same-season NDVI difference and Global Forest Watch GLAD/RADD alerts. Attribute to conflict only when ACLED events are co-located. |
| Cratering and rubble | Sentinel-1 coherence loss and PlanetScope tasking (humanitarian releases). Look for coherence drop paired with a nearby ACLED explosion event. |
| Oil-facility fires and slicks | Sentinel-2 SWIR (B12) hotspot detection, VIIRS Nightfire, and Sentinel-1 SAR for offshore slicks. |
| Flooding of built areas | Sentinel-1 VV backscatter thresholding masked to WorldPop settlement footprints and HDX admin boundaries. |
| Aquifer and water-body stress | MODIS/Sentinel-3 chlorophyll indices, Landsat surface-water extent, and OCHA WASH cluster assessments. |
Sources: Copernicus Programme, NASA FIRMS, Global Forest Watch, ACLED, and the Humanitarian Data Exchange (OCHA).
Step-by-step OSINT workflow (with code)
This is the applied version of the six-step workflow, wired to the data infrastructure Humanity Centered Data already runs: country pages for scoping, ACLED for events, HDX for boundaries and populations, Sentinel Hub and rasterio for change detection, and the shared CitationsMethodology block for publication.
Step 1.Scope the incident against site infrastructure
Humanity Centered Data country + ACLEDStart on the relevant country page (for example /sudan or /ukraine) to pull the current displacement figures, active thematic briefs, and the list of ACLED-flagged hotspots the site already tracks. Copy the ISO3 code, the admin1 name, and the incident date range into a scoping note. This ties every downstream raster back to a population and a governance unit the platform already covers.
Step 2.Pull ACLED events for the bounding box and window
ACLED APIQuery ACLED for the same bounding box and dates. Filter to event types that plausibly cause environmental harm: explosions/remote violence, battles, and strategic developments involving infrastructure. Save the response as GeoJSON so it drops straight into QGIS or Leaflet.
curl -G 'https://api.acleddata.com/acled/read' \ --data-urlencode 'key=YOUR_KEY' \ --data-urlencode 'email=you@org' \ --data-urlencode 'iso=729' \ --data-urlencode 'event_type=Explosions/Remote violence|Battles' \ --data-urlencode 'event_date=2025-01-01|2026-06-30' \ --data-urlencode 'event_date_where=BETWEEN'Step 3.Grab HDX admin boundaries and settlement layers
Humanitarian Data Exchange (HDX)Download COD-AB admin boundaries (admin1/admin2) and, where available, IOM DTM site coordinates and WorldPop constrained population rasters for the country. Clip everything to the bounding box. These layers turn a raw change pixel into an answer to "which district, which settlement, how many people".
# HDX CKAN API - list Sudan COD boundaries curl 'https://data.humdata.org/api/3/action/package_search?q=cod-ab+sudan&rows=5' | jq '.result.results[].name'Step 4.Compute a change index in Sentinel Hub or rasterio
Copernicus Sentinel-2 / Sentinel-1Use the Sentinel Hub Custom Script below for dNBR (burn severity). For deforestation swap to NDVI difference; for flooded built-up areas run Sentinel-1 VV backscatter thresholding. Export as a GeoTIFF with the sensor, dates, and formula written into the filename so provenance survives.
// Sentinel Hub evalscript - dNBR (Normalized Burn Ratio difference) //VERSION=3 function setup() { return { input: [{ bands: ['B08', 'B12', 'dataMask'] }], output: { bands: 1, sampleType: 'FLOAT32' }, mosaicking: 'ORBIT', }; } function evaluatePixel(samples) { const pre = samples[samples.length - 1]; const post = samples[0]; 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 severity }Step 5.Join the change raster to ACLED and HDX layers
QGIS / GeoPandasOverlay the dNBR (or NDVI difference) raster with the ACLED GeoJSON and HDX admin/settlement layers. Keep only change pixels that fall within a defined buffer (typically 2 km) of an ACLED event in the same window. This is the step that converts "something changed" into "damage in the environment co-located with a documented incident".
import geopandas as gpd, rasterio from rasterio.features import geometry_mask acled = gpd.read_file('acled_sudan_2025_2026.geojson').to_crs(3857) buffer = acled.buffer(2000) # 2 km buffer around each event with rasterio.open('dnbr_sudan_2025_2026.tif') as src: mask = geometry_mask(buffer, out_shape=src.shape, transform=src.transform, invert=True) dnbr = src.read(1) attributed = (dnbr > 0.27) & mask # burn severity co-located with eventsStep 6.Corroborate anomalies with independent sources
NASA FIRMS + GFW + ReliefWebFor every attributed cluster, pull FIRMS active fires (VIIRS/MODIS), Global Forest Watch GLAD/RADD alerts, and ReliefWeb situation reports for the same admin unit and window. Log at least one independent match per finding. Single-sensor anomalies stay in the working file, not in the publication.
# NASA FIRMS - last 10 days of VIIRS active fires for Sudan curl 'https://firms.modaps.eosdis.nasa.gov/api/country/csv/YOUR_MAP_KEY/VIIRS_SNPP_NRT/SDN/10'Step 7.Publish through the site methodology block
Humanity Centered Data CitationsMethodologyWrap every published chart or map with the shared CitationsMethodology component so readers see the sensor, dates, formula, bounding box, ACLED query, and independent sources. Redact coordinates of IDP sites and informal settlements per the Berkeley Protocol before pushing.
Evidence standards
Same-season baseline
Two independent sources
Detection is not attribution
Protection first
Common failure modes
- Season mistaken for damage. Comparing a wet-season and dry-season scene inflates change signals. Always pair same-season scenes.
- Cloud and shadow artefacts. Optical indices spike under haze. Apply Sentinel-2 SCL cloud masks and validate with a SAR scene.
- Over-attribution. A change raster shows what happened, not who caused it. Attribution needs an ACLED event and independent reporting for the same window.
- Exposing displaced people. Sharing precise coordinates of IDP sites or informal settlements can endanger residents. Generalise or redact before publishing.
Frequently asked questions
How do researchers document damage in the environment caused by conflict?
By combining OSINT satellite imagery (Sentinel-1 SAR and Sentinel-2 optical), conflict-event data from ACLED, and humanitarian layers from HDX. Analysts compute change indices such as dNBR and NDVI difference on pre-event and post-event scenes, then corroborate each anomaly against NASA FIRMS, Global Forest Watch, and ground reporting before publishing.
Which environmental harms can be tracked remotely in a war zone?
Burn scars, deforestation, cratering and rubble, oil-facility fires, water contamination signals, and flooding of built areas are all detectable with free Copernicus and Landsat imagery. Air-quality proxies (NO2, aerosol) are available from Sentinel-5P for regional-scale monitoring.
How is this different from general satellite journalism?
Environmental conflict monitoring pairs change-detection rasters with humanitarian datasets: ACLED events, IOM DTM sites, and OCHA cluster assessments. The output is not a single before-and-after image but an audited map linking environmental change to specific incidents and affected populations.
What are the ethical limits when publishing environmental damage evidence?
Follow the Berkeley Protocol on Digital Open Source Investigations: preserve provenance, disclose methods, avoid revealing coordinates of at-risk populations, and separate detection (what changed) from attribution (who caused it). Coordinate with protection actors before publishing near active displacement sites.
What free tools cover the full workflow?
The Copernicus Browser and Sentinel Hub Custom Scripts for imagery and indices; NASA FIRMS for active fires; Global Forest Watch for tree-cover loss; ACLED for conflict events; and the Humanitarian Data Exchange (HDX) for admin boundaries, IOM DTM sites, and cluster assessments. QGIS and rasterio handle the analysis end.
Related resources
Sentinel Hub, dNBR, NDVI, and HDX overlay workflow
Pull the conflict events you overlay on change rasters
Country dashboards this methodology powers
How HDX is structured and what to pull first
