PJM logo

PJM Generation Mix by Fuel

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

One row per
one row per interval, wide by fuel
Hourly cadence
Evidence
Observed market data
Published observations from the named source
Time basis
Interval-start records
UTC · event_time

Overview

93,886 intervals, 2016-01 to now. Columns: coal_mw, gas_mw, oil_mw, nuclear_mw, hydro_mw, wind_mw, solar_mw, storage_mw, multiple_fuels_mw, other_renewables_mw. 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.
Interpretation
PJM publishes all eight fuels the other markets use plus two more: multiple_fuels_mw (switchable units that can burn gas or oil, PJM's analogue of NYISO's dual_fuel_mw) and other_renewables_mw. Do not fold either into gas or into a residual — PJM reports them as their own categories deliberately.PJM publishes fuel_percentage_of_total per row, which implies a total, but does not publish the total itself. Sum the ten fuel columns for a total; do not divide a fuel's MW by its percentage, which recovers a total that disagrees with the column sum by rounding.

Access

Download
Query it in SQL, download it, or read it with an API key. Download data
MCP
Connect an MCP client and load the contract with describe_data before calling query_data.PJM MCPAPI reference
HTTP endpoint
POST /api/v1/datasets/pjm_generation_mix/query
Full history
Delivered to Snowflake, Databricks or your own storage on a schedule by Data services.
More coverage

Schema

12 columns
ColumnType
event_timeDateTime64(6, 'UTC')
coal_mwNullable(Float64)
gas_mwNullable(Float64)
oil_mwNullable(Float64)
nuclear_mwNullable(Float64)
hydro_mwNullable(Float64)
wind_mwNullable(Float64)
solar_mwNullable(Float64)
storage_mwNullable(Float64)
multiple_fuels_mwNullable(Float64)
other_renewables_mwNullable(Float64)
sourceLowCardinality(String)

Sample data

event_timecoal_mwgas_mwoil_mwnuclear_mwhydro_mwwind_mwsolar_mwstorage_mwmultiple_fuels_mwother_renewables_mwsource
2026-11-04 01:00:00.000000149303663588429220371578211702840568live
2026-11-04 00:00:00.0000001471438467812292134608775817312722612live
2026-11-03 23:00:00.00000014920390068342921048867457171492805637live
2026-11-03 22:00:00.000000145693822587629207516866191801182921646live
2026-11-03 21:00:00.00000013757353706732920436866804310902795648live
2026-11-03 20:00:00.00000012855330454542921010806831794102883637live
2026-11-03 19:00:00.0000001244731845488292203786891995802346639live
2026-11-03 18:00:00.00000012710317754142922730969651056702228633live
2026-11-03 17:00:00.00000012678312104352925331171581047402202630live
2026-11-03 16:00:00.00000012458310184712927630673661037402015625live
2026-11-03 15:00:00.0000001274132351521292983267447972302065632live
2026-11-03 14:00:00.0000001233731035428293085387545914301967637live
2026-11-03 13:00:00.00000012968310934002932718347608610301972633live
2026-11-03 12:00:00.0000001327132707458293353587749912391012063623live
2026-11-03 11:00:00.00000012534317025772933331707318191101938623live
2026-11-03 10:00:00.00000012204312305802932041271911701731623live
2026-11-03 09:00:00.00000011943303102492931927968371701615616live
2026-11-03 08:00:00.00000012222300742172931727765401701504618live
2026-11-03 07:00:00.00000012555301862142932128063311711448621live
2026-11-03 06:00:00.00000013073308162122930928067581701386665live
2026-11-03 05:00:00.00000013493307202102930934066521701418671live
2026-11-03 04:00:00.00000013882322034682929960467901701961665live
2026-11-03 03:00:00.000000142473398359929301111069395202576658live
2026-11-03 02:00:00.0000001457235777105629305138866717202701651live
2026-11-03 01:00:00.0000001441836832105529293247766987202709646live

Coverage

Complete
100.0%
Gap days
0
Days with data
3,961
Show coverage history
Coverage: 100.0%Days with data: 3,961Gaps: 0
2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
gaplessmore