What is Grid Status?#

gridstatus logo

Tests PyPI Version

gridstatus is a standardized Python API to electricity supply, demand, and pricing data for the major Independent System Operators (ISOs) in the United States.

Currently gridstatus supports CAISO, SPP, ISONE, MISO, Ercot, NYISO, and PJM.

We’d love to answer any usage or data access questions! Please let us know by posting a GitHub issue.

5 Minute Overview#

First, we can see all of the ISOs that are supported

import gridstatus
gridstatus.list_isos()
Name Id Class
0 Midcontinent ISO miso MISO
1 California ISO caiso CAISO
2 PJM pjm PJM
3 Electric Reliability Council of Texas ercot Ercot
4 Southwest Power Pool spp SPP
5 New York ISO nyiso NYISO
6 ISO New England isone ISONE

Next, we can select an ISO we want to use

caiso = gridstatus.CAISO()

Fuel Mix#

All ISOs have the same API to methods like get_fuel_mix, get_load, and get_status, etc. Here is how we can get the fuel mix

caiso.get_fuel_mix("today")
Time Solar Wind Geothermal Biomass Biogas Small Hydro Coal Nuclear Natural Gas Large Hydro Batteries Imports Other
0 2022-12-02 00:00:00-08:00 -46 3599 932 248 205 116 -6 2251 12372 836 -729 5248 0
1 2022-12-02 00:05:00-08:00 -46 3611 935 246 203 114 -5 2253 12262 829 -593 5186 0
2 2022-12-02 00:10:00-08:00 -46 3571 936 248 202 112 -5 2253 12120 877 -545 5146 0
3 2022-12-02 00:15:00-08:00 -46 3563 935 250 201 112 -4 2252 11977 913 -508 5113 0
4 2022-12-02 00:20:00-08:00 -46 3576 935 250 201 113 -4 2253 11702 915 -465 5169 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
105 2022-12-02 08:45:00-08:00 6564 2050 935 239 198 112 6 2255 12504 961 -179 3537 0
106 2022-12-02 08:50:00-08:00 6846 2036 933 241 199 111 6 2255 12009 876 -380 3151 0
107 2022-12-02 08:55:00-08:00 7051 2037 933 240 200 112 6 2255 12011 821 -796 3458 0
108 2022-12-02 09:00:00-08:00 7166 2011 931 240 199 114 7 2255 11952 812 -915 3494 0
109 2022-12-02 09:05:00-08:00 7147 1987 932 240 197 110 6 2255 11939 769 -954 3589 0

110 rows × 14 columns

Load#

or the energy demand throughout the current day as a Pandas DataFrame

caiso.get_load("today")
Time Load
0 2022-12-02 00:00:00-08:00 22725.0
1 2022-12-02 00:05:00-08:00 22758.0
2 2022-12-02 00:10:00-08:00 22742.0
3 2022-12-02 00:15:00-08:00 22654.0
4 2022-12-02 00:20:00-08:00 22593.0
... ... ...
105 2022-12-02 08:45:00-08:00 26805.0
106 2022-12-02 08:50:00-08:00 25968.0
107 2022-12-02 08:55:00-08:00 25609.0
108 2022-12-02 09:00:00-08:00 25516.0
109 2022-12-02 09:05:00-08:00 25450.0

110 rows × 2 columns

Load Forecast#

Another dataset we can query is the load forecast

nyiso = gridstatus.NYISO()
nyiso.get_load_forecast("today")
Forecast Time Time Load Forecast
0 2022-12-02 00:00:00-05:00 2022-12-02 00:00:00-05:00 15111
1 2022-12-02 00:00:00-05:00 2022-12-02 01:00:00-05:00 14620
2 2022-12-02 00:00:00-05:00 2022-12-02 02:00:00-05:00 14359
3 2022-12-02 00:00:00-05:00 2022-12-02 03:00:00-05:00 14304
4 2022-12-02 00:00:00-05:00 2022-12-02 04:00:00-05:00 14541
... ... ... ...
139 2022-12-02 00:00:00-05:00 2022-12-07 19:00:00-05:00 19432
140 2022-12-02 00:00:00-05:00 2022-12-07 20:00:00-05:00 18875
141 2022-12-02 00:00:00-05:00 2022-12-07 21:00:00-05:00 18234
142 2022-12-02 00:00:00-05:00 2022-12-07 22:00:00-05:00 17173
143 2022-12-02 00:00:00-05:00 2022-12-07 23:00:00-05:00 16043

144 rows × 3 columns

Historical Data#

When supported, you can use the historical method calls to get data for a specific day in the past. For example,

caiso.get_load("Jan 1, 2020")
Time Load
0 2020-01-01 00:00:00-08:00 21533
1 2020-01-01 00:05:00-08:00 21429
2 2020-01-01 00:10:00-08:00 21320
3 2020-01-01 00:15:00-08:00 21272
4 2020-01-01 00:20:00-08:00 21193
... ... ...
283 2020-01-01 23:35:00-08:00 20494
284 2020-01-01 23:40:00-08:00 20383
285 2020-01-01 23:45:00-08:00 20297
286 2020-01-01 23:50:00-08:00 20242
287 2020-01-01 23:55:00-08:00 20128

288 rows × 2 columns

Frequently, we want to get data across multiple days. We can do that by providing a start and end parameter to any iso.get_* method

caiso_load = caiso.get_load(start="Jan 1, 2021", end="Feb 1, 2021")
caiso_load
Time Load
0 2021-01-01 00:00:00-08:00 21937.0
1 2021-01-01 00:05:00-08:00 21858.0
2 2021-01-01 00:10:00-08:00 21827.0
3 2021-01-01 00:15:00-08:00 21757.0
4 2021-01-01 00:20:00-08:00 21664.0
... ... ...
8923 2021-01-31 23:35:00-08:00 20054.0
8924 2021-01-31 23:40:00-08:00 19952.0
8925 2021-01-31 23:45:00-08:00 19859.0
8926 2021-01-31 23:50:00-08:00 19763.0
8927 2021-01-31 23:55:00-08:00 19650.0

8928 rows × 2 columns

We can now see there is data for all of January 2021

import plotly.express as px

fig = px.line(caiso_load, x="Time", y="Load", title="CAISO Load - Jan '21")
fig

Next Steps#

The best part is these APIs work in the same way across all the supported ISOs!