gridstatus Homepage#

gridstatus logo

Tests PyPI Version

What is gridstatus?#

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-11-02 00:00:00-07:00 -38 4255 866 159 205 127 3 1124 9352 790 -448 6916 0
1 2022-11-02 00:05:00-07:00 -38 4358 866 160 205 122 3 1124 9487 771 -461 6876 0
2 2022-11-02 00:10:00-07:00 -38 4456 865 158 206 121 3 1124 9589 748 -439 6695 0
3 2022-11-02 00:15:00-07:00 -38 4554 866 159 206 121 3 1125 9547 743 -445 6529 0
4 2022-11-02 00:20:00-07:00 -38 4628 865 159 206 121 2 1125 9550 718 -528 6566 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
119 2022-11-02 09:55:00-07:00 9318 4468 819 181 201 138 5 1128 9122 629 -1519 2382 0
120 2022-11-02 10:00:00-07:00 9443 4551 819 181 202 138 5 1128 9022 598 -1575 2316 0
121 2022-11-02 10:05:00-07:00 9554 4597 818 183 202 138 5 1128 8813 583 -1698 2633 0
122 2022-11-02 10:10:00-07:00 9695 4686 819 181 198 138 5 1127 8684 620 -1823 2855 0
123 2022-11-02 10:15:00-07:00 9778 4778 818 182 198 134 5 1127 8706 641 -1948 2896 0

124 rows × 14 columns

Load#

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

caiso.get_load("today")
Time Load
0 2022-11-02 00:00:00-07:00 21754.0
1 2022-11-02 00:05:00-07:00 21842.0
2 2022-11-02 00:10:00-07:00 21863.0
3 2022-11-02 00:15:00-07:00 21761.0
4 2022-11-02 00:20:00-07:00 21719.0
... ... ...
119 2022-11-02 09:55:00-07:00 23693.0
120 2022-11-02 10:00:00-07:00 23527.0
121 2022-11-02 10:05:00-07:00 23461.0
122 2022-11-02 10:10:00-07:00 23544.0
123 2022-11-02 10:15:00-07:00 23571.0

124 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-11-02 00:00:00-04:00 2022-11-02 00:00:00-04:00 13059
1 2022-11-02 00:00:00-04:00 2022-11-02 01:00:00-04:00 12610
2 2022-11-02 00:00:00-04:00 2022-11-02 02:00:00-04:00 12329
3 2022-11-02 00:00:00-04:00 2022-11-02 03:00:00-04:00 12235
4 2022-11-02 00:00:00-04:00 2022-11-02 04:00:00-04:00 12390
... ... ... ...
140 2022-11-02 00:00:00-04:00 2022-11-07 19:00:00-05:00 17312
141 2022-11-02 00:00:00-04:00 2022-11-07 20:00:00-05:00 16527
142 2022-11-02 00:00:00-04:00 2022-11-07 21:00:00-05:00 15690
143 2022-11-02 00:00:00-04:00 2022-11-07 22:00:00-05:00 14583
144 2022-11-02 00:00:00-04:00 2022-11-07 23:00:00-05:00 13562

145 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