---
name: epa-egrid-ingestion
description: "How to get EPA eGRID data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load EPA eGRID 2023 plant data into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/epa-egrid
Provider: https://www.epa.gov/egrid/detailed-data
Checked against the provider's documentation: 2026-11-01

## Access
- No account or key. The revision 2 Excel workbook is a public download.
- Reading XLSX with pandas requires an Excel engine such as openpyxl.

## Request
```bash
curl -A 'Mozilla/5.0 (X11; Linux x86_64) SignalLabCheck/1.0' -O 'https://www.epa.gov/system/files/documents/2025-06/egrid2023_data_rev2.xlsx'
```

## Format
XLSX workbook with plant, generator, unit, state, balancing-authority, NERC-region, eGRID-subregion and U.S. sheets. The plant sheet includes IDs, location, capacity, generation, fuels, emissions, heat input and rates.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""EPA eGRID 2023 revision 2 plant sheet -> pandas -> Parquet."""
import io
import requests
import pandas as pd

URL = "https://www.epa.gov/system/files/documents/2025-06/egrid2023_data_rev2.xlsx"
HEADERS = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) SignalLabCheck/1.0"}
r = requests.get(URL, headers=HEADERS, timeout=120)
r.raise_for_status()
df = pd.read_excel(io.BytesIO(r.content), sheet_name="PLNT23")
# The first data row contains EPA's compact field codes rather than a plant.
df = df.iloc[1:].reset_index(drop=True)
df.to_parquet("epa_egrid2023_plants.parquet", index=False)
print(len(df), "plant rows", len(df.columns), "columns",
      df["Plant state abbreviation"].nunique(), "states/areas")
```
Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2 | openpyxl 3.1.5). Result: 12612 plant rows 150 columns 52 states/areas

## Limits
- Rate limit: Not stated.
- The checked workbook is about 21.2 MB and represents data year 2023, not current operations.
- Historical editions do not cover every calendar year before 2018.

## Quirks
- The first row beneath the descriptive headers contains compact field codes such as SEQPLT23 and PSTATABB; remove it before type-sensitive Parquet export.
- The workbook has several aggregation levels. Do not add plant, state and regional rows as if they were independent observations.
- EPA documents methodology and source-data revisions; retain the edition and revision with derived outputs.

## Terms and attribution
- EPA identifies eGRID data as public domain and available for commercial and non-commercial use.
- EPA supplies suggested citations for eGRID 2023.
- Terms page: https://www.epa.gov/egrid/frequent-questions-about-egrid

## Sources
- https://www.epa.gov/egrid/frequent-questions-about-egrid: "eGRID data is produced by the United States Environmental Protection Agency (EPA) under the public domain and is available for use both non-commercially and commercially."
- https://www.epa.gov/egrid/frequent-questions-about-egrid: "The latest version of eGRID (eGRID2023) was the eighteenth edition released in January of 2025 with data from 2023."
- https://www.epa.gov/egrid/known-issues-data-notes-and-revisions: "eGRID2023 Revision 2 was released on June 12, 2025."

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
