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-30 00:00:00-08:00 -39 2053 966 267 199 183 4 2250 10604 1201 -57 5078 0
1 2022-12-30 00:05:00-08:00 -39 2030 966 269 199 180 4 2251 11343 1207 -98 4564 0
2 2022-12-30 00:10:00-08:00 -39 2017 966 271 199 168 5 2250 11044 1309 250 4410 0
3 2022-12-30 00:15:00-08:00 -39 2007 966 269 199 170 4 2250 10875 1305 196 4419 0
4 2022-12-30 00:20:00-08:00 -38 2021 965 269 199 170 4 2251 10963 1335 70 4413 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
135 2022-12-30 11:15:00-08:00 6749 3850 953 281 197 210 3 2247 8304 1769 -993 2779 0
136 2022-12-30 11:20:00-08:00 6751 3883 952 278 198 210 3 2248 8178 1756 -885 2796 0
137 2022-12-30 11:25:00-08:00 6809 3937 952 280 197 210 3 2247 8112 1754 -831 2742 0
138 2022-12-30 11:30:00-08:00 6816 3955 952 287 197 210 3 2246 7997 1764 -766 2658 0
139 2022-12-30 11:35:00-08:00 6593 3975 951 284 198 210 3 2247 7945 1772 -541 2709 0

140 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-30 00:00:00-08:00 21639.0
1 2022-12-30 00:05:00-08:00 21676.0
2 2022-12-30 00:10:00-08:00 21684.0
3 2022-12-30 00:15:00-08:00 21605.0
4 2022-12-30 00:20:00-08:00 21540.0
... ... ...
135 2022-12-30 11:15:00-08:00 23644.0
136 2022-12-30 11:20:00-08:00 23714.0
137 2022-12-30 11:25:00-08:00 23753.0
138 2022-12-30 11:30:00-08:00 23784.0
139 2022-12-30 11:35:00-08:00 23821.0

140 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-30 00:00:00-05:00 2022-12-30 00:00:00-05:00 14655
1 2022-12-30 00:00:00-05:00 2022-12-30 01:00:00-05:00 14116
2 2022-12-30 00:00:00-05:00 2022-12-30 02:00:00-05:00 13801
3 2022-12-30 00:00:00-05:00 2022-12-30 03:00:00-05:00 13680
4 2022-12-30 00:00:00-05:00 2022-12-30 04:00:00-05:00 13830
... ... ... ...
139 2022-12-30 00:00:00-05:00 2023-01-04 19:00:00-05:00 17793
140 2022-12-30 00:00:00-05:00 2023-01-04 20:00:00-05:00 17132
141 2022-12-30 00:00:00-05:00 2023-01-04 21:00:00-05:00 16289
142 2022-12-30 00:00:00-05:00 2023-01-04 22:00:00-05:00 15317
143 2022-12-30 00:00:00-05:00 2023-01-04 23:00:00-05:00 14459

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!