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 2023-01-27 00:00:00-08:00 -42 1610 901 281 220 224 5 2264 11248 1199 -319 6272 0
1 2023-01-27 00:05:00-08:00 -42 1609 901 280 220 224 5 2265 11999 1275 -238 5628 0
2 2023-01-27 00:10:00-08:00 -42 1621 901 284 220 215 5 2264 12004 1265 -83 5275 0
3 2023-01-27 00:15:00-08:00 -42 1633 901 284 221 212 5 2265 11721 1269 -45 5167 0
4 2023-01-27 00:20:00-08:00 -42 1629 900 282 221 212 5 2265 11736 1265 -106 5190 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
102 2023-01-27 08:30:00-08:00 8790 1299 921 291 222 199 5 2260 7909 1641 -222 3838 0
103 2023-01-27 08:35:00-08:00 9211 1293 921 290 223 198 5 2260 7751 1670 -235 3425 0
104 2023-01-27 08:40:00-08:00 9594 1281 922 287 222 198 4 2261 7390 1492 -72 3089 0
105 2023-01-27 08:45:00-08:00 9923 1278 921 289 222 198 5 2260 7591 1336 -119 2867 0
106 2023-01-27 08:50:00-08:00 10166 1287 921 292 222 199 5 2260 7682 1334 -258 2608 0

107 rows × 14 columns

Load#

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

caiso.get_load("today")
Time Load
0 2023-01-27 00:00:00-08:00 21638.0
1 2023-01-27 00:05:00-08:00 21827.0
2 2023-01-27 00:10:00-08:00 21858.0
3 2023-01-27 00:15:00-08:00 21566.0
4 2023-01-27 00:20:00-08:00 21515.0
... ... ...
102 2023-01-27 08:30:00-08:00 24463.0
103 2023-01-27 08:35:00-08:00 24242.0
104 2023-01-27 08:40:00-08:00 24094.0
105 2023-01-27 08:45:00-08:00 23931.0
106 2023-01-27 08:50:00-08:00 23712.0

107 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 2023-01-27 00:00:00-05:00 2023-01-27 00:00:00-05:00 15171
1 2023-01-27 00:00:00-05:00 2023-01-27 01:00:00-05:00 14718
2 2023-01-27 00:00:00-05:00 2023-01-27 02:00:00-05:00 14458
3 2023-01-27 00:00:00-05:00 2023-01-27 03:00:00-05:00 14395
4 2023-01-27 00:00:00-05:00 2023-01-27 04:00:00-05:00 14613
... ... ... ...
139 2023-01-27 00:00:00-05:00 2023-02-01 19:00:00-05:00 19334
140 2023-01-27 00:00:00-05:00 2023-02-01 20:00:00-05:00 18777
141 2023-01-27 00:00:00-05:00 2023-02-01 21:00:00-05:00 18052
142 2023-01-27 00:00:00-05:00 2023-02-01 22:00:00-05:00 17111
143 2023-01-27 00:00:00-05:00 2023-02-01 23:00:00-05:00 16243

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!