Balancing Authority Generation by Fuel

EIA-930 hourly net generation by energy source for every reporting balancing authority, one wide row per (ba, hour).

One row per
balancing authority x hour, wide by EIA energy source
Hourly cadence
Evidence
Observed market data
Published observations from the named source
Time basis
Interval-end records
UTC · event_time

Overview

5.2M rows, 83 BAs, 2019-01 to now. Each EIA source code is its own additive column: coal, gas, oil, nuclear, hydro, pumped storage, wind, wind with storage, solar, solar with storage, battery, other and unknown storage, geothermal, other and unknown.

Query contract
One row per (ba, event_time) is already the latest EIA submission; read it plainly.
Analysis rules
Filter ba to your scope's code with a direct WHERE; search_data returns the allowed value. One ba per query keeps a region's rows from mixing with another's.Total generation is the sum of the non-NULL fuel columns in one row. Storage columns can be negative when charging.
Interpretation
event_time is EIA-930's HOUR-ENDING stamp: the row at 18:00 UTC is the 17:00-18:00 hour. To compare with an ISO's interval-start table, match this row at t with the ISO row at t - 1 hour.Net generation inside the balancing area; it excludes imports and is not a statement of how demand was served.

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.ERCOT MCPCAISO MCPNYISO MCPPJM MCPSPP MCPMISO MCPISO-NE MCPBPA MCPAPI reference
HTTP endpoint
POST /api/v1/datasets/ba_generation_mix/query
Full history
Delivered to Snowflake, Databricks or your own storage on a schedule by Data services.
More coverage

Schema

18 columns
ColumnType
event_timeDateTime64(6, 'UTC')
baLowCardinality(String)
coal_mwNullable(Float64)
gas_mwNullable(Float64)
oil_mwNullable(Float64)
nuclear_mwNullable(Float64)
hydro_mwNullable(Float64)
pumped_storage_mwNullable(Float64)
wind_mwNullable(Float64)
wind_storage_mwNullable(Float64)
solar_mwNullable(Float64)
solar_storage_mwNullable(Float64)
battery_mwNullable(Float64)
other_storage_mwNullable(Float64)
unknown_storage_mwNullable(Float64)
geothermal_mwNullable(Float64)
other_mwNullable(Float64)
unknown_mwNullable(Float64)

Sample data

event_timebacoal_mwgas_mwoil_mwnuclear_mwhydro_mwpumped_storage_mwwind_mwwind_storage_mwsolar_mwsolar_storage_mwbattery_mwother_storage_mwunknown_storage_mwgeothermal_mwother_mwunknown_mw
2026-11-03 07:00:00.000000IID∅1360∅8∅∅∅01100∅∅442∅∅
2026-11-03 07:00:00.000000GRID0855∅∅∅∅253∅-1∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000DOPD∅∅∅∅194∅∅∅∅∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000CHPD∅∅∅∅387∅2∅∅∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000IPCO∅3040∅587∅97∅0∅7∅∅3121∅
2026-11-03 07:00:00.000000PGE0969∅∅105∅0∅∅∅-6∅∅∅0∅
2026-11-03 07:00:00.000000PACW∅683∅∅115∅30∅0∅∅∅∅∅34∅
2026-11-03 07:00:00.000000GCPD∅∅∅∅1119∅∅∅∅∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000TIDC∅201∅∅0∅∅∅∅∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000BPAT∅1063∅11464939∅95∅-33∅∅∅∅114∅
2026-11-03 07:00:00.000000LDWP∅829∅∅940251∅000∅∅∅253∅
2026-11-03 07:00:00.000000BANC∅1110∅∅341∅∅∅1∅∅∅∅∅12∅
2026-11-03 07:00:00.000000NEVP8022990∅2∅53∅-1∅0∅∅∅295∅
2026-11-03 07:00:00.000000SCL∅∅∅∅708∅∅∅∅∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000CAL512309461101214502112∅-561100∅∅11553644∅
2026-11-03 07:00:00.000000AVA∅410∅∅291∅84∅0∅∅∅∅∅46∅
2026-11-03 07:00:00.000000AVRN∅528∅∅0∅130∅0∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000TPWR∅∅∅∅242∅∅∅∅∅∅∅∅∅∅∅
2026-11-03 07:00:00.000000CAR2142602301041668-1278∅∅-6-33-76∅∅∅636∅
2026-11-03 07:00:00.000000CISO5100334611011702∅1861∅-57∅∅∅∅7133379∅
2026-11-03 06:00:00.000000AZPS-281276000∅236∅1∅1213∅-13∅28∅
2026-11-03 06:00:00.000000GCPD∅∅∅∅1033∅∅∅∅∅∅∅∅∅∅∅
2026-11-03 06:00:00.000000DEAA∅527∅∅∅∅∅∅∅∅∅∅∅∅∅∅
2026-11-03 06:00:00.000000AVRN∅527∅∅0∅112∅0∅∅∅∅∅∅∅
2026-11-03 06:00:00.000000CHPD∅∅∅∅585∅2∅∅∅∅∅∅∅∅∅

Coverage

Complete
100.0%
Gap days
0
Days with data
2,864
Show coverage history
Coverage: 100.0%Days with data: 2,864Gaps: 0
2026
2025
2024
2023
2022
2021
2020
2019
gaplessmore