SPP logo

SPP Generation Mix by Fuel

What is physically generating in SPP, in megawatts by fuel, one row per interval.

Native record
one row per interval, wide by fuel
5-minute publication cadence
Evidence
Observed market data
Published observations from the named source
Time basis
Point-in-time records
UTC · event_time

Overview

971,902 intervals, 2017-01 to now. Columns: coal_mw, gas_mw, diesel_mw, nuclear_mw, hydro_mw, wind_mw, solar_mw, waste_mw, other_mw. This legacy canonical series has no storage_mw or BAA axis. SPP publishes signed Energy Storage in its separate East/West portal mix; use spp_public_generation_mix_by_baa for that qualified source cohort. Wide rather than long: a whole interval's mix is one row, so shares are computed across columns in that row and the timestamp does not repeat once per fuel. "Which fuel is largest" is greatest() across the columns, or simply reading the row.

Query contract

Select one exact event_time and read every fuel column from that row. A mix assembled from more than one timestamp is not a mix that ever existed.

Analysis rules

  • Compute each fuel's share against the sum of the fuel columns in that same row, not against demand and not against a total from another interval.
  • For a change over a period, resolve complete buckets and compare their canonical observations; do not query two wall-clock instants separately.

Related analysis

  • published East/West generation mix and signed energy-storage output · Preserve the native BAA and source cohort; do not add the legacy canonical mix to the portal mix.

Interpretation

  • SPP separates diesel and waste from `other`, so this market's fuel columns are not a subset of any other market's. A cross-market fuel comparison must map to a common set explicitly and say which columns it folded together.
  • This is metered generation inside the market's own footprint. It excludes imports, and in most markets it excludes behind-the-meter solar, so it is not a complete account of how demand was served.

Access

Query from your own tools

Use the guarded HTTP endpoint directly, or connect an MCP client and load the dataset contract with describe_data before calling query_data.

HTTP endpoint
POST /api/v1/datasets/spp_generation_mix/query

Need the full history of this dataset in Snowflake, Databricks or your own storage? Data services delivers it on a schedule.

Schema11

Column
Type
event_timeDateTime64(6, 'UTC')
coal_mwNullable(Float64)
gas_mwNullable(Float64)
diesel_mwNullable(Float64)
nuclear_mwNullable(Float64)
hydro_mwNullable(Float64)
wind_mwNullable(Float64)
solar_mwNullable(Float64)
waste_mwNullable(Float64)
other_mwNullable(Float64)
sourceLowCardinality(String)

Sample data

event_timecoal_mwgas_mwdiesel_mwnuclear_mwhydro_mwwind_mwsolar_mwwaste_mwother_mwsource
2026-10-12 07:25:00.0000005196.23862.201211.829720591.3-0.17.618.9live
2026-10-12 07:20:00.0000005240.2000000000013891.399999999999601211.8298.620554.307.69999999999999919.1live
2026-10-12 07:15:00.0000005192.63881.700000000000301213.430120532.3-0.17.519live
2026-10-12 07:10:00.0000005235.53917.700000000000301213.4300.320579.207.600000000000000518.9live
2026-10-12 07:05:00.0000005269.53904.901211.8301.320509.107.619.1live
2026-10-12 07:00:00.00000053293963.701211.8299.320418-0.17.819.1live
2026-10-12 06:55:00.0000005323.93949.301213.4298.120512.1-0.17.518.9live
2026-10-12 06:50:00.0000005348.53944.399999999999601211.8296.820545.707.719.2live
2026-10-12 06:45:00.0000005364.43937.801213.4296.320547.9-0.17.600000000000000519live
2026-10-12 06:40:00.0000005480.2000000000014001.799999999999701213.4296.820438.1-0.17.600000000000000519.2live
2026-10-12 06:35:00.0000005594.74029.701213.4299.320512.507.519live
2026-10-12 06:30:00.0000005658.64014.401211.830020591.907.818.9live
2026-10-12 06:25:00.0000005643.74117.29999999999901215298.7000000000000520634.407.719.1live
2026-10-12 06:20:00.00000056304156.601213.4299.320673.3-0.17.519live
2026-10-12 06:15:00.0000005494.2434401211.8301.120724.307.619live
2026-10-12 06:10:00.0000005494.84684.801211.83002059207.419.1live
2026-10-12 06:05:00.0000005560.64707.801211.830020490.6-0.17.819.1live
2026-10-12 06:00:00.0000005644.8468001211.8300.520576.6-0.17.419.1live
2026-10-12 05:55:00.0000005710.94769.701213.4301.320551.8-0.17.519live
2026-10-12 05:50:00.0000005704.14802.301213.4300.620627.4-0.17.600000000000000518.9live
2026-10-12 05:45:00.00000057804797.101211.830220587.5-0.17.719.1live
2026-10-12 05:40:00.0000005763.14800.601213.4300.620636.807.628live
2026-10-12 05:35:00.0000005643.44938.501211.830120833.707.626.9live
2026-10-12 05:30:00.0000005621.44950.601211.8298.9000000000000320851.1-0.17.428.8live
2026-10-12 05:25:00.0000005461.34906.29999999999901211.8305.620954.307.419.1live

Coverage

100.0% complete0 gap days5,764 days with data
Show coverage history
Coverage: 100.0%Days with data: 5,764Gaps: 0
2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
gaplessmore