ERCOT logo

ERCOT Hourly Actual Load

Actual hourly electricity demand in ERCOT, one row per hour with a system total and one column per weather zone.

Native record
one row per operating hour, wide by sub-area
hourly publication cadence
Evidence
Observed market data
Published observations from the named source
Time basis
Interval-end records
UTC · event_time

Overview

119,475 hours, 2013-01 to now. Columns: system_mw plus coast_mw, east_mw, far_west_mw, north_mw, north_central_mw, south_central_mw, southern_mw, west_mw. system_mw is ERCOT's own published total, and the eight zones sum to it to within 0.03 MW — so a zone share is simply zone_mw / system_mw. Wide rather than long, so "load right now" and "the 8 weather zone shares of it" are one row, not 9. Every market's load table in this catalog shares the system_mw column and the same hourly grain, so a cross-market demand comparison needs no reshaping.

Query contract

One row is the canonical hourly value; the refresh already collapsed the source's restatements. Read the hour you want and use its columns together.

Analysis rules

  • Take every value for one hour from that hour's single row. Never combine a system total from one hour with area values from another.
  • An area's share of demand is <area>_mw / system_mw within the same row. Do not sum the 8 area columns and system_mw together — that double-counts the whole market.

Interpretation

  • event_time is ERCOT's HOUR-ENDING stamp, passed through from ercot.system_load: the row at 18:00 is the 17:00-18:00 hour. Label it hour-ending, as ERCOT documents do.
  • Hourly, and ERCOT publishes it about 54 minutes behind the hour. For ERCOT demand in the last few minutes use series='realized' from ercot.supply_demand. ercot.system_wide_demand is settled 15-minute demand posted hourly, not an instantaneous live substitute.

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

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

Schema10

Column
Type
event_timeDateTime64(6, 'UTC')
system_mwNullable(Float64)
coast_mwNullable(Float64)
east_mwNullable(Float64)
far_west_mwNullable(Float64)
north_mwNullable(Float64)
north_central_mwNullable(Float64)
south_central_mwNullable(Float64)
southern_mwNullable(Float64)
west_mwNullable(Float64)

Sample data

event_timesystem_mwcoast_mweast_mwfar_west_mwnorth_mwnorth_central_mwsouth_central_mwsouthern_mwwest_mw
2026-10-12 03:00:00.00000063880.8315958.292104.447863.981745.2917780.6110694.565375.942357.71
2026-10-12 02:00:00.00000066372.8316562.642213.257945.41836.8218605.9311218.615552.542437.65
2026-10-12 01:00:00.00000068614.8817119.812293.248006.351902.7719386.1911688.745706.522511.26
2026-10-12 00:00:00.00000070639.3317687.332330.578036.71963.9520149.7412162.335744.232564.48
2026-10-11 23:00:00.00000072843.6318547.22155.968080.612009.6820949.6412574.25898.472627.85
2026-10-11 22:00:00.00000073217.4718971.552018.738080.712005.721001.6312558.35981.422599.43
2026-10-11 21:00:00.00000072038.3718915.892002.558021.711960.120460.5312198.515915.782563.3
2026-10-11 20:00:00.00000070066.5618431.361889.757939.471895.0819804.0411763.285824.812518.77
2026-10-11 19:00:00.00000067459.0117712.781773.417870.71823.418935.8411232.665677.312432.9
2026-10-11 18:00:00.00000064130.2316765.831628.747722.341743.317843.9610635.925448.952341.17
2026-10-11 17:00:00.00000060627.7915750.661493.527603.9162216668.3210015.975203.512269.9
2026-10-11 16:00:00.00000057181.7614681.551360.617545.251514.1215554.559432.374896.32197.02
2026-10-11 15:00:00.00000053432.6713513.091289.237462.211432.6214373.728756.324463.912141.57
2026-10-11 14:00:00.00000050168.5112420.341393.677430.281376.7713200.338065.194215.262066.67
2026-10-11 13:00:00.00000048620.2811954.371473.167469.811338.9412516.487705.624139.242022.66
2026-10-11 12:00:00.00000048297.411926.771465.427439.181306.1912289.567626.494261.511982.29
2026-10-11 11:00:00.00000048029.8511945.971450.0174421303.7312165.347559.84200.681962.32
2026-10-11 10:00:00.00000048323.7812037.911453.417499.821308.1912191.927632.94241.841957.78
2026-10-11 09:00:00.0000004895812220.821496.377544.521314.5112399.587775.854252.361953.98
2026-10-11 08:00:00.00000050141.0212526.971540.297586.471347.7212768.538031.184356.861983
2026-10-11 07:00:00.00000051722.9812933.251570.787659.641391.213312.288354.024486.012015.82
2026-10-11 06:00:00.00000053808.0213443.661657.57716.861445.4914079.878762.864631.622070.16
2026-10-11 05:00:00.00000056335.5514077.581735.867759.251503.2814947.559307.374862.662142.01
2026-10-11 04:00:00.00000058895.5814768.11843.627801.441571.6715882.349791.765034.782201.86
2026-10-11 03:00:00.00000061138.9915467.421907.17843.871668.9716763.5910241.045197.272049.72

Coverage

100.0% complete0 gap days5,033 days with data
Show coverage history
Coverage: 100.0%Days with data: 5,033Gaps: 0
2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
gaplessmore