ERCOT logo

Solar Generation by Region

Solar generation across the ERCOT footprint, broken out by geographic region and rolled up system-wide, at hourly resolution.

Native record
target hour x forecast vintage x geography
hourly (forecast vintages) publication cadence
Evidence
Mixed evidence
Multiple evidence types kept distinct in the contract
Time basis
Point-in-time records
UTC · event_time

Overview

Alongside metered actuals, it carries the successive forecast vintages ERCOT publishes for each region, including the capacity-based high sustained limit (COP HSL) and the two physical solar production forecasts (STPPF and PVGRPP), so you can see what was expected versus what was delivered. This is the basis for tracking how solar output ramps through the day, how forecasts evolve as an operating hour approaches, and where regional solar buildout is concentrating across Texas. It comes from ERCOT report NP4-745-CD, Solar Power Production, Hourly Averaged Actual and Forecasted Values by Geographical Region.

Query contract

Choose one geography and one source_time vintage per event_time before comparing forecast and actual solar output. Use geography='system_wide' for an ERCOT-wide value.

Analysis rules

  • Do not sum regional rows together with geography='system_wide', and do not sum forecast vintages.

Interpretation

  • actual_mw, stppf_mw, and other solar fields measure generation output, not gross electricity demand. A solar forecast miss may change net load and dispatch needs, but it does not establish the cause or magnitude of an ERCOT gross-load forecast error.

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

Schema11

Column
Type
event_timeDateTime64(6, 'UTC')
source_timeDateTime64(6, 'UTC')
geographyLowCardinality(String)
actual_mwNullable(Float64)
cop_hsl_mwNullable(Float64)
stppf_mwNullable(Float64)
pvgrpp_mwNullable(Float64)
dst_flagNullable(Bool)
emil_idNullable(String)
doc_idNullable(Int64)
ingested_atDateTime64(6, 'UTC')

Sample data

event_timesource_timegeographyactual_mwcop_hsl_mwstppf_mwpvgrpp_mwdst_flagemil_iddoc_idingested_at
2026-09-25 05:00:00.0000002026-09-25 01:55:11.000000system_wide∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 01:55:11.000000south_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 01:55:11.000000north_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 01:55:11.000000far_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 01:55:11.000000far_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 01:55:11.000000center_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 01:55:11.000000center_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 00:55:12.000000system_wide∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 00:55:12.000000south_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 00:55:12.000000north_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 00:55:12.000000far_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 00:55:12.000000far_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 00:55:12.000000center_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-25 00:55:12.000000center_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 23:55:11.000000system_wide∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 23:55:11.000000south_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 23:55:11.000000north_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 23:55:11.000000far_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 23:55:11.000000far_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 23:55:11.000000center_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 23:55:11.000000center_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 22:55:11.000000system_wide∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 22:55:11.000000south_east∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 22:55:11.000000north_west∅000false∅∅2026-09-25 02:34:11.103950
2026-09-25 05:00:00.0000002026-09-24 22:55:11.000000far_west∅000false∅∅2026-09-25 02:34:11.103950

Coverage

100.0% complete0 gap days1,551 days with data
Show coverage history
Coverage: 100.0%Days with data: 1,551Gaps: 0
2026
2025
2024
2023
2022
gaplessmore