ERCOT logo

ERCOT Price Locations

Every ERCOT location that carries a price, as three columns: location_id, name, and kind.

Native record
one row per priced location and kind
slow-moving dimension, refreshed every 6 hours publication cadence
Evidence
Reference data
Stable context used to interpret other datasets
Time basis
Point-in-time records
UTC · static reference

Overview

20,456 rows — bus (19,329), node (1,100), weather_zone (8), zone (8), hub (7), interface (4). This is the dimension the ERCOT price, and where applicable constraint, tables join to, and it is the one place a location's type is decided: resolve "which hubs exist", "is this a zone or a node", or "give me the readable name for this id" here rather than inferring a type from a name prefix. For ERCOT, name equals location_id — the settlement-point name is the identifier. The key is (location_id, kind), not location_id alone: 161 ERCOT names exist as both a settlement point and an electrical bus, and those are separately priced objects. Filter on kind when a name could be either. The same three columns exist for every market, so the equivalent question in another ISO is the same query against that ISO's table.

Query contract

Treat (location_id, kind) as the row identity. This is a current dimension snapshot, not a history: it describes the locations that exist now and carries no validity dates.

Analysis rules

  • Counting rows by kind describes the market's current location inventory. It does not describe how many locations were priced on some past date.
  • Join fact tables on location_id, and add kind to the join when the fact table also carries kind — the pair, not the id alone, is the identity.

Interpretation

  • A location existing here does not mean it has a price in any particular interval; check the price table for that.
  • kind is a classification of the priced object, not of the physical equipment behind it, and carries no capacity, voltage, or geography. Location geography lives in grid.entities.

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

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

Schema3

Column
Type
location_idLowCardinality(String)
nameLowCardinality(String)
kindLowCardinality(String)

Sample data

location_idnamekind
00010001bus
0001DUPV1_0001DUPV1_bus
0001HWFG10001HWFG1bus
0001VICTOR0001VICTORbus
0001_C0001_Cbus
0001_EB0001_EBbus
0001_LO0001_LObus
00020002bus
0002_EB0002_EBbus
00030003bus
0003EB0003EBbus
0003_EB0003_EBbus
00040004bus
0004EB0004EBbus
0004_10004_1bus
0004_EB0004_EBbus
00050005bus
00060006bus
0006B0006Bbus
0006EB0006EBbus
0006_PV10006_PV1bus
00070007bus
0007_EB0007_EBbus
00080008bus
0008EB0008EBbus

Coverage

No time-indexed data — coverage isn’t applicable to this dataset.