CAISO logo

CAISO Hourly Actual Load

Actual hourly electricity demand in CAISO, one row per hour with a system total and one column per TAC area.

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-start records
UTC · event_time

Overview

75,689 hours, 2018-01 to now. Columns: system_mw plus pge_mw, sce_mw, sdge_mw, vea_mw, mwd_mw. system_mw is CAISO's own CA ISO-TAC total. The five TAC areas are the CAISO balancing area's own partition. Wide rather than long, so "load right now" and "the 5 TAC area shares of it" are one row, not 6. 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 5 area columns and system_mw together — that double-counts the whole market.

Related analysis

  • forecast error for a delivered hour · join on event_time, one forecast vintage at a time

Interpretation

  • This is CAISO load only. The raw caiso.load_actual feed also carries 33 neighbouring balancing authorities (BPAT, LADWP, NEVP, PACW and so on); those are deliberately not in this table, and a question about them must go to caiso.load_actual.
  • Hourly values are interval averages, not instantaneous readings. An hourly average and a five-minute snapshot at the same timestamp are different quantities and will differ; that is not an error in either.

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

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

Schema7

Column
Type
event_timeDateTime64(6, 'UTC')
system_mwNullable(Float64)
pge_mwNullable(Float64)
sce_mwNullable(Float64)
sdge_mwNullable(Float64)
vea_mwNullable(Float64)
mwd_mwNullable(Float64)

Sample data

event_timesystem_mwpge_mwsce_mwsdge_mwvea_mwmwd_mw
2026-10-12 06:00:00.00000022889978910620224954177
2026-10-12 05:00:00.000000240621039611078235754177
2026-10-12 04:00:00.000000251891099411466249854177
2026-10-12 03:00:00.000000255641132611398260756177
2026-10-12 02:00:00.000000262571167511677266958178
2026-10-12 01:00:00.000000260101159211543264057178
2026-10-12 00:00:00.000000249191072711337262454177
2026-10-11 23:00:00.00000025672991212634289653177
2026-10-11 22:00:00.00000026147893813954302553177
2026-10-11 21:00:00.00000026843848315081306253164
2026-10-11 20:00:00.00000027084832715266327353165
2026-10-11 19:00:00.00000026607806214924340453164
2026-10-11 18:00:00.00000025730766914631321650164
2026-10-11 17:00:00.00000024947826913498296452164
2026-10-11 16:00:00.00000024384901912645250350167
2026-10-11 15:00:00.00000022906926411102231746177
2026-10-11 14:00:00.00000022167952710202221546177
2026-10-11 13:00:00.00000021782935410031217346178
2026-10-11 12:00:00.0000002124090949786213646178
2026-10-11 11:00:00.0000002127690849795217345179
2026-10-11 10:00:00.0000002140191009867221145178
2026-10-11 09:00:00.00000022053939110162227447179
2026-10-11 08:00:00.00000023311973710903244249180
2026-10-11 07:00:00.000000242151014311276256649181
2026-10-11 06:00:00.000000250651037711940251158179

Coverage

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