Balancing Authority Hourly Demand

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

Native record
balancing authority x hour
hourly publication cadence
Evidence
Observed market data
Published observations from the named source
Time basis
Interval-start 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.

Related analysis

  • day-ahead forecast error · join on (ba, event_time)

Interpretation

  • 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.
  • This table is a materialized MergeTree whose refresh has already collapsed source revisions. Do not add FINAL and do not re-apply argMax over ingested_at.

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

Schema4

Column
Type
event_timeDateTime64(6, 'UTC')
baLowCardinality(String)
demand_mwNullable(Float64)
source_timeNullable(DateTime64(6, 'UTC'))

Sample data

event_timebademand_mwsource_time
2026-09-19 03:00:00.000000GVL2852026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000AVA13752026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000CENT433442026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000MISO859542026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000CPLE82012026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000CPLW5782026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000LGEE51392026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000DUK142082026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000BPAT68682026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000BANC24352026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000EPE15772026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000FPC77022026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000SRP54512026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000SCL9392026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000SE335982026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000TEC28812026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000SWPP433442026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000SEC2912026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000NWMT02026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000AECI33902026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000BHBA8572026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000PACW24002026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000PACE48922026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000ISNE131292026-09-19 04:07:01.883806
2026-09-19 03:00:00.000000GCPD7252026-09-19 04:07:01.883806

Coverage

100.0% complete0 gap days2,819 days with data
Show coverage history
Coverage: 100.0%Days with data: 2,819Gaps: 0
2026
2025
2024
2023
2022
2021
2020
2019
gaplessmore