Balancing Authority Hourly Demand

Hourly actual demand for every balancing authority that reports to EIA-930, keyed by EIA's BA code in ba.

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

Overview

4.5M rows, 71 BAs, 2019-01 to now. The latest EIA submission for each hour. Every region reads the same columns, so comparing two areas is a filter on ba rather than a second table.

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.demand_mw is an hourly average in MW; a daily energy total is sum(demand_mw) in MWh.
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.EIA-930 is submitted by each balancing authority and trails real time by about a day; for the last hours use the region's own operator feed where one exists.
Related analysis
day-ahead forecast error · join on (ba, event_time)

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_load/query
Full history
Delivered to Snowflake, Databricks or your own storage on a schedule by Data services.
More coverage

Schema

4 columns
ColumnType
event_timeDateTime64(6, 'UTC')
baLowCardinality(String)
demand_mwNullable(Float64)
source_timeNullable(DateTime64(6, 'UTC'))

Sample data

event_timebademand_mwsource_time
2026-11-03 11:00:00.000000CHPD2182026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000MIDA817622026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000FMPP16142026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000FLA226142026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000AVA12362026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000ERCO485422026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000JEA12192026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000FPL126152026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000HST582026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000TEPC11722026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000PSEI24262026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000DOPD2692026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000PNM15102026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000PSCO36322026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000PGE22902026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000IID2492026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000LGEE32642026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000CPLE53072026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000NYIS136072026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000DUK99602026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000NE108742026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000TAL2442026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000SOCO205772026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000SPA162026-11-03 12:07:05.405339
2026-11-03 11:00:00.000000US483993012026-11-03 12:07:05.405339

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