Kortex
snapshot · 2026-07-08

Validation

Kortex outputs checked against independent ground truth, with the misses published alongside the hits. Six studies: entity resolution against live GLEIF records, interconnection-queue statistics against the published LBNL research, modelled generation revenue against SEC-reported revenue, the US fleet against EIA-860, spatial containment of every coordinate against its claimed country, and parent chains against issuers' own Exhibit 21 filings. Every study states its method and can be reproduced against the live API.

Studies executed 2026-07-02 · graph snapshot 2026-07-08

1 · Entity resolution vs live GLEIF records

Question. When Kortex says a generator's operator resolves to a legal entity with a given LEI, legal name and ultimate parent — do GLEIF's own records agree, today?

Method. Kortex carries 5,827 distinct LEIs on generator → entity stitches across three exposure tiers (verified_curated 570, verified_auto 1,100, unverified 4,157; a fourth tier, quarantined, is excluded from every product surface by design). We drew a blind deterministic sample — every ⌊n/25⌋th LEI in LEI order, 25 per tier, 75 records — and checked each against the GLEIF public API (CC0): does the LEI resolve, does our stored legal name match (script-aware comparison, CJK names compared directly), and where we store an ultimate parent, does GLEIF's relationship record agree?

TierSampledLEI resolvesLegal name exactUltimate parent agrees*Registration status
verified_curated2523/23†23/237/715 issued · 8 lapsed
verified_auto2525/2525/258/819 issued · 6 lapsed
unverified2525/2525/253/314 issued · 8 lapsed · 3 retired

*Where both Kortex and GLEIF report a parent: 18/18 agreement, zero contradictions. In 37 further cases we store a parent while GLEIF currently reports none — GLEIF Level-2 data allows entities to file reporting exceptions, and our stored chains derive from an earlier relationship snapshot. Flagged as a refresh item, not scored as agreement.

†The two non-resolving identifiers are not GLEIF LEIs: they are Kortex synthetic identifiers (prefix CE-SYNTH-, 75 platform-wide) minted for real operators that have no LEI — here the Office National de l'Électricité (Morocco) and the U.S. Army Corps of Engineers. The blind sample caught them, which is what a blind sample is for; they are documented and self-identifying.

What this does and does not validate. This study validates that the entity records Kortex serves are faithful to GLEIF as of today — identity, name, chain. It does not validate the judgment that a given operator string belongs to a given entity; that is what the audit tiers express, and why identity_source is stamped on every insight row. Honest findings: 22 of 73 LEIs are LAPSED (renewal lapsed — the identity remains valid; common for state-owned entities), and 3 entities in the unverified tier are RETIRED (ceased to exist) — a hygiene backlog now flagged for curation.

2 · Queue statistics vs published LBNL research

Question. The /v2/insights/queue-blockage screen is computed from raw LBNL Berkeley Lab interconnection-queue records. Do Kortex's aggregates reproduce the numbers LBNL itself publishes from the same underlying data?

Method. We computed headline statistics from the raw records in Kortex (36,441 projects, 9 regions, LBNL 2025 data vintage, records through end-2024) and compared them against the figures published in LBNL's Queued Up reports (2024 edition, data through end-2023; 2025 edition, data through end-2024). LBNL's rate statistics use a subset with comprehensive status data (7 ISOs + 30 non-ISO balancing areas); Kortex computes over all records — exact equality is not expected, agreement within ~1 point is.

StatisticLBNL publishedKortex reproductionΔ
2000–2018 cohort built, % of projects19%19.9%+0.9 pp
2000–2018 cohort built, % of capacity14%13.5%−0.5 pp
2000–2019 cohort built, % of capacity (EOY 2024)13%12.6%−0.4 pp
Withdrawn, 2000–2018 cohort, % of projects72%73.2%+1.2 pp
Active projects (EOY 2024)~10,30010,538+2%
Active capacity in queues~2,290 GW2,043 GW−11%

The one gap worth explaining: active capacity. LBNL reports generation and storage capacity separately (~1,400 GW + ~890 GW at EOY 2024) and counts hybrid projects' storage components in the storage figure; Kortex's per-project capacity fields under-collect second and third components of hybrid projects. The rate statistics — the thing the queue-blockage screen actually sells — reproduce within ~1 point. Published sources: LBNL Queued Up 2024 edition and 2025 edition.

3 · Modelled revenue vs reported revenue

Question. Kortex's est_revenue_usd is a model — installed capacity × technology capacity factors × zone price signals. It is the ranking spine of the fossil-revenue and stranded-asset screens. How does it relate to what companies actually report?

Method. We took every operator in the live fossil-revenue-exposure screen that resolves to an exchange ticker (7 of the top 50), summed Kortex's modelled generation revenue and attributed capacity, and set them against reported revenue from each company's FY2024 filings. The two numbers measure different things — the model prices wholesale generation value of the attributed fleet; reported revenue includes retail, networks, gas and trading — so the honest expectations are: (a) the model should systematically undershoot reported revenue, (b) the ratio should be explainable by business mix, and (c) attributed capacity should approximate the real fleet.

Operator groupAttributed fleetKortex modelledReported FY2024*Modelled / reportedBusiness mix
Tennessee Valley Authority34.6 GW · 53 plants$4.92B$12.31B40%~100% wholesale generation — the cleanest comparison; attributed fleet ≈ actual ~34 GW
NextEra Energy (NEE)45.3 GW · 167 plants$8.71B$24.75B35%Regulated FPL + competitive generation (NEER ~$6B)
Dominion Energy (D)26.6 GW · 67 plants$5.07B$14.46B35%Regulated, vertically integrated
Evergy (EVRG)11.3 GW · 26 plants$2.47B$5.85B42%Fully regulated, vertically integrated
Entergy (→ Entergy Louisiana, LLC)27.8 GW · 34 plants$2.50B$11.88B†21%Regulated; identity resolved at subsidiary level (see below)
NRG Energy (NRG)20.5 GW · 59 plants$2.61B$28.13B9%~96% of reported revenue is retail — the model prices only the generation fleet, which is the point
E.ON SE (EONGY)9.3 GW · 49 plants$4.27B€80.1Bn/mAttribution error — published below

*Reported total operating revenue, FY2024, from SEC 10-K XBRL (TVA: FY ended Sep 2024, annual results; E.ON: 2024 integrated annual report, EUR). †Entergy Corporation consolidated; the resolved subsidiary Entergy Louisiana, LLC reported $5.14B.

Reading the ratios. Regulated, vertically-integrated utilities cluster at 35–42% — reported revenue includes delivery, fuel-cost recovery and retail margin that a wholesale-generation model deliberately does not price. The consistency of that ratio across independent companies is the validation: the model preserves rank order and portfolio structure. NRG's 9% is the control case — its reported revenue is ~96% retail, and the model correctly prices only its plants. Where the model and reality diverge for a bad reason, we say so:

Published misses. This comparison surfaced a real error: the E.ON operator group included plants divested to Uniper and RWE years ago — source-reported operator tags that predate the divestitures. Fixed 2026-07-03: the full group was then researched plant-by-plant against filings, regulator registers and operator sites — 41 plants moved to their researched current operators (RWE, Uniper, EPH, Repsol, Veolia and others, each stitch carrying its source rationale), 11 confirmed genuinely retained by E.ON, and the group now reflects E.ON's real post-divestiture footprint. E.ON no longer appears in this screen at all — correctly, since its remaining generation is small CHP, hydro and solar. The comparison also shows a resolution-granularity effect: the Entergy group resolves to Entergy Louisiana, LLC (the group's largest operating subsidiary by attributed capacity) rather than Entergy Corporation — the LEI is correct but subsidiary-level; the parent chain climbs to the corporation, and since methodology v1.1 the row's exchange identifiers fall back to the listed parent when the operating entity itself is unlisted. Where attribution is clean, attributed capacity tracks the real fleet closely (TVA: 34.6 GW attributed vs ~34 GW actual). The table preserves the figures as measured on 2026-07-02.

4 · US fleet vs EIA-860, the official federal registry

Question. Kortex's US generator layer is built from OpenInfraMap, Global Energy Monitor and WRI — not from EIA-860. How does it compare, plant by plant, against the registry the US government itself maintains?

Method. We joined the Kortex US operational fleet (8,242 canonical generators, 1,009 GW) to EIA-860 2024 final (12,854 operating plants, 1,301 GW nameplate) through Kortex's existing EIA plant-ID crosswalk, aggregated both sides to plant level, and compared. One honesty constraint drives the design: the crosswalk was originally built by spatial-and-name matching, so location and name agreement are by construction. Capacity and fuel were never used in matching — they are the independent checks.

CheckResultCapacity-weighted
Plants joined5,887 (905 GW of EIA nameplate)69.5% of the official fleet
Capacity ratio, Kortex / EIA nameplatemedian 1.000
Capacity within ±10%86.1% of plants85.4%
Capacity within ±25%89.9% of plants93.3%
Dominant fuel agrees93.0% of plants96.1%

Coverage, stated by fuel — because the honest answer differs by technology. Kortex holds 90–97% of the official thermal, nuclear and hydro fleet, and that is where the platform's screens operate. Distributed renewables are the known gap:

FuelKortex USEIA-860Coverage
Gas509 GW564 GW90%
Coal175 GW190 GW92%
Nuclear96 GW102 GW95%
Hydro89 GW96 GW93%
Oil29 GW28 GW103%
Geothermal3.7 GW3.8 GW97%
Wind25 GW153 GW16%
Solar (utility-scale)28 GW124 GW22%
Batteries / storage27 GWnot modelled

Published misses. (1) US wind and solar coverage is 16–22% — a real limitation of the upstream open-source inventories for distributed US renewables, stated here rather than averaged away; if your use case is a US wind/solar asset registry, EIA-860 itself is the better tool today. (2) The tail of extreme capacity ratios is dominated by crosswalk mis-matches, not capacity errors — 329 plants (~6% of the joined book) sit outside 0.5–2×; the worst case matched a 2.4 GW hydro plant to a 3 MW solar site. Fixed 2026-07-03: the 143 clearly-wrong links (beyond 5×) were unlinked, and the capacity-factor fields they had contaminated were removed pending re-match; the remainder are queued for review. (3) 44 GW of Kortex US capacity carried no fuel classification. Fixed 2026-07-03: 11,321 operational generators worldwide were backfilled from the curated fuel canon (the two fields agree in 99.8% of cases where both exist); 21 US plants remain genuinely unclassified. (4) 247 crosswalk IDs no longer resolve in EIA-860 2024, consistent with plant retirements since the crosswalk was built.

5 · Spatial containment — every coordinate, checked against its claimed country

Question. 1.5 million records in the graph carry both coordinates and a country attribution. Does every point actually fall inside the country it claims? This is the screen that caught a German reactor wearing a North Carolina plant's coordinates during the nuclear-registry repair — here it is run across the whole graph.

Method. Every coordinated, country-attributed record (substations, mineral deposits, emission sources, generators, dams, ports, reactors) tested against its claimed country's polygon (geoBoundaries ADM0) with a 0.15° coastal buffer. Country claims normalised from names and codes; claims that could not be resolved to a polygon are reported as registry gaps, not scored as passes.

PopulationRecordsPassHard failsRegistry gaps*
Reactors (IAEA PRIS)720100.00%00
Dams41,14599.94%122
Mineral deposits304,60999.91%2821
Substations718,11899.76%61,699
Generators175,44499.50%313559
Emission sources294,56398.46%1,6262,917
Ports3,63094.63%90105
Total1,538,22999.50% · 99.85% of resolvable claims2,3185,303

*Registry gaps are claims that resolve to no polygon (Puerto Rico, Hong Kong and other territories absent from the boundary set) or to no ISO code — infrastructure limits of the screen itself, disclosed rather than counted as passes.

Reading the 2,318 fails — three different phenomena, not one. 1,774 (77%) sit within one degree of their claimed country: coastal and border precision, including offshore terminals beyond the buffer (most of the port fails — ports are the weakest row precisely because so many of them are legitimately offshore). 415 sit in a middle band. 129 records — 0.008% of the book — are in the far wrong-country class, and the confusion table separates real corruption from geography: a cluster of Peruvian mineral deposits from the USGS source whose coordinates land in India or the open ocean (source-data corruption, now a curation item), versus Kuril Islands assets claimed as Russian that the boundary set assigns to Japan, and Greenland sites recorded under Denmark — boundary and administrative attribution, not coordinate error.

Published misses. (1) A coordinate-corruption cluster in the USGS MRDS mineral-deposits source (~90 far fails, Peru cluster worst). Fixed 2026-07-03: 68 deposits were unambiguous digitisation sign errors — exactly one coordinate transform (longitude flip, latitude flip, both, or a swap) places each inside its claimed country — and were corrected with that containment guard; the 214 remaining fails are border-precision cases left as measured. (2) The port register's offshore anchorages need a marine-aware screen, not a landmass buffer. (3) The screen exposed two registry gaps in our own reference layer: the country-alias table lacked bare-code entries for Taiwan (fixed 2026-07-03) and French overseas territories (documented; the territory codes are absent from the country canon), and the boundary set has no polygons for several territories. (4) The reactor row is 100% because this same screen ran during the June nuclear-registry repair and its findings were fixed — that is the point of running it continuously.

6 · Parent chains vs the issuers' own Exhibit 21 filings

Question. When Kortex chains an operating utility to an ultimate parent, does the parent's own SEC 10-K — Exhibit 21, the subsidiary list the issuer signs — agree?

Method. We took every US-listed parent with at least two Kortex operating subsidiaries (entities that operate generators in the graph and chain to the parent via GLEIF relationship records) — 12 parents, 70 chains — fetched each parent's latest 10-K Exhibit 21 from EDGAR, and checked each subsidiary against the issuer's own list with suffix-normalised name matching. One asymmetry is built into the design: Reg S-K Item 601(b)(21) lets issuers omit insignificant subsidiaries, so absence from Exhibit 21 is reported as not listed, never as wrong.

Parent (latest 10-K)Kortex operating subsidiariesIssuer-confirmed
Duke Energy77/7
The Southern Company55/5
Entergy55/5
Constellation Energy55/5
American Electric Power55/5
NRG Energy44/4
Xcel Energy33/3
Vistra22/2
Utility holding companies3636/36 — 100%
The AES Corporation85/8
Dominion Energy64/6
Berkshire Hathaway116/11
Morgan Stanley90/9
All parents7051/70 — 73%

Reading the split. For the eight pure utility holding companies, every chain Kortex asserts is confirmed in the issuer's own filing — 36/36. The 19 not listed cases all sit under diversified or fund parents, and each one is a known Exhibit 21 omission class rather than a contradicted chain: Morgan Stanley's nine are renewable project LLCs held through infrastructure funds (a bank's Exhibit 21 lists significant regulated entities, never project SPVs); Berkshire's five are wind SPVs under Berkshire Hathaway Energy, whose Exhibit 21 is famously abbreviated; Dominion's two are solar SPVs; AES's three are two Latin-American subsidiaries plus Indianapolis Power & Light — which the exhibit lists under its trade name AES Indiana while GLEIF (checked live during this study) still records the legal name Kortex carries. No chain was contradicted by any filing.

Reproduce these studies

Corrections and challenges are welcome: kortex@orkora.com. Errors found by users are fixed in the graph and noted here.