Load Data
ERCOT Load Products
ERCOT publishes several load-related data products covering system-wide and zonal loads.
Actual System Load
NP6-345-CD: Actual System Load by Weather Zone
5-minute actual load data by weather zone.
from lib.iso.ercot import ERCOTClient, ERCOTConfig
from datetime import date
config = ERCOTConfig.from_ini_file()
client = ERCOTClient(config)
# Get load data for January 2026
load_data = client.get_actual_system_load_by_weather_zone(
operating_day_from=date(2026, 1, 1),
operating_day_to=date(2026, 1, 31),
dst_flag=False
)
# Save to CSV
client.save_report_to_csv(load_data, "system_load_jan2026.csv")
client.cleanup()
Weather Zones:
COAST - Coastal region
EAST - East Texas
FWEST - Far West Texas
NORTH - North Central Texas
NCENT - North Central
SOUTH - South Texas
SCENT - South Central
WEST - West Texas
NP6-346-CD: Actual System Load by Forecast Zone
Load data organized by forecast zones.
load_data = client.get_actual_system_load_by_forecast_zone(
operating_day_from=date(2026, 1, 1),
operating_day_to=date(2026, 1, 31)
)
Native Load (Historical)
Historical hourly load data by weather zone from ERCOT’s public archive.
# Get native load data
native_load = client.get_native_load(
operating_day_from=date(2024, 10, 1),
operating_day_to=date(2024, 10, 31)
)
Data Columns:
operatingDay- DatehourEnding- Hour (01:00 to 24:00)coast,east,farWest,north,northC,southern,southC,west- Zone loads (MW)total- System-wide total (MW)
Note
Native load data is scraped from ERCOT’s public website archives, not the API. Data is cached locally after first download.
Load Resource Data
NP3-965-ER: Load Resource Data in SCED
60-day rolling window of load resource data in SCED.
from datetime import datetime
load_res_data = client.get_load_resource_data_in_sced(
start=datetime(2026, 1, 1, 0, 0, 0),
end=datetime(2026, 1, 31, 23, 59, 59)
)
NP3-966-ER: DAM Load Resource Data
60-day Day-Ahead Market load resource data.
dam_load_res = client.get_dam_load_resource_data(
delivery_date_from=date(2026, 1, 1),
delivery_date_to=date(2026, 1, 31)
)
Aggregated Load Data
NP3-910-ER: 2-Day Aggregated Load
DSR Loads:
dsr_loads = client.get_dsr_loads_2day_aggregated(
start=datetime(2026, 1, 1, 0, 0, 0),
end=datetime(2026, 1, 2, 23, 59, 59)
)
Load Summary (All Regions):
load_summary = client.get_load_summary_2day_aggregated(
start=datetime(2026, 1, 1, 0, 0, 0),
end=datetime(2026, 1, 2, 23, 59, 59)
)
Load Summary by Region:
# Available regions: HOUSTON, NORTH, SOUTH, WEST
houston_load = client.get_load_summary_2day_aggregated(
start=datetime(2026, 1, 1, 0, 0, 0),
end=datetime(2026, 1, 2, 23, 59, 59),
region="HOUSTON"
)
Common Analysis Tasks
Calculate Peak Load
import pandas as pd
# Get load data
load_data = client.get_actual_system_load_by_weather_zone(
operating_day_from=date(2026, 1, 1),
operating_day_to=date(2026, 1, 31)
)
# Find peak
df = pd.DataFrame(load_data['data'])
peak_load = df['total'].max()
peak_row = df[df['total'] == peak_load].iloc[0]
print(f"Peak Load: {peak_load:.0f} MW")
print(f"Date: {peak_row['operatingDay']}")
print(f"Hour: {peak_row['hourEnding']}")
Daily Load Profile
# Calculate average hourly load
df['hour'] = pd.to_datetime(df['hourEnding'], format='%H:%M').dt.hour
hourly_avg = df.groupby('hour')['total'].mean()
# Plot
import matplotlib.pyplot as plt
hourly_avg.plot(kind='line', title='Average Daily Load Profile')
plt.xlabel('Hour of Day')
plt.ylabel('Load (MW)')
plt.show()
Compare Weather Zones
# Sum loads by zone
zones = ['coast', 'east', 'farWest', 'north', 'northC', 'southern', 'southC', 'west']
zone_totals = df[zones].sum()
# Calculate percentages
zone_pct = 100 * zone_totals / zone_totals.sum()
print("Load Distribution by Weather Zone:")
for zone, pct in zone_pct.items():
print(f"{zone:10s}: {pct:5.1f}%")
Month-over-Month Growth
# Get two months of data
jan_data = client.get_actual_system_load_by_weather_zone(
operating_day_from=date(2026, 1, 1),
operating_day_to=date(2026, 1, 31)
)
dec_data = client.get_actual_system_load_by_weather_zone(
operating_day_from=date(2025, 12, 1),
operating_day_to=date(2025, 12, 31)
)
# Calculate averages
jan_avg = pd.DataFrame(jan_data['data'])['total'].mean()
dec_avg = pd.DataFrame(dec_data['data'])['total'].mean()
growth = 100 * (jan_avg - dec_avg) / dec_avg
print(f"Month-over-month load growth: {growth:+.1f}%")
See Also
ERCOT Data Guide - ERCOT overview and configuration
Demand Response Data - Demand response data
API Reference - Complete API reference