NYISO logo

NYISO Generation Mix by Fuel

What is physically generating in NYISO, 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

1,143,328 intervals, 2015-12 to now, usable from 2018-01. Columns: gas_mw, dual_fuel_mw, other_fossil_mw, nuclear_mw, hydro_mw, wind_mw, other_renewables_mw. NYISO reports no coal (its last coal plant retired in 2020), no grid-scale solar as its own category (it sits inside other_renewables, and behind-the-meter solar is a separate feed), and no storage. Those columns are absent rather than present-and-NULL: a column exists here where the data exists. 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

  • VALUES BEFORE 2018-01-01 ARE NULL. All of 2015 and 2016, and 83% of 2017, carry timestamps with no measurement. ClickHouse sums NULL as zero, so a careless pre-2018 aggregate returns 0 MW — which is not a measurement of anything. Treat anything before 2018-01-01 as absent.
  • dual_fuel_mw is capacity that can burn either gas or oil, and the feed does not say which it was burning. Do not fold it into gas, and do not describe it as gas-fired output.

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/nyiso_generation_mix/query

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

Schema9

Column
Type
event_timeDateTime64(6, 'UTC')
gas_mwNullable(Float64)
dual_fuel_mwNullable(Float64)
other_fossil_mwNullable(Float64)
nuclear_mwNullable(Float64)
hydro_mwNullable(Float64)
wind_mwNullable(Float64)
other_renewables_mwNullable(Float64)
sourceLowCardinality(String)

Sample data

event_timegas_mwdual_fuel_mwother_fossil_mwnuclear_mwhydro_mwwind_mwother_renewables_mwsource
2026-10-12 08:15:00.00000028242940033091562537199live
2026-10-12 08:10:00.00000028162952033091550535197live
2026-10-12 08:05:00.00000028102958033091550516198live
2026-10-12 08:00:00.00000028242987033101563495198live
2026-10-12 07:55:00.00000028112998033101570479196live
2026-10-12 07:50:00.00000027962999033101564465197live
2026-10-12 07:45:00.00000027943022033121562461197live
2026-10-12 07:40:00.00000027913038033121558457195live
2026-10-12 07:35:00.00000028013045033141568437197live
2026-10-12 07:30:00.00000027883043033131556417196live
2026-10-12 07:25:00.00000027883075033131554404195live
2026-10-12 07:20:00.00000027903115033131566400196live
2026-10-12 07:15:00.00000027763150033131542398198live
2026-10-12 07:10:00.00000028083174033111565389198live
2026-10-12 07:05:00.00000028143156033131566363195live
2026-10-12 07:00:00.00000028163152033131567338196live
2026-10-12 06:55:00.00000028173137033121565334198live
2026-10-12 06:50:00.00000028283144033121571318199live
2026-10-12 06:45:00.00000028283155033151559312196live
2026-10-12 06:40:00.00000028413158033121553317195live
2026-10-12 06:35:00.00000028093165033121543322194live
2026-10-12 06:30:00.00000027733160033121552320196live
2026-10-12 06:25:00.00000027743191033121561313195live
2026-10-12 06:20:00.00000028763208033131564302196live
2026-10-12 06:15:00.00000029763229033131531292196live

Coverage

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