Every major ESG framework — MSCI, Sustainalytics, S&P Global — rates steel mills and chemical plants harshly. They emit a lot, therefore they score badly. The frameworks measure the level of emissions at a point in time. Almost none of them measure the rate of change.
That distinction matters. A steel producer whose facility NO₂ is declining by 1 µg/m³ per year is making capital investments that will compound. One with flat emissions is not. Under scope-based ESG, both may receive the same score — because steelmaking is inherently emissions-intensive regardless of trajectory.
The method
For each company we identified its primary production facility in the EEA
E-PRTR registry
(~60,000 verified EU industrial facilities, CC BY 4.0). Rather than drawing manual bounding boxes,
we used each facility's verified GPS from E-PRTR as the query anchor — which also gives us
access to the self-reported annual NOₓ emissions for comparison. We queried the
Jiskta API using aggregate=trend,
which runs OLS linear regression on monthly mean NO₂ values per grid cell and returns
a slope in µg/m³/year. We used 72 months of Copernicus CAMS reanalysis
(January 2018 – December 2023), then fetched 5-year total returns from Yahoo Finance
for the same window (January 2018 – January 2024).
from jiskta import JisktaClient
import yfinance as yf
client = JisktaClient(api_key="sk_live_...")
# Step 1: Find the facility in E-PRTR (verified GPS, not manual bbox)
facilities = client.facilities(name="RWE")
rwe = next(f for f in facilities if f["country"] == "DE" and "Power" in f["name"])
print(f"RWE Power: {rwe['lat']:.3f}°N, {rwe['lon']:.3f}°E")
# → RWE Power: 50.833°N, 6.315°E (Weisweiler coal plant)
# Step 2: Query CAMS trend at verified facility GPS — also returns E-PRTR divergence
df, divergence = client.query(
facility=rwe["inspire_hash"], # E-PRTR facility ID pins the exact location
start="2018-01", end="2023-12",
variables=["no2"], aggregate="trend",
return_divergence=True,
)
slope = df["slope"].mean()
print(f"CAMS NO₂ slope: {slope:+.3f} µg/m³/yr") # → −1.095
print(f"E-PRTR NOₓ slope: {divergence['eprtr_nox_slope']:+.0f} t/yr") # → −642
print(f"Divergence: {divergence['direction']} (score={divergence['score']:.2f})") # → consistent
rwe_stock = yf.Ticker("RWE.DE")
hist = rwe_stock.history(start="2018-01-01", end="2024-01-01", auto_adjust=True)
ret = (hist["Close"].iloc[-1] / hist["Close"].iloc[0] - 1) * 100
print(f"RWE total return: {ret:+.1f}%") # → +190.8% Who is actually reducing NO₂ at the source?
The bars below show the mean OLS slope across all CAMS grid cells in each facility bbox. A negative slope means NO₂ is falling — the facility area is getting measurably cleaner each year. The only bar extending downward (HeidelbergMaterials) means NO₂ is rising at that facility.
Three findings jump out. First, RWE leads clearly — the coal-to-renewables transition is visible from orbit. Every closed power station removes a sustained NO₂ source and the satellite record shows this as a clean downward trend. Second, BASF ranks surprisingly high: Ludwigshafen has been reducing NO₂ meaningfully, driven by energy efficiency improvements and process changes. Third, and most striking: HeidelbergMaterials is the only company whose facility NO₂ is rising (+0.930 µg/m³/yr).
The surprising result: markets don't price this signal
If satellite emission trajectories were already priced into equities, we would expect a clear positive correlation between improvement rate and stock return. The scatter plot tells a different story.
The trend line has R² = 0.08 across all six companies — barely above noise. The hypothesis that faster-improving companies would outperform does not hold cleanly across this sample. MT and BASF both have strong improvement rates yet negative returns; TKA barely improves and is also negative. RWE is the only company where the satellite signal and the market performance align.
Two signals that matter
Signal 1 — HeidelbergMaterials: satellite vs. self-reported divergence
HeidelbergMaterials rebranded from HeidelbergCement in 2022 and has built a strong market narrative around green cement: CCUS investment, low-carbon products, net-zero pledges. The stock is roughly flat (+7.6% over 6 years) — not a disaster, but the market is pricing the green transition story.
The E-PRTR supports the narrative: the Leimen plant's self-reported NOₓ fell from 262 tonnes (2018) to 142 tonnes (2021) — a 46% reduction that is real and audited. But the satellite disagrees: the Leimen grid cell shows NO₂ rising at +0.930 µg/m³/yr over 2018–2023. This divergence does not mean the facility is misreporting; it may reflect rising background activity from other sources in the same 0.1° cell, increased truck traffic, or cement logistics. But it is a flag: the reported improvement at the stack level is not translating to measured atmospheric improvement at the facility level.
Signal 2 — RWE: the only company the signal works for
RWE is the cleanest case in the dataset: −1.095 µg/m³/yr improvement and +190.8% total return. The mechanism is structural and traceable: hard coal and lignite plant closures remove real emitters from the grid. This is not a narrative — it is a physical fact visible in atmospheric data, and the market has priced it correctly.
This suggests a hypothesis worth testing at scale: the satellite signal is most actionable for energy transition companies where capacity additions and closures create sharp, traceable changes in the NO₂ record. For heavy manufacturers (steel, chemicals, cement), the signal is noisier because process improvements are more incremental and macro factors dominate.
Satellite vs. self-reported: where they agree and where they don't
The E-PRTR database contains annual self-reported NOₓ emissions for each facility, submitted by operators to national regulators and then to the EEA. Comparing the E-PRTR NOₓ trend to the CAMS satellite NO₂ trend for the same facility produces a divergence score — a direct test of whether the satellite and the permit holder are telling the same story.
| Company | E-PRTR facility | CAMS slope | E-PRTR NOₓ trend | Signal |
|---|---|---|---|---|
| RWE | RWE Power AG, Weisweiler id: 12394198829192159256 | −1.095 µg/m³/yr | −642 t NOₓ/yr | ✅ Consistent — coal exit verified by both satellite and regulator |
| BASF | BASF SE, Ludwigshafen id: 12626246128710077482 | −0.933 µg/m³/yr | −246 t NOₓ/yr | ✅ Consistent — efficiency improvements visible in both sources |
| VW | Volkswagen AG, Wolfsburg id: 13408216860473500983 | −0.422 µg/m³/yr | −176 t NOₓ/yr | ✅ Consistent — BEV transition reducing plant energy consumption |
| ArcelorMittal | Arcelormittal Belgium, Ghent id: 1986304935103026946 | −1.033 µg/m³/yr | +89 t NOₓ/yr (flat) | ⚠️ Divergent — satellite improving but E-PRTR flat; regional co-location effect? |
| Thyssenkrupp | TK Steel, Bruckhausen id: 11332985180430661771 | −0.385 µg/m³/yr | +5 t NOₓ/yr (flat) | ⚠️ Divergent — small CAMS improvement not confirmed by E-PRTR |
| HeidelbergMaterials | HeidelbergCement, Leimen id: 3687905997148585988 | +0.930 µg/m³/yr | −43 t NOₓ/yr | 🚩 Strongly divergent — E-PRTR improving but satellite says worsening |
The three consistent pairs (RWE, BASF, VW) are the cleanest signal: satellite and regulator agree on direction. For analysts these are the high-confidence cases.
The ArcelorMittal and Thyssenkrupp divergences are easier to explain: the Ghent and Duisburg industrial zones contain dozens of facilities in a single 0.1° CAMS grid cell. When a nearby coke plant or power station closes, the CAMS cell improves even if ArcelorMittal or Thyssenkrupp's own reported emissions are unchanged. CAMS measures the area; E-PRTR measures the operator.
The HeidelbergMaterials Leimen case is the most striking. The Leimen cement plant self-reported NOₓ fell from 262 tonnes (2018) to 142 tonnes (2021) — a 46% reduction that matches the green cement narrative. But the CAMS grid cell centred on the plant shows NO₂ rising at +0.930 µg/m³/yr over the same period. Either the satellite is picking up background activity unrelated to the cement plant, or the self-reported reduction overstates the actual environmental improvement. This ambiguity is exactly what the divergence score is designed to flag for further investigation.
Data table
| Company | Facility | CAMS NO₂ slope (µg/m³/yr) | E-PRTR NOₓ (2018→2023) | Total return 2018–2024 | Reading |
|---|---|---|---|---|---|
| RWE (RWE.DE) | Weisweiler, Coal/Power | −1.095 | 11,500 → 5,864 t (−642/yr) | +190.8% | ✅ Coal exit visible from space — signal works |
| ArcelorMittal (MT) | Belgium/Ghent, Steel | −1.033 | 5,120 → 5,170 t (flat) | −11.9% | ⚠️ CAMS improving; E-PRTR flat — nearby sources explain CAMS gain |
| BASF (BAS.DE) | Ludwigshafen, Chemicals | −0.933 | 4,170 → 2,827 t (−246/yr) | −25.3% | ⚠️ Facility improving; energy crisis hit earnings first |
| Volkswagen (VOW3.DE) | Wolfsburg, Automotive | −0.422 | 1,640 → 713 t (−176/yr) | −0.3% | 🟡 Both sources agree on improvement; BEV transition costs drag stock |
| Thyssenkrupp (TKA.DE) | Bruckhausen, Steel | −0.385 | 516 → 546 t (flat) | −72.8% | ❌ Barely improving on either metric; structural issues dominate |
| HeidelbergMaterials (HEI.DE) | Leimen, Cement | +0.930 | 262 → 142 t (−43/yr) | +7.6% | 🚩 E-PRTR says improving; satellite says worsening — divergence flag |
CAMS slopes from Jiskta API (aggregate=trend, Copernicus CAMS 0.1°, 72 months 2018–2023).
E-PRTR NOₓ from EEA E-PRTR registry (verified facility GPS, annual self-reported emissions, CC BY 4.0).
Stock returns from Yahoo Finance, Jan 2018 → Jan 2024, adjusted close, total return.
Why this matters for ESG analysis
The low R² is not a failure — it is the finding. Markets currently price sectoral narratives (green cement, EV transition) rather than satellite-verifiable emission trajectories. This creates two opportunities:
- Short the narrative divergence: When a company markets itself as a green transition leader but facility NO₂ is flat or rising, that divergence tends to resolve — either through operational improvement (stock re-rates up) or through narrative correction (stock re-rates down).
- Front-run the disclosure lag: Scope 1 annual reports are published 12–18 months after the year ends. Satellite NO₂ trends are available monthly. For companies where facility-level emission changes drive fundamental valuation (primarily utilities and energy transition plays), the satellite signal leads the disclosure by over a year.
Replicate this analysis
The complete notebook — including facility lookup via the E-PRTR registry, CAMS trend queries
using verified facility GPS, and the divergence analysis — is in the
jiskta-examples repository
(notebooks/09_esg_satellite_validation.ipynb). All numbers in this post
were generated by running that notebook against the live Jiskta API and the EEA E-PRTR dataset.
Adding more companies is straightforward: use client.facilities(name="...")
to find the E-PRTR facility, then call client.query(facility=id, ..., return_divergence=True).
Each company requires 6 API credits for a 6-year trend (one credit per year per facility).
At Starter pricing, analysing a 50-company industrial portfolio costs under €0.10.
Query facility-level NO₂ trends for any European industrial company, back to 2013. Sign up for a free API key and the first 500 credits are on us.