What is Grid Status?#

gridstatus logo

Tests Code Coverage 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 Interval Start Interval End Solar Wind Geothermal Biomass Biogas Small Hydro Coal Nuclear Natural Gas Large Hydro Batteries Imports Other
0 2023-03-24 00:00:00-07:00 2023-03-24 00:00:00-07:00 2023-03-24 00:05:00-07:00 -41 5529 931 255 218 270 3 2271 5573 3498 -184 6005 0
1 2023-03-24 00:05:00-07:00 2023-03-24 00:05:00-07:00 2023-03-24 00:10:00-07:00 -41 5490 931 252 215 271 4 2271 5567 3584 -66 5928 0
2 2023-03-24 00:10:00-07:00 2023-03-24 00:10:00-07:00 2023-03-24 00:15:00-07:00 -41 5491 931 250 213 271 3 2271 5602 3587 -62 5851 0
3 2023-03-24 00:15:00-07:00 2023-03-24 00:15:00-07:00 2023-03-24 00:20:00-07:00 -41 5478 932 252 213 271 3 2271 5733 3575 -132 5736 0
4 2023-03-24 00:20:00-07:00 2023-03-24 00:20:00-07:00 2023-03-24 00:25:00-07:00 -41 5446 931 251 212 271 4 2270 5694 3512 -72 5753 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
164 2023-03-24 13:40:00-07:00 2023-03-24 13:40:00-07:00 2023-03-24 13:45:00-07:00 6865 3188 927 242 212 313 2 2272 4393 2079 -1305 1107 0
165 2023-03-24 13:45:00-07:00 2023-03-24 13:45:00-07:00 2023-03-24 13:50:00-07:00 6823 3134 927 242 212 313 2 2273 4192 2076 -1193 1149 0
166 2023-03-24 13:50:00-07:00 2023-03-24 13:50:00-07:00 2023-03-24 13:55:00-07:00 6850 3128 928 243 212 313 2 2273 4006 2076 -875 912 0
167 2023-03-24 13:55:00-07:00 2023-03-24 13:55:00-07:00 2023-03-24 14:00:00-07:00 6838 3168 928 247 212 298 2 2272 4041 2093 -966 948 0
168 2023-03-24 14:00:00-07:00 2023-03-24 14:00:00-07:00 2023-03-24 14:05:00-07:00 6739 3220 926 250 212 282 2 2272 4028 2127 -956 971 0

169 rows × 16 columns

Load#

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

caiso.get_load("today")
Time Interval Start Interval End Load
0 2023-03-24 00:00:00-07:00 2023-03-24 00:00:00-07:00 2023-03-24 00:05:00-07:00 22987.0
1 2023-03-24 00:05:00-07:00 2023-03-24 00:05:00-07:00 2023-03-24 00:10:00-07:00 23058.0
2 2023-03-24 00:10:00-07:00 2023-03-24 00:10:00-07:00 2023-03-24 00:15:00-07:00 23070.0
3 2023-03-24 00:15:00-07:00 2023-03-24 00:15:00-07:00 2023-03-24 00:20:00-07:00 22985.0
4 2023-03-24 00:20:00-07:00 2023-03-24 00:20:00-07:00 2023-03-24 00:25:00-07:00 22945.0
... ... ... ... ...
164 2023-03-24 13:40:00-07:00 2023-03-24 13:40:00-07:00 2023-03-24 13:45:00-07:00 16373.0
165 2023-03-24 13:45:00-07:00 2023-03-24 13:45:00-07:00 2023-03-24 13:50:00-07:00 16379.0
166 2023-03-24 13:50:00-07:00 2023-03-24 13:50:00-07:00 2023-03-24 13:55:00-07:00 16390.0
167 2023-03-24 13:55:00-07:00 2023-03-24 13:55:00-07:00 2023-03-24 14:00:00-07:00 16360.0
168 2023-03-24 14:00:00-07:00 2023-03-24 14:00:00-07:00 2023-03-24 14:05:00-07:00 16356.0

169 rows × 4 columns

Load Forecast#

Another dataset we can query is the load forecast

nyiso = gridstatus.NYISO()
nyiso.get_load_forecast("today")
Time Interval Start Interval End Forecast Time Load Forecast
0 2023-03-24 00:00:00-04:00 2023-03-24 00:00:00-04:00 2023-03-24 01:00:00-04:00 2023-03-24 00:00:00-04:00 13521
1 2023-03-24 01:00:00-04:00 2023-03-24 01:00:00-04:00 2023-03-24 02:00:00-04:00 2023-03-24 00:00:00-04:00 13101
2 2023-03-24 02:00:00-04:00 2023-03-24 02:00:00-04:00 2023-03-24 03:00:00-04:00 2023-03-24 00:00:00-04:00 12872
3 2023-03-24 03:00:00-04:00 2023-03-24 03:00:00-04:00 2023-03-24 04:00:00-04:00 2023-03-24 00:00:00-04:00 12802
4 2023-03-24 04:00:00-04:00 2023-03-24 04:00:00-04:00 2023-03-24 05:00:00-04:00 2023-03-24 00:00:00-04:00 13029
... ... ... ... ... ...
139 2023-03-29 19:00:00-04:00 2023-03-29 19:00:00-04:00 2023-03-29 20:00:00-04:00 2023-03-24 00:00:00-04:00 17318
140 2023-03-29 20:00:00-04:00 2023-03-29 20:00:00-04:00 2023-03-29 21:00:00-04:00 2023-03-24 00:00:00-04:00 17202
141 2023-03-29 21:00:00-04:00 2023-03-29 21:00:00-04:00 2023-03-29 22:00:00-04:00 2023-03-24 00:00:00-04:00 16602
142 2023-03-29 22:00:00-04:00 2023-03-29 22:00:00-04:00 2023-03-29 23:00:00-04:00 2023-03-24 00:00:00-04:00 15629
143 2023-03-29 23:00:00-04:00 2023-03-29 23:00:00-04:00 2023-03-30 00:00:00-04:00 2023-03-24 00:00:00-04:00 14731

144 rows × 5 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 Interval Start Interval End Load
0 2020-01-01 00:00:00-08:00 2020-01-01 00:00:00-08:00 2020-01-01 00:05:00-08:00 21533
1 2020-01-01 00:05:00-08:00 2020-01-01 00:05:00-08:00 2020-01-01 00:10:00-08:00 21429
2 2020-01-01 00:10:00-08:00 2020-01-01 00:10:00-08:00 2020-01-01 00:15:00-08:00 21320
3 2020-01-01 00:15:00-08:00 2020-01-01 00:15:00-08:00 2020-01-01 00:20:00-08:00 21272
4 2020-01-01 00:20:00-08:00 2020-01-01 00:20:00-08:00 2020-01-01 00:25:00-08:00 21193
... ... ... ... ...
283 2020-01-01 23:35:00-08:00 2020-01-01 23:35:00-08:00 2020-01-01 23:40:00-08:00 20494
284 2020-01-01 23:40:00-08:00 2020-01-01 23:40:00-08:00 2020-01-01 23:45:00-08:00 20383
285 2020-01-01 23:45:00-08:00 2020-01-01 23:45:00-08:00 2020-01-01 23:50:00-08:00 20297
286 2020-01-01 23:50:00-08:00 2020-01-01 23:50:00-08:00 2020-01-01 23:55:00-08:00 20242
287 2020-01-01 23:55:00-08:00 2020-01-01 23:55:00-08:00 2020-01-02 00:00:00-08:00 20128

288 rows × 4 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 Interval Start Interval End Load
0 2021-01-01 00:00:00-08:00 2021-01-01 00:00:00-08:00 2021-01-01 00:05:00-08:00 21937.0
1 2021-01-01 00:05:00-08:00 2021-01-01 00:05:00-08:00 2021-01-01 00:10:00-08:00 21858.0
2 2021-01-01 00:10:00-08:00 2021-01-01 00:10:00-08:00 2021-01-01 00:15:00-08:00 21827.0
3 2021-01-01 00:15:00-08:00 2021-01-01 00:15:00-08:00 2021-01-01 00:20:00-08:00 21757.0
4 2021-01-01 00:20:00-08:00 2021-01-01 00:20:00-08:00 2021-01-01 00:25:00-08:00 21664.0
... ... ... ... ...
8923 2021-01-31 23:35:00-08:00 2021-01-31 23:35:00-08:00 2021-01-31 23:40:00-08:00 20054.0
8924 2021-01-31 23:40:00-08:00 2021-01-31 23:40:00-08:00 2021-01-31 23:45:00-08:00 19952.0
8925 2021-01-31 23:45:00-08:00 2021-01-31 23:45:00-08:00 2021-01-31 23:50:00-08:00 19859.0
8926 2021-01-31 23:50:00-08:00 2021-01-31 23:50:00-08:00 2021-01-31 23:55:00-08:00 19763.0
8927 2021-01-31 23:55:00-08:00 2021-01-31 23:55:00-08:00 2021-02-01 00:00:00-08:00 19650.0

8928 rows × 4 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!

Examples