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
7 Independent Electricity System Operator ieso IESO

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 2024-05-08 00:00:00-07:00 2024-05-08 00:00:00-07:00 2024-05-08 00:05:00-07:00 118 5385 768 242 153 295 0 1144 3532 4530 94 6221 0
1 2024-05-08 00:05:00-07:00 2024-05-08 00:05:00-07:00 2024-05-08 00:10:00-07:00 123 5367 768 243 151 294 0 1144 3209 4513 647 6229 0
2 2024-05-08 00:10:00-07:00 2024-05-08 00:10:00-07:00 2024-05-08 00:15:00-07:00 134 5344 769 242 152 294 0 1144 3077 4461 1099 6085 0
3 2024-05-08 00:15:00-07:00 2024-05-08 00:15:00-07:00 2024-05-08 00:20:00-07:00 134 5388 769 241 153 293 0 1144 3119 4453 1190 5878 0
4 2024-05-08 00:20:00-07:00 2024-05-08 00:20:00-07:00 2024-05-08 00:25:00-07:00 131 5398 769 242 154 293 0 1144 3090 4433 1100 5960 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
76 2024-05-08 06:20:00-07:00 2024-05-08 06:20:00-07:00 2024-05-08 06:25:00-07:00 1173 2431 773 241 152 296 0 1141 5419 3952 1954 4841 0
77 2024-05-08 06:25:00-07:00 2024-05-08 06:25:00-07:00 2024-05-08 06:30:00-07:00 1586 2352 773 239 152 297 0 1142 5415 3939 1589 5012 0
78 2024-05-08 06:30:00-07:00 2024-05-08 06:30:00-07:00 2024-05-08 06:35:00-07:00 2071 2276 773 240 153 298 0 1142 5349 3929 1361 5029 0
79 2024-05-08 06:35:00-07:00 2024-05-08 06:35:00-07:00 2024-05-08 06:40:00-07:00 2633 2232 773 240 152 297 0 1142 5179 3889 1070 5109 0
80 2024-05-08 06:40:00-07:00 2024-05-08 06:40:00-07:00 2024-05-08 06:45:00-07:00 3253 2225 773 241 152 297 0 1142 5111 3875 681 5085 0

81 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 2024-05-08 00:00:00-07:00 2024-05-08 00:00:00-07:00 2024-05-08 00:05:00-07:00 21583.0
1 2024-05-08 00:05:00-07:00 2024-05-08 00:05:00-07:00 2024-05-08 00:10:00-07:00 21739.0
2 2024-05-08 00:10:00-07:00 2024-05-08 00:10:00-07:00 2024-05-08 00:15:00-07:00 21866.0
3 2024-05-08 00:15:00-07:00 2024-05-08 00:15:00-07:00 2024-05-08 00:20:00-07:00 21854.0
4 2024-05-08 00:20:00-07:00 2024-05-08 00:20:00-07:00 2024-05-08 00:25:00-07:00 21803.0
... ... ... ... ...
76 2024-05-08 06:20:00-07:00 2024-05-08 06:20:00-07:00 2024-05-08 06:25:00-07:00 22214.0
77 2024-05-08 06:25:00-07:00 2024-05-08 06:25:00-07:00 2024-05-08 06:30:00-07:00 22258.0
78 2024-05-08 06:30:00-07:00 2024-05-08 06:30:00-07:00 2024-05-08 06:35:00-07:00 22320.0
79 2024-05-08 06:35:00-07:00 2024-05-08 06:35:00-07:00 2024-05-08 06:40:00-07:00 22386.0
80 2024-05-08 06:40:00-07:00 2024-05-08 06:40:00-07:00 2024-05-08 06:45:00-07:00 22493.0

81 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 2024-05-08 00:00:00-04:00 2024-05-08 00:00:00-04:00 2024-05-08 01:00:00-04:00 2024-05-08 00:00:00-04:00 13256
1 2024-05-08 01:00:00-04:00 2024-05-08 01:00:00-04:00 2024-05-08 02:00:00-04:00 2024-05-08 00:00:00-04:00 12774
2 2024-05-08 02:00:00-04:00 2024-05-08 02:00:00-04:00 2024-05-08 03:00:00-04:00 2024-05-08 00:00:00-04:00 12486
3 2024-05-08 03:00:00-04:00 2024-05-08 03:00:00-04:00 2024-05-08 04:00:00-04:00 2024-05-08 00:00:00-04:00 12360
4 2024-05-08 04:00:00-04:00 2024-05-08 04:00:00-04:00 2024-05-08 05:00:00-04:00 2024-05-08 00:00:00-04:00 12500
... ... ... ... ... ...
139 2024-05-13 19:00:00-04:00 2024-05-13 19:00:00-04:00 2024-05-13 20:00:00-04:00 2024-05-08 00:00:00-04:00 16295
140 2024-05-13 20:00:00-04:00 2024-05-13 20:00:00-04:00 2024-05-13 21:00:00-04:00 2024-05-08 00:00:00-04:00 16339
141 2024-05-13 21:00:00-04:00 2024-05-13 21:00:00-04:00 2024-05-13 22:00:00-04:00 2024-05-08 00:00:00-04:00 15749
142 2024-05-13 22:00:00-04:00 2024-05-13 22:00:00-04:00 2024-05-13 23:00:00-04:00 2024-05-08 00:00:00-04:00 14652
143 2024-05-13 23:00:00-04:00 2024-05-13 23:00:00-04:00 2024-05-14 00:00:00-04:00 2024-05-08 00:00:00-04:00 13578

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