Skip to content

ERCOT Market Overview

The Electric Reliability Council of Texas operates the electricity grid for approximately 90% of Texas's load. ERCOT is unique among US ISOs in that it is electrically isolated from the Eastern and Western Interconnections, which means it is not subject to FERC jurisdiction over wholesale markets (though it is regulated by the Public Utility Commission of Texas).

Market Structure

ERCOT operates a two-settlement system:

  • Day-Ahead Market (DAM): Hourly financial commitments cleared the day before the operating day.
  • Real-Time Market (RTM): 15-minute settlement intervals reflecting actual dispatch conditions.

15-Minute RT Intervals

Unlike MISO and SPP (which use 5-minute RT intervals), ERCOT settles real-time at 15-minute granularity. This affects how RT prices are aggregated to hourly data in ProgridPy.

Settlement Point Types

ERCOT prices are published at "Settlement Points" rather than nodes. The SettlementPointType enum in ProgridPy captures the full taxonomy:

Hubs

Type Description
HU Hub -- a weighted average of a group of resource node prices
SH South Hub
AH Houston Hub (weighted average)

Load Zones

Type Description
LZ Load Zone
LZEW Load Zone Energy Weighted
LZ_DC DC Tie Load Zone
LZ_DCEW DC Tie Load Zone Energy Weighted

Resource Nodes

Type Description
RN Resource Node
LCCRN Load Carrying Capacity Resource Node
PCCRN Peak Capacity Carrying Resource Node
PUN Private Use Network

DST and Timestamp Handling

ERCOT source files are local-time-based and include a DSTFlag column to disambiguate repeated hours during daylight saving transitions.

DSTFlag Is Required for Correct Processing

During the fall-back transition, hour ending 2 occurs twice. The DSTFlag distinguishes the first occurrence (DST in effect) from the second (standard time). ProgridPy resolves the local delivery date/hour with the DSTFlag, converts to interval_start_utc, and then derives interval_start_local from UTC. This ensures repeated hours have distinct UTC keys.

Processing Flow

  1. Parse the local delivery date and hour-ending from the source file.
  2. Use the DSTFlag to resolve DST ambiguity.
  3. Convert the resolved local instant to interval_start_utc.
  4. Derive interval_start_local from interval_start_utc (the final local timestamp preserves the intended wall-clock hour).

Available Raw Data Types

Data Type Description Granularity
SPP_DAY_AHEAD_HOURLY DA Settlement Point Prices Hourly, per settlement point
SPP_REAL_TIME_15_MIN RT Settlement Point Prices 15-minute, per settlement point
AS_PRICES Ancillary Service Prices Hourly, system-wide
HOURLY_WIND_POWER_PRODUCTION Wind generation Hourly, per resource
HOURLY_SOLAR_POWER_PRODUCTION Solar generation Hourly, per resource
LF_BY_MODEL_WEATHER_ZONE Load forecast by weather zone Hourly
ACTUAL_SYSTEM_LOAD_BY_WEATHER_ZONE Actual load by weather zone Hourly

Processed Data Granularity

Processed Type Description Typical Rows/Day
NODAL Per-settlement-point DA and RT prices nodes x 24
SYSTEM System-wide aggregate data 24
WEATHER_ZONE Data partitioned by weather zone zones x 24
LOAD_ZONE Data partitioned by load zone zones x 24

Data Access

ERCOT publishes data through a public API managed via the ercot_api module within ProgridPy. The ERCOT API uses endpoint-based access with pagination support, unlike the file-browser portals used by SPP and MISO.

from progridpy.iso import ERCOT, ERCOTRawDataType

ercot = ERCOT()
files = ercot.download_raw_data(
    start_date="20250101",
    end_date="20250107",
    data_types=ERCOTRawDataType.SPP_DAY_AHEAD_HOURLY,
)