ERCOT · Pricing
DAM shadow prices
Every binding transmission constraint in the day-ahead market with its limit, cleared flow and shadow price — why nodal prices diverge from the lambda. Collected from ERCOT MIS (NP4-191).
ercot-dam-shadow-pricesdaily, ~12:35 CT · 1h rows263 entitiesWhat is in it
- Updates
- daily, ~12:35 CT · 1h rows
- Entities
- 263 entities — 105T105_1, 1080__A, 100027_D_1…
- Source
- ERCOT MIS · NP4-191-CD
- Source timezone
- US Central — every timestamp Dryos serves is UTC
- Coverage
- 28 August 2026 to now
- Rows held
- 24,768
- Primary key
- iso, interval_start_utc, constraint_id, contingency_name
What it measures
Every value, its unit, and what the source means by it.
- Shadow price$/MW
Marginal value of one more MW of headroom on the constraint.
shadow_price - Constraint limitMW
The binding limit, MW.
constraint_limit_mw
Columns
Exactly what a request answers with, read from the API rather than written here.
| Column | Type | Description |
|---|---|---|
| interval_start_utcrequired | timestamp | Start of the interval, UTC. Always UTC — ERCOT publishes wall-clock Central with a repeated-hour flag, which is resolved on ingest.e.g. 2026-08-29T14:15:00Z |
| isorequired | string | Publishing ISO.e.g. ERCOT |
| constraint_idrequired | integer | ERCOT's constraint id.e.g. 6 |
| constraint_namerequired | string | Constraint name, usually the monitored element.e.g. SANA_FMR1 |
| contingency_namerequired | string | Contingency under which the constraint binds.e.g. SCOLBAL8 |
| constraint_limit_mwrequired | number | Constraint limit, MW.e.g. 50 |
| constraint_value_mwrequired | number | Cleared flow, MW.e.g. 50 |
| violation_amount_mwrequired | number | Amount by which the limit was violated, MW. Almost always zero.e.g. 0 |
| shadow_pricerequired | number | Shadow price of the constraint, $/MW — the marginal value of one more MW of headroom.e.g. 134.56 |
| from_stationrequired | string | From station.e.g. SCRCV |
| to_stationrequired | string | To station.e.g. KNAPP |
| from_station_kvrequired | number | From-station voltage, kV.e.g. 138.0 |
| to_station_kvrequired | number | To-station voltage, kV.e.g. 138.0 |
| source_published_at_utcrequired | timestamp | When ERCOT posted the document this row came from, UTC. For reports republished on a rolling window this is the vintage: the same interval appears once per publication, and the newest is the current view.e.g. 2026-08-29T14:17:01Z |
| collected_at_utcrequired | timestamp | When Dryos collected this row, UTC. Stamped by the platform, not the collector.e.g. 2026-08-29T14:18:02Z |
Read it
Public, read-only, no key and no sign-up. Relative times stay relative, so a URL keeps working.
The newest rows
curl "https://api.dryos.ai/v1/datasets/ercot-dam-shadow-prices/query?node=105T105_1&limit=12"The catalogue entry — every column, its type and the source
curl "https://api.dryos.ai/v1/datasets/ercot-dam-shadow-prices"Full parameters — bucketing, aggregation, filters and search — are on the API reference.
Ask an agent
The same stream through the Model Context Protocol, so Claude, ChatGPT, Cursor or any MCP client can query it directly.
claude mcp add --transport http dryos https://api.dryos.ai/mcpThen ask:
What has Shadow price been at 105T105_1 over the last 24 hours, and when did it peak?
Setup for every client is on the MCP server page.
How this stream is checked
- Pulled straight from ERCOT MIS · NP4-191-CD — no reseller in between — and compared against that file before it is served.
- Null means the source did not report it — never zero.
- A reading lands daily, ~12:35 CT; the interval timestamp is the start of the interval, in UTC.
- ERCOT settles and publishes on US Central time. Every timestamp Dryos serves is UTC.
Related streams
- ERCOT real-time LMPERCOT
Locational marginal prices from the latest SCED run, every ERCOT settlement point.
every 5 min · 5m rows1,118 entitiesercot-realtime-lmp - ERCOT day-ahead hourly LMPERCOT
Hourly cleared prices from the day-ahead market for every ERCOT electrical bus, posted once for the following day.
daily, ~12:35 CT · 1h rows19,312 entitiesercot-dam-lmp-bus - Real-time settlement point pricesERCOT
The 15-minute price settlement actually uses, every ERCOT settlement point — the SCED LMP plus price adders.
every 15 min · 15m rows1,118 entitiesercot-rt-spp - DAM settlement point pricesERCOT
Day-ahead hourly settlement point prices for every settlement point, posted once after the DAM run.
daily, ~12:35 CT · 1h rows1,118 entitiesercot-dam-spp - Real-time LMPs by electrical busERCOT
Bus-level prices under the settlement points: ~19,000 electrical buses from every SCED run.
every 5 min · 5m rows19,312 entitiesercot-rt-lmp-bus - Indicative LMPs (RTD look-ahead)ERCOT
Where real-time prices are about to go: RTD's forward intervals for every settlement point, republished each run with every vintage kept.
every 5 min, look-ahead · 5m rows1,118 entitiesercot-indicative-lmp