Is a flash drought drying out my region's soil before anyone notices?
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.
-98, 38 → -94, 42 (US Central Plains (Kansas/Nebraska))A flash drought is a drought in fast-forward: weeks of heat and wind pull water out of the ground faster than rain can replace it, and a green field can turn brown before the official drought maps catch up. NASA's **SMAP** mission measures [soil moisture](/glossary/soil-moisture/) from orbit using a [passive-microwave](/glossary/passive-microwave/) radiometer, so you can watch the top layer of soil dry out across your region — day by day — even where there isn't a single ground sensor. **Verified locally.** For the US Central Plains AOI (38–42 °N, 98–94 °W), the SMAP enhanced L3 `soil_moisture` field averaged **0.235 m³/m³ on 1 Jun 2023** and fell to **0.220 m³/m³ by 5 Aug 2023** — a real, measurable drying of the surface soil over a single summer, read straight from the HDF5 granules. That drop is the kind of fingerprint a flash drought leaves: it's the *signal*, not yet a verdict, but it's exactly what you'd watch to catch one early.
Is a flash drought drying out my region’s soil before anyone notices?
A flash drought is a drought in fast-forward: weeks of heat and wind pull water out of the ground faster than rain can replace it, and a green field can turn brown before the official drought maps catch up. NASA’s SMAP mission measures soil moisture from orbit using a passive-microwave radiometer, so you can watch the top layer of soil dry out across your region — day by day — even where there isn’t a single ground sensor.
Verified locally. For the US Central Plains AOI (38–42 °N, 98–94 °W), the SMAP enhanced L3
soil_moisture field averaged 0.235 m³/m³ on 1 Jun 2023 and fell to 0.220 m³/m³ by 5 Aug
2023 — a real, measurable drying of the surface soil over a single summer, read straight from the
HDF5 granules. That drop is the kind of fingerprint a flash drought leaves: it’s the signal, not
yet a verdict, but it’s exactly what you’d watch to catch one early.
What you can answer
- How wet the top ~5 cm of soil is right now, and on any day back to 2015 — SMAP
soil_moisturein volumetric units (m³ of water per m³ of soil) - Whether soil is drying faster than usual — compare two dates weeks apart, or stack a season’s granules to see the slope of the decline
- Where the drying is concentrated — the 9 km enhanced grid resolves which parts of a region are losing water fastest, not just a single regional average
- How drying lines up with vegetation stress — pair with MOD13 NDVI to see whether crops and grass are starting to respond
- How drying lines up with thirst from the atmosphere — pair with ECOSTRESS or MOD16 evapotranspiration, the water leaving the surface that a flash drought accelerates
What you can NOT answer with these datasets alone
- Whether it is officially a “drought” — that’s a designation (e.g., US Drought Monitor) built from many inputs and human judgment; SMAP gives you one physical variable, not the label
- Root-zone or deep soil water — SMAP senses only the top few centimetres; crops can still draw on moisture below what the satellite sees, so dry surface ≠ dead crop
- The cause — falling soil moisture could be heat, wind, missing rain, or irrigation turned off; the data shows the drying, not why
- What happens next — these are observations, not a forecast; predicting whether the drought deepens needs weather models on top of this
- Fine within-field detail — at 9 km a pixel blends many fields, roads, and water bodies; for a single farm you’d need higher-resolution or in-situ probes
- Frozen or densely forested ground reliably — the microwave retrieval degrades under snow, ice, open water, or thick canopy, so check the retrieval quality flags
Code template (Python, cloud-direct)
Verified locally.
SPL3SMP_E, groupSoil_Moisture_Retrieval_Data_AM, datasetsoil_moisture(fill value-9999), is a global EASE-grid HDF5 file with matchinglatitude/longitudearrays in the same group. Subset to your AOI with those arrays, drop the fill value, and average. Compare two dates weeks apart to reveal rapid drying.
import os, re, warnings, earthaccess, h5py, numpy as np
warnings.filterwarnings("ignore") # quiet earthaccess FutureWarnings
# 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 = -98, 38, -94, 42 # US Central Plains (Kansas/Nebraska)
def mean_sm(date0, date1):
g = earthaccess.search_data(short_name="SPL3SMP_E",
temporal=(date0, date1),
bounding_box=(W, S, E, N))
f = earthaccess.open(g[:1])[0]
with h5py.File(f, "r") as h5:
grp = h5["Soil_Moisture_Retrieval_Data_AM"]
sm = np.array(grp["soil_moisture"][:], dtype="float64")
lat = grp["latitude"][:]
lon = grp["longitude"][:]
aoi = (lat >= S) & (lat <= N) & (lon >= W) & (lon <= E) & (lat != -9999.0)
valid = (sm != -9999.0) & np.isfinite(sm)
return float(sm[aoi & valid].mean())
early = mean_sm("2023-06-01", "2023-06-10") # ~0.235 m3/m3
late = mean_sm("2023-08-05", "2023-08-15") # ~0.220 m3/m3
print(f"surface soil moisture: {early:.3f} -> {late:.3f} m3/m3 (drying = flash-drought signal)")Make it yours → Edit the AOI box, the date window, the climatology baseline, and the percentile/anomaly threshold in the notebook.
The anomaly vs a baseline (percent-of-normal + z-score) 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).