Open energy data for all US ISOs - direct access to CAISO, ERCOT, MISO, NYISO, ISONE, SPP, PJM. Free, open-source gridstatus alternative with no API key required.
Project description
kardashev
Open energy data for all US ISOs. Direct access to CAISO, ERCOT, MISO, NYISO, ISONE, SPP, and PJM - no API key, no rate limits, no gridstatus dependency.
Install
pip install kardashev
Direct ISO access (no API key)
from kardashev import CAISO, ERCOT, MISO, NYISO, ISONE, SPP
# CAISO
caiso = CAISO()
df = caiso.get_fuel_mix() # live generation by fuel type
df = caiso.get_load() # actual grid load
df = caiso.get_lmp(market="RT") # real-time LMP (TH_NP15 hub)
df = caiso.get_lmp(market="DA", node="TH_SP15_GEN-APND")
df = caiso.get_curtailment() # solar + wind curtailment
# ERCOT
ercot = ERCOT()
df = ercot.get_fuel_mix()
rows = ercot.get_lmp(market="RT") # settlement point prices (CDR)
rows = ercot.get_lmp(market="DA") # DAM hourly prices
# MISO
miso = MISO()
df = miso.get_fuel_mix()
rows = miso.get_lmp(market="RT") # 5-min hub prices
rows = miso.get_lmp(market="DA") # ex-ante DA LMP
# NYISO
nyiso = NYISO()
df = nyiso.get_fuel_mix()
df = nyiso.get_lmp(market="RT") # real-time zonal LMP
df = nyiso.get_lmp(market="DA") # day-ahead zonal LMP
# ISONE (LMP requires ISONE_USERNAME + ISONE_PASSWORD env vars)
isone = ISONE()
df = isone.get_fuel_mix()
df = isone.get_lmp(market="RT", location=".Z.NEPOOL")
# SPP
spp = SPP()
df = spp.get_fuel_mix()
df = spp.get_lmp() # latest RTBM prices
Managed API (optional)
Use Client to query the Kardashev Labs API - adds carbon intensity, LMP history, interconnection queues, and 25+ more endpoints with a single hosted backend.
from kardashev import Client
kl = Client()
# Live fuel mix for CAISO
fuel = kl.fuel_mix(iso="CAISO")
# Real-time LMP hub prices for MISO
prices = kl.lmp(iso="MISO", market="RT", limit=50)
# Carbon intensity (lbs CO₂/MWh) for ERCOT
carbon = kl.carbon(iso="ERCOT")
# All nodes with latest LMP for the map view
nodes = kl.lmp_map(iso="PJM", market="RT")
Common tasks
Get today's fuel mix for all 7 ISOs in one pass:
from kardashev import Client
kl = Client()
mixes = {iso: kl.fuel_mix(iso=iso) for iso in ["CAISO", "ERCOT", "MISO", "NYISO", "ISONE", "SPP", "PJM"]}
Compare real-time LMP across ISOs:
prices = {iso: kl.lmp(iso=iso, market="RT", limit=1) for iso in ["CAISO", "ERCOT", "PJM"]}
Latest carbon intensity for every ISO in a single call:
carbon = kl.carbon_latest()
Pull an ISO's interconnection queue to a file:
kl.queue(iso="MISO").to_csv("miso_queue.csv")
Endpoints
| Method | Description |
|---|---|
fuel_mix(iso) |
Generation by fuel type |
carbon(iso) |
Carbon intensity (lbs CO₂/MWh) |
carbon_latest() |
Latest carbon intensity for all ISOs |
lmp(iso, market, node_id, limit) |
LMP price history |
lmp_map(iso, market) |
All nodes with latest price + coordinates |
lmp_hubs(iso) |
Hub/zone node list |
load(iso) |
Actual grid load |
load_forecast(iso) |
Load forecast |
generation(iso) |
Generation by unit type |
curtailment(iso) |
Renewable curtailment |
interchange(iso) |
Tie-line power flows |
nat_gas(hub) |
Natural gas spot prices |
nat_gas_storage() |
EIA weekly storage report |
weather(city) |
Weather observations |
outages(iso) |
Generator outage reports |
outages_summary() |
Total MW in outage by ISO x type |
ancillary(iso, market) |
Ancillary service prices |
ancillary_latest() |
Latest ancillary snapshot |
nuclear_status() |
Nuclear plant capacity factors |
nuclear_summary() |
Nuclear fleet capacity/output summary |
emissions(iso) |
SO₂/NOₓ emission rates |
generation_wind_solar(iso) |
Wind/solar generation forecast |
generation_battery() |
Battery storage (CAISO) |
generation_btm_solar() |
Behind-the-meter solar (NYISO) |
generation_reserve_margins() |
Planning reserve margins |
hydro_reservoirs() |
Reservoir storage levels |
hydro_reservoirs_latest() |
Latest reservoir snapshot |
hydro_streamflow() |
USGS streamflow by site |
solar_irradiance() |
Solar irradiance by location |
solar_irradiance_locations() |
Tracked irradiance stations |
solar_irradiance_latest() |
Latest irradiance snapshot |
queue(iso) |
Interconnection queue |
commodities_coal() |
Coal prices by rank |
commodities_petroleum() |
Petroleum spot prices |
commodities_power_burn() |
Gas consumed for power generation |
steo_forecast() |
EIA Short-Term Energy Outlook |
carbon_markets() |
RGGI/WCI carbon market prices |
Note: outages() (unit-level generator outages) currently returns a 500 from the hosted API - a known backend issue, not a client bug. outages_summary() works.
ISOs supported
CAISO, ERCOT, ISONE, MISO, NYISO, PJM, SPP
Custom base URL
kl = Client(base_url="https://data.kardashevlabs.org")
Comparison
| kardashev | gridstatus | |
|---|---|---|
| API key required | No | No (direct ISO access); hosted gridstatusio client requires a key |
| License | MIT | BSD-3-Clause |
| US ISO coverage | 7 (CAISO, ERCOT, MISO, NYISO, ISONE, SPP, PJM) | 7 US ISOs + IESO, AESO (Canada), plus EIA |
| Hosted normalized API | Yes, free, no key (Client) |
Yes, paid tiers (gridstatusio) |
| Direct ISO scrapers | Yes, for 6 of 7 ISOs | Yes, for all covered ISOs |
| Datasets | 25+ | 450+ |
| Maturity | Early (2026) | 3+ years, funded, staffed |
Use gridstatus if you need Canadian ISOs, EIA data, or the widest dataset catalog. Use kardashev if you want a free hosted API with no key for the 7 major US ISOs, or direct no-key scrapers for the same set.
Links
- API docs: data.kardashevlabs.org/docs
- Source: github.com/kardashev-lab/kardashev-py
- Changelog: CHANGELOG.md
- Dataset coverage by ISO: coverage.yaml
- Data sources and refresh cadence: SOURCES.md
- Website: kardashevlabs.org
License
MIT - see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kardashev-0.3.0.tar.gz.
File metadata
- Download URL: kardashev-0.3.0.tar.gz
- Upload date:
- Size: 35.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5e00780d17a6697e46d1f8593e57e3199c3994fcd9d28ef747e14d84227429b
|
|
| MD5 |
c9d1dab31a7632e5bbb1697199563348
|
|
| BLAKE2b-256 |
c2996809938781792ef5596a588760d907af30739c3afcf8ce0509e92fce6b68
|
File details
Details for the file kardashev-0.3.0-py3-none-any.whl.
File metadata
- Download URL: kardashev-0.3.0-py3-none-any.whl
- Upload date:
- Size: 42.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b5eb4577dacc175e494205f1d1de1c2c391b1de2ea69e9c6350c409a450d1ba
|
|
| MD5 |
37e2cd3cf3743c04af452418d9a8bdaa
|
|
| BLAKE2b-256 |
0d8a0d3871f4373df2a48eb111fd457cc605b5736bee1804aa3a9ce090c21a20
|