
PJM Price Locations
Every PJM location that carries a price, as three columns: location_id, name, and kind.
Overview
14,977 rows — load (12,159), generator (2,255), aggregate (293), bus (153), interface (82), zone (23), hub (12). This is the dimension the PJM 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 PJM, location_id is the numeric pnode_id and name is the pnode name (e.g. WESTERN HUB). Join on location_id; report name. 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
Analysis rules
Interpretation
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.
POST /api/v1/datasets/pjm_locations/queryNeed the full history of this dataset in Snowflake, Databricks or your own storage? Data services delivers it on a schedule.
Schema3
location_idLowCardinality(String)nameLowCardinality(String)kindLowCardinality(String)Sample data
| location_id | name | kind |
|---|---|---|
| 1 | PJM-RTO | zone |
| 101560795 | HAYROAD 8CC | aggregate |
| 1047909 | TOSCOGIS | load |
| 1047910 | AMTRAK | load |
| 1047911 | AMTRAK | load |
| 1047912 | BETZWOOD | load |
| 1047913 | LLANERCH | load |
| 1047914 | LLANERCH | load |
| 1047915 | LLANERCH | load |
| 1047916 | UPPERPRO | load |
| 1047919 | EXETER | load |
| 1047920 | EXETER | load |
| 1047921 | HUNLOCK | load |
| 1047925 | POPETALB | load |
| 1047926 | COURTDAL | load |
| 1047927 | DALLAS | load |
| 1047928 | GLENVIEW | load |
| 1047929 | HANOVER | load |
| 1047930 | HANOVER | load |
| 1047932 | KING UGI | load |
| 1047933 | KING UGI | load |
| 1047934 | KOONSVIL | load |
| 1047935 | KOONSVIL | load |
| 1047936 | KUNKLE | load |
| 1047937 | LINC UGI | load |
Coverage
No time-indexed data — coverage isn’t applicable to this dataset.
