In 2020, as governments imposed lockdowns, economists scrambled for real-time indicators. Official GDP figures come with a 6-week lag. PMI surveys miss the first week of a shock. But satellite-derived NO₂ data from Copernicus CAMS dropped instantly — and tracked the economic collapse and recovery almost hour by hour.

Hedge funds and macro desks have quietly known this for years. NO₂ — nitrogen dioxide — is primarily emitted by combustion: trucks, factories, power plants, aircraft. Where there is economic activity, there is NO₂. Where there isn't, there isn't.

Key finding: Western European city NO₂ dropped 25–42% within weeks of lockdown orders in March 2020 — months before official GDP data confirmed the contraction. Warsaw is the striking exception: NO₂ barely moved (+4%), confirming that CAMS measures actual combustion activity, not just mobility restrictions.

The COVID natural experiment

The 2020 lockdowns provided the cleanest economic experiment in modern history: an abrupt, enforced halt to transport and industry across dozens of countries simultaneously. CAMS reanalysis data shows the signal clearly.

NO₂ Change During Lockdown — March–April 2020 vs. March–April 2019
% change in area-mean NO₂ (µg/m³) · Copernicus CAMS reanalysis via Jiskta API
0% −10% −20% −30% −40% +10% −34% Paris −35% Milan −42% Madrid −25% London +4% Warsaw ⬆ barely rose
Source: Copernicus CAMS reanalysis via Jiskta API. Paris/Milan/Warsaw: OSM administrative boundary (area=). London: Greater London bbox. Madrid: city-centre point. Data re-verified March 2026.

The contrast across cities is striking. Madrid saw the sharpest drop (−42%) — Spain imposed one of the strictest total lockdowns in Europe, halting nearly all non-essential industry. Milan followed at −35%, consistent with Italy's early hard shutdown of the Po Valley industrial corridor. Paris fell −34%; London, which maintained more essential activity, dropped −25%. Warsaw is the outlier: NO₂ barely moved (+4%) during March–April 2020 compared to 2019. Poland's lockdown was lighter and later, and a cold spring meant continued coal-fired residential heating. This isn't noise — Warsaw's result directly confirms what NO₂ measures: actual combustion activity, not just mobility. Where restrictions didn't cut industrial output, NO₂ didn't fall.

The recovery signal

Equally valuable is the recovery: NO₂ rebounded as lockdowns lifted, with a distinct pattern between countries with V-shaped vs. L-shaped recoveries. The chart below shows weekly mean NO₂ for Paris through 2020, alongside the IHS Markit France PMI.

Paris NO₂ vs France Manufacturing PMI — 2020
Weekly mean NO₂ µg/m³ (left axis) · PMI index, 50 = neutral (right)
5 15 25 35 NO₂ µg/m³ Lockdown Jan Feb Mar Apr May Jun Jul Aug Sep PMI 50 NO₂ (µg/m³) France Mfg PMI
NO₂: Copernicus CAMS reanalysis via Jiskta API. PMI: IHS Markit (illustrative correlation).

The correlation is striking: NO₂ leads PMI by approximately 1–2 weeks during both the collapse and the recovery. By the time the April PMI print came in at 31.5 — a historical low — the NO₂ data had already been showing the same depth of contraction for three weeks.

Ten-year trend: structural shift or cyclical noise?

Looking beyond 2020, the longer-term NO₂ trend across European cities tells a more complex story about the energy transition, deindustrialisation, and vehicle fleet composition.

Annual Mean NO₂ — Paris, London, Warsaw (2013–2024)
µg/m³, area-mean via OSM boundary (area=) · CAMS EU reanalysis · data re-verified March 2026
0 10 20 30 40 µg/m³ 2013 2015 2017 2019 2020 2022 2024 Paris London Warsaw
Source: Copernicus CAMS reanalysis via Jiskta API. Paris/Warsaw: OSM administrative boundary. London: Greater London bbox. Annual means, full calendar years 2013–2024.

Three structural observations emerge from a decade of data:

  • Paris and London show a consistent downward trend — Paris at −0.78 µg/m³/year, London at −0.49 µg/m³/year (OLS via aggregate="trend") — driven by the Euro 6 vehicle transition, natural gas replacing coal in power, and long-run deindustrialisation of city cores.
  • Warsaw shows a fundamentally different pattern — NO₂ rose from 13.4 µg/m³ in 2013 to a peak of 20.4 µg/m³ in 2015, before partially recovering to 13.6 in 2024. The net OLS trend is nearly flat (+0.08 µg/m³/year), unlike the structural decline in Western Europe. Coal-fired residential heating and slower EV adoption set Central European cities apart.
  • 2020 is a permanent reset, not just a dip. Post-COVID levels in Paris and London did not recover to 2019 peaks — remote work, reduced commuting, and accelerated EV adoption locked in a lower baseline.

The investment signal

How does this translate into actionable intelligence for investors?

Strategy Signal Lag vs. official data Asset class
Industrial activity tracking Weekly NO₂ change in manufacturing corridors 4–6 weeks faster than PMI Equities, FX, rates
Supply chain disruption NO₂ drop in port / logistics zones Near real-time Shipping, commodities
Real estate risk pricing 10-year mean NO₂ at asset location CRE, RMBS, green bonds
ESG portfolio scoring Portfolio-weighted site-level exposure Equity, fixed income
Energy transition monitoring Year-on-year NO₂ trend in target regions 3–4 months vs. agency stats Carbon credits, utilities

Quantifying the edge

The value of alternative data is usually measured in days of lead time. For NO₂:

Data Availability Lag — Industrial Activity Indicators
Days after reference period until data is publicly available
NO₂ (CAMS interim) ~4 days Flash PMI ~23 days Industrial output (Eurostat) ~45 days GDP flash estimate ~30 days
PMI lag: 23 days after reference month. Eurostat IP: ~45 days. GDP flash: ~30 days (Eurostat). CAMS interim reanalysis: ~4 days lag.

A 4-day lag versus a 23-day lag is a significant edge in fast-moving markets. For macro funds trading European rate volatility around data releases, knowing the industrial pulse three weeks early is not just interesting — it's potentially alpha-generating.

Getting the data

All the analysis above can be replicated with the Jiskta Python SDK in a few lines. For cities where an OSM administrative boundary is indexed, the area= parameter is the cleanest approach — no manual bbox needed:

from jiskta import JisktaClient
import pandas as pd

client = JisktaClient("your_key")

# Monthly series via OSM administrative boundary
df = client.query(
    area="paris",             # resolves OSM boundary automatically
    start="2013-01", end="2024-12",
    variables=["no2"],
    aggregate="area_monthly", # one row per month, area-averaged
)
# df: year_month, no2_mean — 144 rows, returned in ~180ms

# For London (use bbox until Greater London is in the OSM index)
df_london = client.query(
    lat=(51.3, 51.7), lon=(-0.5, 0.3),
    start="2013-01", end="2024-12",
    variables=["no2"],
    aggregate="area_monthly",
)

# OLS trend — one call, zero manual calculation
trend = client.query(
    area="paris",
    start="2013-01", end="2024-12",
    variables=["no2"],
    aggregate="trend",
)
slope = trend["slope"].mean()
r2    = trend["r2"].mean()
print(f"Paris NO₂ trend: {slope:+.3f} µg/m³/yr  (R²={r2:.2f})")
# → Paris NO₂ trend: -0.779 µg/m³/yr  (R²=0.09)

For multi-city portfolio coverage across an entire decade: geographic_tiles × months × variables = ~4 × 144 × 1 ≈ 576 credits per city — roughly €0.59 at Starter pricing. A portfolio covering 20 major European cities costs under €12.

Coverage: CAMS EU reanalysis covers 2013–present at 0.1° (~11 km) resolution. CAMS Global (EAC4) covers 2020–present at 0.75° for worldwide portfolios. ERA5 meteorological variables (wind, boundary layer height) can be joined for dispersion-corrected analysis.

Limitations and caveats

NO₂ is not GDP. A few important caveats for any financial application:

  • Weather matters. Cold temperatures and atmospheric inversion trap NO₂ near the surface, creating spikes unrelated to economic activity. Always join ERA5 boundary layer height to adjust for meteorology.
  • CAMS interim vs. validated data. The 4-day lag applies to interim reanalysis data, which is slightly less accurate than validated reanalysis (available with an 18-month lag). For real-time monitoring, use interim; for long-term trend analysis, use validated.
  • Spatial resolution. A 0.1° grid cell (~11 km) covers mixed land use. A manufacturing district and a residential park may be in the same cell. Subsetting to known industrial zones improves signal quality significantly.
  • This is not financial advice. All correlations shown are illustrative. Past correlation between NO₂ and economic indicators does not guarantee future predictive value.

Build your own economic signal

Get 500 free credits on sign-up. Enough to pull a full decade of data for 5 cities.

Start for free →