When a dust storm blows in, how bad is the air — and who's downwind?
Draw a rectangle to pick your area of interest, then see what NASA data covers it (live, here in your browser) or download a ready-to-run notebook with your AOI pre-filled. The notebook runs in any Python environment — it needs a free Earthdata Login to fetch the data.
-30, 12 → -18, 22 (Tropical Atlantic off West Africa (Saharan dust))A big dust outbreak is one of the few air-quality events you can watch from space as it happens — a brown river of Saharan dust pouring off West Africa and riding the trade winds across the Atlantic. NASA's **MERRA-2** reanalysis (`M2T1NXAER`) gives an hourly, global map of how thick the dust is in the air and how much of it is down at the surface where people breathe it, going back to 1980 — so you can follow one storm hour by hour and see where the plume is headed. **Verified locally.** For the tropical Atlantic off West Africa (12–22 °N) during the June 2020 "Godzilla" Saharan plume, the MERRA-2 `DUEXTTAU` field (dust [aerosol optical depth](/glossary/aerosol-optical-depth/) at 550 nm) read a **peak of 3.48** (area mean 1.71) at 17:30 UTC on 18 Jun 2020 — an extraordinarily opaque sky, since an AOD above ~1 already means heavily hazed sun. The companion `DUSMASS25` field (surface dust in the PM2.5 size range) peaked around **341 µg m⁻³** in the same box — many times any healthy daily air-quality limit, if that surface concentration were over a populated coastline.
When a dust storm blows in, how bad is the air — and who’s downwind?
A big dust outbreak is one of the few air-quality events you can watch from space as it happens —
a brown river of Saharan dust pouring off West Africa and riding the trade winds across the
Atlantic. NASA’s MERRA-2 reanalysis (M2T1NXAER) gives an hourly, global map of how thick the
dust is in the air and how much of it is down at the surface where people breathe it, going back to
1980 — so you can follow one storm hour by hour and see where the plume is headed.
Verified locally. For the tropical Atlantic off West Africa (12–22 °N) during the June 2020
“Godzilla” Saharan plume, the MERRA-2 DUEXTTAU field (dust aerosol optical depth
at 550 nm) read a peak of 3.48 (area mean 1.71) at 17:30 UTC on 18 Jun 2020 — an extraordinarily
opaque sky, since an AOD above ~1 already means heavily hazed sun. The companion DUSMASS25 field
(surface dust in the PM2.5 size range) peaked around 341 µg m⁻³ in the same box — many times any
healthy daily air-quality limit, if that surface concentration were over a populated coastline.
What you can answer
- How thick the dust is overhead right now (or any past hour back to 1980) —
DUEXTTAU, the dust-only optical depth at 550 nm (unitless; higher = more dust blocking the sun) - How much dust is down at breathing level —
DUSMASS25(PM2.5-size surface dust) andDUSMASS(total), in kg m⁻³; multiply by 1e9 for µg m⁻³ - Where the plume is heading, hour by hour — step through the hourly granules and watch the centre of mass move west across the ocean with the trade winds
- Roughly how many people sit downwind — overlay WorldPop population on the plume’s path to estimate exposed populations along a coastline or city
- Whether satellites saw the same thing — cross-check the reanalysis against MODIS MOD04 aerosol optical depth retrieved directly from the imagery
What you can NOT answer with these datasets alone
- The exact PM2.5 a person actually breathed — MERRA-2 is a ~50 km model reanalysis, not a street-level monitor; local terrain, indoor air, and microclimate all matter
- Health outcomes — high dust raises respiratory and cardiovascular risk, but linking a plume to ER visits needs hospital/clinic data, not satellites
- Dust vs. other pollution —
DUEXTTAUis dust-specific, but real air also carries smoke, sea salt, and industrial particles that change what “bad air” means locally - Sub-50 km detail — a single neighbourhood, valley, or near-source dust devil is finer than the grid; pair with ground monitors or higher-resolution imagery
- Future forecasts — this is a reanalysis of what already happened, not a forward forecast; use an operational dust forecast model for “tomorrow”
Code template (Python, cloud-direct)
Verified locally.
M2T1NXAERis a global hourly NetCDF of MERRA-2 aerosol diagnostics; open one granule lazily and slice your bounding box before reading.DUEXTTAUis unitless dust optical depth;DUSMASS25is surface PM2.5-dust in kg m⁻³ (× 1e9 → µg m⁻³).
import os, re, earthaccess, xarray as xr, numpy as np
# load Earthdata creds from .env without `source` (passwords can break the shell)
for line in open(".env"):
m = re.match(r'\s*(?:export\s+)?([A-Z0-9_]+)\s*=\s*(.*)\s*$', line)
if m: os.environ.setdefault(m.group(1), m.group(2).strip().strip('"').strip("'"))
earthaccess.login(strategy="environment") # free Earthdata Login
W, S, E, N = -30, 12, -18, 22 # tropical Atlantic off West Africa
g = earthaccess.search_data(short_name="M2T1NXAER",
temporal=("2020-06-18", "2020-06-22"),
bounding_box=(W, S, E, N))
ds = xr.open_dataset(earthaccess.open(g[:1])[0])
sub = ds.sel(lon=slice(W, E), lat=slice(S, N))
aod = sub["DUEXTTAU"] # dust optical depth (unitless)
print("dust AOD peak:", round(float(aod.max()), 2),
" mean:", round(float(aod.mean()), 2))
pm = sub["DUSMASS25"] * 1e9 # surface PM2.5 dust, µg m⁻³
print("surface dust peak:", round(float(pm.max()), 1), "µg/m³")
# follow the plume: loop the hourly granules, slice the same bbox each hour,
# and overlay WorldPop population along the downwind coastline to estimate exposureMake it yours → Set the plume bounding box, the storm dates/hours, and the surface-dust health threshold in the notebook for your event.
The correlation between two signals at the heart of this question — runnable on synthetic data, right here. The full earthaccess code template further down does it on real NASA data (needs an Earthdata login).