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.
Metadata
Release files for kardashev 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kardashev-0.3.0.tar.gz | 35.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kardashev-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.3 kB
Release files / kardashev-0.3.0.tar.gz
| Download URL | kardashev-0.3.0.tar.gz |
|---|---|
| Size | 35.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d5e00780d17a6697e46d1f8593e57e3199c3994fcd9d28ef747e14d84227429b
|
|
BLAKE2b-256 checksum How to use checksums |
c2996809938781792ef5596a588760d907af30739c3afcf8ce0509e92fce6b68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.13
|
Release files / kardashev-0.3.0-py3-none-any.whl
| Download URL | kardashev-0.3.0-py3-none-any.whl |
|---|---|
| Size | 42.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3b5eb4577dacc175e494205f1d1de1c2c391b1de2ea69e9c6350c409a450d1ba
|
|
BLAKE2b-256 checksum How to use checksums |
0d8a0d3871f4373df2a48eb111fd457cc605b5736bee1804aa3a9ce090c21a20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.13
|