What is Grid Status?#
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-12-06 00:00:00-08:00 | 2024-12-06 00:00:00-08:00 | 2024-12-06 00:05:00-08:00 | -53 | 619 | 793 | 171 | 175 | 146 | -1 | 2264 | 11928 | 1459 | -747 | 5256 | 0 |
1 | 2024-12-06 00:05:00-08:00 | 2024-12-06 00:05:00-08:00 | 2024-12-06 00:10:00-08:00 | -57 | 641 | 796 | 173 | 176 | 147 | -1 | 2263 | 11924 | 1232 | -486 | 5527 | 0 |
2 | 2024-12-06 00:10:00-08:00 | 2024-12-06 00:10:00-08:00 | 2024-12-06 00:15:00-08:00 | -54 | 645 | 794 | 173 | 177 | 148 | -1 | 2264 | 11897 | 1121 | -393 | 5642 | 0 |
3 | 2024-12-06 00:15:00-08:00 | 2024-12-06 00:15:00-08:00 | 2024-12-06 00:20:00-08:00 | -55 | 654 | 793 | 175 | 175 | 148 | -1 | 2263 | 11859 | 1115 | -422 | 5589 | 0 |
4 | 2024-12-06 00:20:00-08:00 | 2024-12-06 00:20:00-08:00 | 2024-12-06 00:25:00-08:00 | -54 | 703 | 793 | 176 | 176 | 148 | -1 | 2264 | 11761 | 1101 | -386 | 5593 | 0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
152 | 2024-12-06 12:40:00-08:00 | 2024-12-06 12:40:00-08:00 | 2024-12-06 12:45:00-08:00 | 13490 | 313 | 787 | 182 | 174 | 150 | -1 | 2262 | 5499 | 349 | -6061 | 2596 | 0 |
153 | 2024-12-06 12:45:00-08:00 | 2024-12-06 12:45:00-08:00 | 2024-12-06 12:50:00-08:00 | 13589 | 310 | 787 | 182 | 175 | 151 | -1 | 2263 | 5513 | 348 | -6070 | 2496 | 0 |
154 | 2024-12-06 12:50:00-08:00 | 2024-12-06 12:50:00-08:00 | 2024-12-06 12:55:00-08:00 | 13659 | 308 | 787 | 181 | 175 | 153 | -1 | 2262 | 5508 | 343 | -5942 | 2325 | 0 |
155 | 2024-12-06 12:55:00-08:00 | 2024-12-06 12:55:00-08:00 | 2024-12-06 13:00:00-08:00 | 13679 | 327 | 787 | 183 | 175 | 153 | -1 | 2263 | 5485 | 345 | -5905 | 2327 | 0 |
156 | 2024-12-06 13:00:00-08:00 | 2024-12-06 13:00:00-08:00 | 2024-12-06 13:05:00-08:00 | 13701 | 331 | 787 | 183 | 175 | 153 | -1 | 2263 | 5470 | 348 | -5920 | 2337 | 0 |
157 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-12-06 00:00:00-08:00 | 2024-12-06 00:00:00-08:00 | 2024-12-06 00:05:00-08:00 | 22079.0 |
1 | 2024-12-06 00:05:00-08:00 | 2024-12-06 00:05:00-08:00 | 2024-12-06 00:10:00-08:00 | 22208.0 |
2 | 2024-12-06 00:10:00-08:00 | 2024-12-06 00:10:00-08:00 | 2024-12-06 00:15:00-08:00 | 22395.0 |
3 | 2024-12-06 00:15:00-08:00 | 2024-12-06 00:15:00-08:00 | 2024-12-06 00:20:00-08:00 | 22206.0 |
4 | 2024-12-06 00:20:00-08:00 | 2024-12-06 00:20:00-08:00 | 2024-12-06 00:25:00-08:00 | 22193.0 |
... | ... | ... | ... | ... |
152 | 2024-12-06 12:40:00-08:00 | 2024-12-06 12:40:00-08:00 | 2024-12-06 12:45:00-08:00 | 19711.0 |
153 | 2024-12-06 12:45:00-08:00 | 2024-12-06 12:45:00-08:00 | 2024-12-06 12:50:00-08:00 | 19741.0 |
154 | 2024-12-06 12:50:00-08:00 | 2024-12-06 12:50:00-08:00 | 2024-12-06 12:55:00-08:00 | 19704.0 |
155 | 2024-12-06 12:55:00-08:00 | 2024-12-06 12:55:00-08:00 | 2024-12-06 13:00:00-08:00 | 19829.0 |
156 | 2024-12-06 13:00:00-08:00 | 2024-12-06 13:00:00-08:00 | 2024-12-06 13:05:00-08:00 | 19838.0 |
157 rows × 4 columns
Load Forecast#
Another dataset we can query is the load forecast
nyiso = gridstatus.NYISO()
nyiso.get_load_forecast("today")
/home/docs/checkouts/readthedocs.org/user_builds/isodata/checkouts/latest/gridstatus/nyiso.py:905: FutureWarning: Parsed string "12/05/24 07:30 EST" included an un-recognized timezone "EST". Dropping unrecognized timezones is deprecated; in a future version this will raise. Instead pass the string without the timezone, then use .tz_localize to convert to a recognized timezone.
return pd.Timestamp(last_updated_date, tz=self.default_timezone)
Time | Interval Start | Interval End | Forecast Time | Load Forecast | |
---|---|---|---|---|---|
0 | 2024-12-06 00:00:00-05:00 | 2024-12-06 00:00:00-05:00 | 2024-12-06 01:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 15987 |
1 | 2024-12-06 01:00:00-05:00 | 2024-12-06 01:00:00-05:00 | 2024-12-06 02:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 15516 |
2 | 2024-12-06 02:00:00-05:00 | 2024-12-06 02:00:00-05:00 | 2024-12-06 03:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 15244 |
3 | 2024-12-06 03:00:00-05:00 | 2024-12-06 03:00:00-05:00 | 2024-12-06 04:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 15180 |
4 | 2024-12-06 04:00:00-05:00 | 2024-12-06 04:00:00-05:00 | 2024-12-06 05:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 15437 |
... | ... | ... | ... | ... | ... |
139 | 2024-12-11 19:00:00-05:00 | 2024-12-11 19:00:00-05:00 | 2024-12-11 20:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 19194 |
140 | 2024-12-11 20:00:00-05:00 | 2024-12-11 20:00:00-05:00 | 2024-12-11 21:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 18698 |
141 | 2024-12-11 21:00:00-05:00 | 2024-12-11 21:00:00-05:00 | 2024-12-11 22:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 17978 |
142 | 2024-12-11 22:00:00-05:00 | 2024-12-11 22:00:00-05:00 | 2024-12-11 23:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 16957 |
143 | 2024-12-11 23:00:00-05:00 | 2024-12-11 23:00:00-05:00 | 2024-12-12 00:00:00-05:00 | 2024-12-05 07:30:00-05:00 | 15991 |
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