PJM logo

Day-Ahead Hourly LMP

Cleared day-ahead locational marginal prices for each PJM pricing node by delivery hour, with total LMP and its system-energy, congestion, and marginal-loss components in dollars per MWh.

Native record
pricing node x day-ahead delivery hour
hourly (day-ahead) publication cadence
Evidence
Cleared day-ahead market
A market outcome, not a physical observation
In Ask the Grid
LMP nodes on the PJM map
Values for the live grid surface

Overview

The table supports the posted next-day hourly curve, day-ahead-to-real-time basis, and node-level component attribution. A congestion component does not by itself identify which facility is expected to bind or establish a node-to-constraint relationship. Source: PJM Market Data.

Query contract

Use FINAL or select argMax(price component, ingested_at) per pnode_id and delivery hour before filtering/aggregating by pnode_name.

Analysis rules

  • Return one canonical row per pricing node and delivery hour; do not count ingestion revisions.

Related analysis

  • day-ahead versus real-time nodal price · same pnode_id and delivery hour

Interpretation

  • PJM posts the next day's day-ahead prices in the early afternoon Eastern time, by about 1:30 PM ET the day before delivery; they typically become available here later that afternoon. Earlier in the day, the next day's prices are not out yet.
  • To find a pnode by name, or to label pnode_ids, read atg.pjm_locations (location_id = toString(pnode_id), name, kind) rather than deriving pnode_name from this price table: `SELECT location_id, name, kind FROM atg.pjm_locations WHERE positionCaseInsensitive(name, 'CARDINAL') > 0`. Then filter the prices on pnode_id.

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

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

Schema12

Column
Type
event_timeDateTime64(6, 'UTC')
pnode_idLowCardinality(String)
pnode_nameNullable(String)
voltageNullable(String)
equipmentNullable(String)
pnode_typeNullable(String)
zoneNullable(String)
system_energy_priceNullable(Float64)
total_lmpNullable(Float64)
congestion_priceNullable(Float64)
marginal_loss_priceNullable(Float64)
ingested_atDateTime64(6, 'UTC')

Sample data

event_timepnode_idpnode_namevoltageequipmentpnode_typezonesystem_energy_pricetotal_lmpcongestion_pricemarginal_loss_priceingested_at
2026-10-13 03:00:00.00000098370535BEAVER13.8 KVWL60GENATSI33.4335.481.970.082026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370533BEAVER13.8 KVWL50GENATSI33.4335.531.980.122026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370531BEAVER13.8 KVWL40GENATSI33.4335.531.980.122026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370529BEAVER13.8 KVWL30GENATSI33.4335.531.980.122026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370527BEAVER13.8 KVWL20GENATSI33.4335.531.980.122026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370525BEAVER13.2 KVWL-AGENATSI33.4335.481.970.082026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370523BEAVER13.2 KVWL-BGENATSI33.4335.481.970.082026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370505ROBERTOE138 KVGENDUMMYGENATSI33.4337.182.71.052026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370497NILES14 KVCTGENATSI33.4334.350.94-0.022026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370491NEWCASOE14 KVG4GENATSI33.4333.350.41-0.492026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370489NEWCASOE14 KVG3GENATSI33.4333.110.32-0.642026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370487NEWCASOE16 KVG5GENATSI33.4333.380.35-0.42026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370485NEWCASOE23 KVEMDS-BGENATSI33.4333.380.41-0.462026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370483NEWCASOE23 KVEMDS-AGENATSI33.4333.380.41-0.462026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370477DAVISBES25 KVDB10GENATSI33.4336.523.14-0.052026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370469MTNROAD35 KVHENRICLFGENDOM33.4343.649.260.952026-10-12 08:35:20.303875
2026-10-13 03:00:00.0000009837046709YANKEE12.5 KVYANKESPGENDAY33.4337.643.610.62026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370465VIRGINIA25 KVVACTYG1GENAEP33.4336.543.25-0.142026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370463MEADOWL434.5 KVMEDLK4WFGENAEP33.4330.18-1.84-1.412026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370461MEADOWLK34.5 KVMEDLK3WFGENAEP33.4330.18-1.84-1.412026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370459MEADOWLK34.5 KVMEDLK2WFGENAEP33.4330.18-1.84-1.412026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370457CROOKSVI138 KVSUBURBLFGENAEP33.4337.012.970.612026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370455THIRTYST34.5 KVCHSTNTWFGENPENELEC33.4328.3-4.92-0.212026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370453EAGLEVAL34.5 KVSANRIGWFGENPENELEC33.4327.99-5.15-0.292026-10-12 08:35:20.303875
2026-10-13 03:00:00.00000098370449EFLEMING35 KVFRNCHSPGENJCPL33.4324.39-8.57-0.472026-10-12 08:35:20.303875

Coverage

Showing the last 4,265 days of a 9,631-day history (Jun 1, 2000 → Oct 13, 2026). This dataset holds 2.26B rows — too many to count day by day on every visit — so the calendar and the figures below cover the window from Feb 9, 2015.

100.0% complete0 gap days4,265 days with data
Show coverage history
Coverage: 100.0%Days with data: 4,265Gaps: 0
2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
gaplessmore