PJM logo

PJM Seven-Day Load Forecast

PJM's seven-day hourly demand forecast in long form: issued_at (when PJM published the forecast), event_time (the hour being forecast), area, and forecast_mw.

Native record
forecast area x target hour x issue vintage
hourly (reissued through the day) publication cadence
Evidence
Forecast data
Forward-looking values with an explicit issue time
Time basis
Interval-start records
UTC · event_time

Overview

4.14M rows across 2,033 issue vintages and 25 areas, covering forecasts issued since 2026-05-21 and targets out to seven days ahead. Because issue time and target time are separate columns, this table can answer both 'what does PJM expect for tomorrow evening' and 'what did PJM expect for that hour twelve hours before it happened' — the second question needs the issue-time filter, and getting it wrong turns a forecast evaluation into hindsight. The area column mixes three levels of the same hierarchy: the RTO total (RTO_COMBINED), three regional aggregates (MID_ATLANTIC_REGION, SOUTHERN_REGION, WESTERN_REGION), transmission zones (AEP, COMED, DOMINION, ...) and Mid-Atlantic sub-zones (PSE&G/MIDATL, PECO/MIDATL, ...). Summing across areas double-counts, in some cases three times over.

Query contract

One area, one target hour and one issued_at is one forecast. For the current expectation, take the latest issued_at. For forecast accuracy, take the latest issued_at that is EARLIER than event_time — an issued_at after the target hour is hindsight, not a forecast.

Analysis rules

  • Never average or sum across issue vintages; pick one before aggregating anything.
  • The area column mixes three levels of the same hierarchy: the RTO total (RTO_COMBINED), three regional aggregates (MID_ATLANTIC_REGION, SOUTHERN_REGION, WESTERN_REGION), transmission zones (AEP, COMED, DOMINION, ...) and Mid-Atlantic sub-zones (PSE&G/MIDATL, PECO/MIDATL, ...). Summing across areas double-counts, in some cases three times over.

Related analysis

  • forecast error for a delivered hour · join pjm_load on event_time against area='RTO_COMBINED' rows from one issue vintage

Interpretation

  • Vintages only begin 2026-05-21. This table cannot evaluate forecast accuracy before that date, and an empty result for an earlier period means the vintage was never ingested, not that PJM published nothing.
  • Forecast rows exist for hours that have not happened. Do not describe a forward row as an observation.

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

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

Schema4

Column
Type
issued_atDateTime64(6, 'UTC')
event_timeDateTime64(6, 'UTC')
areaLowCardinality(String)
forecast_mwNullable(Float64)

Sample data

issued_atevent_timeareaforecast_mw
2026-10-12 07:47:26.0000002026-10-19 03:00:00.000000AE/MIDATL950
2026-10-12 07:17:26.0000002026-10-19 03:00:00.000000AE/MIDATL950
2026-10-12 06:47:26.0000002026-10-19 03:00:00.000000AE/MIDATL950
2026-10-12 06:17:25.0000002026-10-19 03:00:00.000000AE/MIDATL950
2026-10-12 05:47:25.0000002026-10-19 03:00:00.000000AE/MIDATL950
2026-10-12 05:17:25.0000002026-10-19 03:00:00.000000AE/MIDATL950
2026-10-12 04:47:25.0000002026-10-19 03:00:00.000000AE/MIDATL950
2026-10-12 04:17:25.0000002026-10-19 03:00:00.000000AE/MIDATL951
2026-10-12 05:17:25.0000002026-10-19 03:00:00.000000AEP15042
2026-10-12 06:17:25.0000002026-10-19 03:00:00.000000AEP15051
2026-10-12 05:47:25.0000002026-10-19 03:00:00.000000AEP15051
2026-10-12 07:47:26.0000002026-10-19 03:00:00.000000AEP15055
2026-10-12 07:17:26.0000002026-10-19 03:00:00.000000AEP15041
2026-10-12 06:47:26.0000002026-10-19 03:00:00.000000AEP15041
2026-10-12 04:17:25.0000002026-10-19 03:00:00.000000AEP15034
2026-10-12 04:47:25.0000002026-10-19 03:00:00.000000AEP15042
2026-10-12 07:47:26.0000002026-10-19 03:00:00.000000AP4994
2026-10-12 06:47:26.0000002026-10-19 03:00:00.000000AP4994
2026-10-12 06:17:25.0000002026-10-19 03:00:00.000000AP4983
2026-10-12 07:17:26.0000002026-10-19 03:00:00.000000AP4994
2026-10-12 05:47:25.0000002026-10-19 03:00:00.000000AP4983
2026-10-12 04:17:25.0000002026-10-19 03:00:00.000000AP5004
2026-10-12 05:17:25.0000002026-10-19 03:00:00.000000AP4995
2026-10-12 04:47:25.0000002026-10-19 03:00:00.000000AP4995
2026-10-12 07:47:26.0000002026-10-19 03:00:00.000000ATSI6504

Coverage

94.1% complete9 gap days143 days with data
Show coverage history
Coverage: 94.1%Days with data: 143Gaps: 9
2026
gaplessmore