SPP logo

SPP Price Locations

Every SPP 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

Coverage follows ingested settlement locations and RT/DA buses; inspect current counts. This is the dimension the SPP 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 SPP, name equals location_id. 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/spp_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
AECAECnode
AECC_CSWSAECC_CSWSnode
AECC_ELKINSAECC_ELKINSnode
AECC_ELKINS1AECC_ELKINS1node
AECC_ELKINS2AECC_ELKINS2node
AECC_ELKINS3AECC_ELKINS3node
AECC_FITZHUGHAECC_FITZHUGHnode
AECC_FLTCREEKAECC_FLTCREEKnode
AECC_FULTONAECC_FULTONnode
AECC_HYDRO13AECC_HYDRO13node
AECC_JWTURKAECC_JWTURKnode
AECIAECInode
AECI_KAMO.OGEAECI_KAMO.OGEnode
AEPM_CSWSAEPM_CSWSnode
AESOAESOnode
ALTWALTWnode
AMRNAMRNnode
ANTELOPEANTELOPEnode
AVAAVAnode
AVRNAVRNnode
AZPSAZPSnode
BANCBANCnode
BBABBAnode
BCABCAnode
BCHABCHAnode

Coverage

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