CAISO (California) Hourly DAM LMP Prices for Selected Nodes

Summary

Hourly Day Ahead Market (DAM) Locational Marginal Prices (LMP) for Selected Nodes in CAISO Market since 2016

Key Features

  • Includes hourly price in $/MWh
  • Updated daily at or before 2:00 AM ET
  • Historical data goes back to 2016
  • Contact for more information about node list

Documentation

Applications

  • Short term commitments (forecast) of price
  • Seasonal average and distribution of price
  • Historical trade area and regional price analysis
  • Congestion and loss analysis for investments
  • Day ahead trading

Overview

This data product offers hourly Day-Ahead Market (DAM) prices for 19,000 nodes in CAISO since 2016.

Day-Ahead Market (DAM) provides a demand side opportunity to adjust load depending on price levels. The demand side has started to engage actively in the market and thus has the opportunity to adjust against fluctuating price patterns. Market members and market participants can balance their own portfolios by participating in the Day-Ahead Market. This allows participants to present more balanced structure to the market and decrease of imbalances of generation/consumption of units within their portfolios.

LMP is the locational marginal price where demand at that PNode consistent with existing Transmission Constraints and the performance characteristics of resources. The Transmission Provider determines separate components of the LMP for the marginal cost of Energy, Marginal Cost of Congestion, and Marginal Cost of Losses relative to the Reference Bus, consistent with the following equation:

LMP = Energy + Loss + Congestion + GHG

Node Coverage

There are 19,000+ nodes in this data product. Please contact us for the full node list.

Metric Coverage

For each node, you will find:

  • LMP (Locational Marginal Price)
  • Energy Price
  • Congestion Price
  • Loss Price
  • Green House Gas prices (GHG price occurs in limited AP Nodes)

Data Collection Methodology

  • Data is cleansed and organized to provide a ready for analysis dataset
  • Both historical and current dates of operations are aggregated
  • All date and hours are quality checked for consistency and completeness
  • Data updates from CAISO every day

California Independent System Operator (CAISO) is a non-profit Independent System Operator serving California. It oversees the operation of California's bulk electric power system, transmission lines, and electricity market generated and transmitted by its member utilities.

Dictionary

Filter
Column
Title
Data Type
Description
opr_tsopr_tsTimestampThe date and hour when the market runs and energy is supplied
node_groupnode_groupTextFirst pattern of the node id before "_" to group the nodes
node_idnode_idTextThe identification code defined by the California ISO
price_locational_marginalprice_locational_marginalFloatThe marginal cost ($/MWh) of serving the next increment of Demand at that node consistent with existing Transmission Constraints and the performance characteristics of resources
price_congestionprice_congestionFloatThe component of LMP at a node that accounts for the cost of congestion, as measured between that Node and a Reference Bus
price_energyprice_energyFloatThe component of LMP at a node that accounts for the marginal real power
price_lossprice_lossFloatThe component of LMP at a node that accounts for the marginal real power losses, as measured between that Node and a Reference Bus

Sample Data

API

ALTADATA provides a powerfull API, compatible with JSON, CSV formats. You can connect, update and analyze our data products with cURL, Python, R, Ruby, Java or Javascript

Authentication

Getting an API key

You need to subscribe to an ALTADATA data product to get an API key. Once you subscribe to the data product you can find your API key on your Account Dashboard.

Auhenticating your requests

`api_key` is your access token. This token must be included on each API call with either a HTTP Header Authorization, or a query parameter api_key.

Example: https://www.altadata.io/data/api/en_ca_02?api_key=YOUR_API_KEY

ALTADATA API Reference Table

Parameter Type Parameter Explanation Available Values Default
General size The number of records will be returned for each page. 5 - 100 20
General page The page number. It starts at 1 and increments one by one. Each page returns records that row count equals to the size parameter 1- ... 1
General format The data return format of API call json , csv json
General collapse The aggregation format of API call Examples are monthly, yearly, bystate, bycountry, etc. Refer to the data product documentation to see available aggregations for it. null
Select columns Column select is how you specify the content of an SQL SELECT c_only, c_certain, c_columns FROM clause. More detail is in the following sections. *
Order order_by Column order is how you specify the content of an SQL ORDER BY clause. More detail is in the following sections. null
Lookup vary by column name Column lookups are how you specify the content of an SQL WHERE clause. More detail is in the following sections. *

Select

Column select is how you specify the content of an SQL SELECT c_only, c_certain, c_columns FROM clause. It specifies as a keyword argument to the query string of API Call URL. Basic usage is a comma-separated list of column names. If not given, the default value is *(asterisk).

Example 1 :

Query : ?columns=C1,C2,C3 SQL Equivalent : Select C1,C2,C3 from DATA_PRODUCT

Example 2 :

Query : Not Given | ?columns= | ?columns=* SQL Equivalent : Select * from DATA_PRODUCT

Order

Column order is how you specify the content of an SQL ORDER BY clause. It specifies as a keyword argument to the query string of API Call URL. Basic usage is a comma-separated list of column names where each column name has an appropriate suffix (asc,desc) after _(underscore) or no suffix (means ascending).

Example :

Query : ?order_by=C1_asc,C2,C3_desc,C4_asc SQL Equivalent : Select * from DATA_PRODUCT order by C1 asc, C2, C4 desc, C4 asc

Order Type Suffix
Ascending null
Ascending asc
Descending desc

Lookup

Column lookups are how you specify the content of an SQL WHERE clause. They’re specifies as keyword arguments to the query string of API Call URL. Basic usage is appending _(underscore) then lookup type as a suffix to name of the column that you want to filter. The query parameter for a column is built like the format {COLUMN_NAME}_{LOOKUP_TYPE}

As a convenience when no lookup type is provided

Lookup Type Suffix Value Type Example SQL Equivalent
Equal to null String | Numeric | Datetime ?COLUMN=VALUE Select * from DATA_PRODUCT where COLUMN=VALUE
Equal to eq String | Numeric | Datetime ?COLUMN_eq=VALUE Select * from DATA_PRODUCT where COLUMN=VALUE
Not Equal to neq String | Numeric | Datetime ?COLUMN_neq=VALUE Select * from DATA_PRODUCT where COLUMN<>VALUE
Greater Than gt Numeric | Datetime ?COLUMN_gt=VALUE Select * from DATA_PRODUCT where COLUMN>VALUE
Greater Than or Equal to gte Numeric | Datetime ?COLUMN_gte=VALUE Select * from DATA_PRODUCT where COLUMN>=VALUE
Less Than lt Numeric | Datetime ?COLUMN_lt=VALUE Select * from DATA_PRODUCT where COLUMN,VALUE
Less Than or Equal to lte Numeric | Datetime ?COLUMN_lte=VALUE Select * from DATA_PRODUCT where COLUMN<=VALUE
In in String ?COLUMN_in=V1,V2,V3 Select * from DATA_PRODUCT where COLUMN in ('V1','V2','V3')
Not In notin String ?COLUMN_notin=V1,V2,V3 Select * from DATA_PRODUCT where COLUMN not in ('V1','V2','V3')

Data Access Examples

cURL
curl \ -H 'Authorization: api_key' \ 'https://www.altadata.io/data/api/en_ca_02'
Python (requests)
response = requests.get( 'https://www.altadata.io/data/api/en_ca_02', headers={'Authorization': 'api_key'} )
Ruby (open-uri)
require 'open-uri' response = URI.open('https://www.altadata.io/data/api/en_ca_02', "Authorization" => "api_key" )
Java (OkHttp)
Request request = new Request.Builder() .url("https://www.altadata.io/data/api/en_ca_02") .addHeader("Authorization", "api_key") .build(); Call call = client.newCall(request); Response response = call.execute();
Javascript (axios)
axios.request({ url: 'https://www.altadata.io/data/api/en_ca_02', method: 'get', headers: { 'Authorization', 'api_key'} }) .then(response => { console.log(response.data) })
R ( jsonlite )
library(jsonlite) data <- fromJSON(`https://www.altadata.io/data/api/en_ca_02`)

Frequently Asked Questions

HOW DO I SUBSCRIBE TO DATA PRODUCTS ON ALTADATA?
DO YOU PROVIDE CUSTOM DATASETS UPON REQUEST?
WHAT ARE THE DIFFERENT WAYS I CAN ACCESS MY SUBSCRIPTION DATA?
HOW CAN I QUICKLY LOOK AT WHAT IS IN THE DATA THAT I SUBSCRIBED TO?
HOW CAN I JOIN ALTADATA PARTNER NETWORK? DO YOU HAVE A LIST OF REQUIREMENTS?