The same columns in every market
Thirty-eight new datasets give prices, load, generation mix, ancillary prices and binding constraints identical column names in ERCOT, CAISO, NYISO, PJM and SPP — so comparing five markets is one question instead of five.
Until now, asking the same question of two markets meant asking it twice in two vocabularies. ERCOT's real-time price lived in a column called `lmp` on a table keyed by settlement point; NYISO's lived in `lmp` on a table keyed by ptid, with the congestion component signed the other way; SPP's was `mec` plus `mcc` plus `mlc`. Every cross-market answer had to be translated, and the translation is where things went wrong.
These thirty-eight datasets are the same five families in five markets, with the same column names and the same units in each: real-time and day-ahead prices decomposed into energy, congestion and loss; hourly load broken out by the market's own zones; generation by fuel; day-ahead ancillary prices by product; and the binding transmission constraints that explain the congestion. A price location dimension in every market resolves names and types, so "which hubs exist here" is one lookup rather than a naming convention you have to know.
They are also faster and cleaner than the raw feeds they sit on. Revisions are already collapsed, so a question cannot accidentally count a restated interval twice — a real source of wrong answers, since some of these feeds carry nearly twice as many rows as they have real observations. A thirty-day price history at one hub now returns in about a fifth of a second against a table holding 15.7 billion rows.
Coverage is deep where the data is: ERCOT generation mix reaches back to 2007, ERCOT and NYISO prices to 2014 and 2015, CAISO to 2016. Where it is not deep, the dataset says so rather than answering thinly — several tables that exist are deliberately not published yet, and the catalog page for each dataset states its real span and its known caveats.
