EPA eGRID REST API: Complete Guide for 2026

What REST APIs the EPA actually offers for emission factors (none), what doesn't exist, and the practical options for accessing eGRID, AP-42, WebFIRE, and CHIEF data programmatically.

Updated April 15, 2026 · By the emission-factors.com team

Does the EPA have a REST API for emission factors?

No. As of 2026, the EPA publishes its emission factor databases - eGRID, AP-42, WebFIRE, CHIEF, and the GHG Emission Factors Hub - as downloadable files (Excel, CSV, PDF), but does not operate a public REST API for any of them. To access EPA emission factors programmatically, you either use a third-party REST API that wraps the EPA data (such as emission-factors.com for eGRID) or parse the EPA downloads yourself.

TL;DR: No EPA REST API exists in 2026. eGRID, AP-42, WebFIRE, and CHIEF are all download-only. To access EPA emission factors programmatically you use a third-party wrapper (emission-factors.com for eGRID, Climatiq for global), or parse EPA downloads yourself. This guide explains exactly what's in each EPA dataset, what APIs do exist, and how to integrate.
Contents
  1. Which EPA database do you actually need?
  2. eGRID (electricity, Scope 2)
  3. AP-42 (combustion, Scope 1)
  4. WebFIRE (industrial process emissions)
  5. CHIEF (Clearinghouse for Inventories)
  6. GHG Emission Factors Hub
  7. Third-party API options
  8. Code examples
  9. FAQ

1. Which EPA database do you actually need?

The EPA publishes several distinct emission factor databases. Picking the right one depends entirely on what you're calculating. Here's a decision matrix:

If you needUse this EPA databaseAPI exists?
CO2e per kWh of electricity by US locationeGRIDThird-party (emission-factors.com)
Combustion emissions (boilers, engines, vehicles)AP-42No - download only
Industrial process emission factors (cement, steel, etc.)WebFIRENo - web search only
State Implementation Plan / NEI inventory dataCHIEFNo - download only
GHG Protocol cross-reference factors (mobile, fuel, refrigerants)GHG Emission Factors HubNo - PDF/Excel (stationary fuels wrapped by emission-factors.com)

For most carbon accounting use cases (Scope 2 reporting, CDP, CSRD, SB 253), eGRID is the answer. The other databases come into play for Scope 1, air quality compliance, or specialty industrial applications.

2. eGRID (electricity, Scope 2)

What it is: The Emissions & Generation Resource Integrated Database. EPA aggregates emissions from every US electric power plant by 27 grid subregions and publishes annual emission factors (CO2e, CO2, CH4, N2O, NOx, SO2) plus generation mix per subregion.

Latest release: eGRID2023 Rev2, released June 2025. eGRID2024 from Cornerstone (EPA's code run on 2024 data) became available in March 2026.

What EPA provides:

What EPA does NOT provide: A REST API. There is no https://api.epa.gov/egrid/... endpoint in 2026.

Practical API options for eGRID:

OptionCostSignup
emission-factors.com (this site)FreeNone
ClimatiqLimited free tier, paid plans typically high three to low four figures/moRequired
Build your own (parse eGRID Excel + EPA shapefiles)Engineering timeN/A

If you only need US Scope 2 location-based factors, the third-party wrappers are dramatically faster than building from EPA's raw downloads. The build-it-yourself path requires GIS work to map ZIPs to subregions, which is non-trivial.

3. AP-42 (combustion, Scope 1)

What it is: The Compilation of Air Pollutant Emission Factors. Used to calculate emissions from stationary combustion sources (boilers, internal combustion engines, gas turbines), industrial processes, and certain mobile sources. The reference for Scope 1 stationary combustion, air quality permits, and Title V applications.

What EPA provides: AP-42 chapters as PDF documents on epa.gov. Each chapter is a PDF describing emission factors for a specific source category.

API status: No API. AP-42 lookup means downloading PDFs and extracting factors manually. There are no third-party REST APIs that comprehensively wrap AP-42 either - the structure is inherently document-oriented (text descriptions, tables of factors with footnotes about applicability).

Practical advice: If you need AP-42 programmatically, you're going to maintain your own internal database. Some carbon accounting platforms (Climatiq, Sphera) have AP-42-derived factors in their data layer but typically require enterprise-tier subscriptions.

4. WebFIRE (industrial process emissions)

What it is: The EPA's Factor Information REtrieval Data System. A web tool for searching emission factors across pollutant, source category, control technology, and other dimensions. Includes AP-42 factors plus additional industrial source data.

What EPA provides: A searchable web interface. You enter parameters (SCC code, pollutant, control device) and get back matching factors with citations.

API status: No API. WebFIRE is web-only. There is no documented WebFIRE API endpoint in 2026.

For automation: The data behind WebFIRE is published as bulk downloads on epa.gov. If you need WebFIRE-equivalent data programmatically, you download the source files and build your own search index.

5. CHIEF (Clearinghouse for Inventories)

What it is: The Clearinghouse for Inventories & Emissions Factors - the parent program that hosts AP-42, WebFIRE, and the National Emissions Inventory (NEI). CHIEF is more of an umbrella than a single dataset.

What EPA provides: Bulk downloads of NEI data (published every three years), reference databases, and documentation. Available at epa.gov/chief.

API status: No public REST API for CHIEF or NEI data. Bulk download only.

6. GHG Emission Factors Hub

What it is: EPA's annual GHG Emission Factors Hub, a consolidated reference document with factors for purchased electricity (sourced from eGRID), mobile combustion, business travel, employee commuting, and other categories most relevant to corporate Scope 1, 2, and 3 inventories.

What EPA provides: An annual PDF and Excel workbook. EPA's 2025 edition was its last; the 2026 Hub is published by Cornerstone and is this API's default (EPA's 2025 edition stays available).

Successor: EPA's January 2025 edition was its last. The 2026 edition was published in June 2026 by the Cornerstone Sustainability Data Initiative, with WSP and ERG, who maintained the Hub for EPA (free, CC-BY-4.0, Zenodo). It keeps the stationary-combustion factors and moves GWPs to IPCC AR6.

API status: neither publisher offers an API; the Hub is a curated reference document. emission-factors.com wraps its Table 1 stationary-combustion factors (63 fuels; 2026 edition with AR6 GWPs by default, EPA's 2025 edition on request) as GET /api/fuel-emissions?fuel=natural_gas&quantity=1000&unit=therm for Scope 1. The purchased-electricity factors trace back to eGRID, covered above.

7. Third-party API options compared

ProviderCoverageFree tierBest for
emission-factors.comEPA eGRID, Green-e residual mix, EPA GHG Hub fuelsFree, no key, no signupUS Scope 2 (location + market-based) and Scope 1 fuels, site comparison, AI agents (MCP server)
ClimatiqGlobal, multi-scope, supply chainLimited, signup requiredEnterprise platforms, global coverage, ISO-audited needs
Carbon InterfaceActivity-based (electricity, fuel, flights)TrialQuick prototyping
CO2APIEuropean focus, some globalLimitedEU-focused projects
Sphera, Persefoni, IBM EnviziFull carbon accounting platformsNone - enterprise onlyLarge corporates with budget

8. Code examples (tested, verified output)

All examples below were run against the live API. Responses are shortened to the main fields; the full responses also carry utility, residual-mix and edition fields.

curl - Look up a ZIP

curl "https://emission-factors.com/api/lookup?zip=94105"

Response, shortened (eGRID2023 Rev2):

{
  "zip": "94105",
  "candidates": [{
    "subregion": "CAMX",
    "data_year": "eGRID2023 Rev2 (2025-06-12)",
    "methodology": "eGRID subregion output emission rates (location-based)",
    "co2e_kg_per_kwh": 0.195037,
    "co2e_lb_per_mwh": 429.983,
    "co2_kg_per_kwh": 0.194348,
    "ch4_kg_per_kwh": 1.134e-05,
    "n2o_kg_per_kwh": 1.36e-06,
    "co2_nonbaseload_kg_per_kwh": 0.434679,
    "nox_lb_per_mwh": 0.332,
    "so2_lb_per_mwh": 0.02,
    "carbon_free_pct": 54.56,
    "renewable_pct": 46.55,
    "generation_mix": {
      "coal_pct": 2.1, "gas_pct": 42.89,
      "nuclear_pct": 8.02, "hydro_pct": 14.1,
      "wind_pct": 6.55, "solar_pct": 20.09,
      "geothermal_pct": 3.64, "biomass_pct": 2.15,
      "other_fossil_pct": 0.67, "oil_pct": 0.04, "other_pct": 0
    }
  }],
  "notes": "Subregion of the ZIP's Census ZCTA (area centroid)"
}

Python - Production-ready function

import requests

API_BASE = "https://emission-factors.com"

def lookup_factor(zip_code: str) -> dict:
    """Return the primary emission factor record for a US ZIP."""
    r = requests.get(
        f"{API_BASE}/api/lookup",
        params={"zip": zip_code},
        timeout=10,
    )
    r.raise_for_status()
    data = r.json()
    if not data.get("candidates"):
        raise ValueError(f"No subregion mapping for ZIP {zip_code}")
    return data["candidates"][0]

def calc_scope2_kg(zip_code: str, kwh: float) -> float:
    """Location-based Scope 2 emissions in kg CO2e."""
    factor = lookup_factor(zip_code)
    return kwh * factor["co2e_kg_per_kwh"]

# Example - HQ in 94105 with 1.2M kWh/year
kg = calc_scope2_kg("94105", 1_200_000)
print(f"Scope 2: {kg:,.0f} kg CO2e ({kg/1000:.1f} tonnes)")
# Output: Scope 2: 234,044 kg CO2e (234.0 tonnes)

JavaScript / TypeScript

async function lookupFactor(zip: string) {
  const res = await fetch(
    `https://emission-factors.com/api/lookup?zip=${zip}`
  );
  if (!res.ok) throw new Error(`API error ${res.status}`);
  const data = await res.json();
  return data.candidates[0];
}

async function scope2Tonnes(zip: string, kwh: number) {
  const f = await lookupFactor(zip);
  return (kwh * f.co2e_kg_per_kwh) / 1000;
}

// Real numbers across grids:
//   ZIP 94105 (CAMX/California): 0.1950 kg/kWh -> cleanest
//   ZIP 60601 (RFCW/Ohio Valley): 0.4155 kg/kWh -> 2.1x dirtier
//   ZIP 75201 (ERCT/Texas):     0.3341 kg/kWh -> 1.7x dirtier
console.log(await scope2Tonnes("94105", 1_200_000)); // 234.0
console.log(await scope2Tonnes("60601", 1_200_000)); // 498.6
console.log(await scope2Tonnes("75201", 1_200_000)); // 401.0

Calculate Scope 2 in one call (no separate lookup)

curl -X POST https://emission-factors.com/api/calculate \
  -H "Content-Type: application/json" \
  -d '{"zip": "94105", "kwh": 1200000}'

Response, shortened:

{
  "zip": "94105",
  "kwh": 1200000,
  "candidates": [{
    "subregion": "CAMX",
    "co2e_kg": 234044.4,
    "co2e_lb": 515979.6,
    "co2e_kg_per_kwh": 0.195037,
    "co2e_lb_per_mwh": 429.983,
    "data_year": "eGRID2023 Rev2 (2025-06-12)",
    "methodology": "eGRID subregion output emission rates (location-based)"
  }],
  "notes": "Subregion of the ZIP's Census ZCTA (area centroid)"
}

Bulk lookup (up to 100 ZIPs in one call)

curl -X POST https://emission-factors.com/api/lookup/batch \
  -H "Content-Type: application/json" \
  -d '{"zips": ["94105", "10001", "60601", "75201", "33101"]}'

From Claude or any AI agent (MCP)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "emission-factors": {
      "command": "npx",
      "args": ["-y", "github:rozetyp/emission-factors-mcp"]
    }
  }
}

Restart Claude. Then ask: "What's the carbon intensity of electricity in ZIP 94105?" Claude runs the MCP server, which calls this API, and answers with the EPA citation. (Claude.ai and Claude Code can connect to https://emission-factors.com/mcp directly.) Full MCP setup guide.

Real cross-grid comparison: same kWh, different locations

The dramatic point about US grid heterogeneity - all factors below are real values from eGRID2023 Rev2 returned by the API. A 1 GWh/year facility produces:

LocationSubregionkg CO2e/kWhTonnes/year (1 GWh)Carbon-free %
San Francisco, CACAMX0.195019554%
New York, NYNYCW0.39273930.6%
Dallas, TXERCT0.334133437%
Chicago, ILRFCW0.415541636%
Detroit, MIRFCM0.442744321%
Seattle, WANWPP0.288228858%
Atlanta, GASRSO0.383738430%

Same kWh consumption, 2.3x range in resulting emissions depending on grid. This is exactly why national-average emission factors are misleading and ZIP-specific lookups matter for accurate Scope 2 reporting.

9. FAQ

Why doesn't the EPA have an emission factors API?

Historical and structural reasons. EPA's emission factor databases predate the modern REST API era and are managed by separate offices with different cadences (eGRID is annual, AP-42 chapters are revised individually). Recent EPA data modernization efforts focus on the EJScreen environmental justice tool and AirNow real-time air quality - not emission factor APIs. There has been no public roadmap from EPA to add APIs as of 2026.

Is using a third-party API audit-defensible?

Yes, as long as the underlying data is the official EPA source. emission-factors.com uses unmodified eGRID2023 Rev2 factors with the full citation chain documented. CDP, CSRD, and SB 253 reporting frameworks accept any methodology that uses the official EPA data and clearly cites the source - they don't require you to download the raw EPA file yourself.

Can I just download eGRID and host it myself?

Technically yes - eGRID data is public domain. The work is: parse the Excel workbook, build a ZIP-to-subregion mapping (for example from Census ZCTA boundaries and EPA's subregion shapefile), and keep up with new editions.

What about real-time emissions APIs?

eGRID factors are annual aggregates - they don't change in real time. For real-time grid carbon intensity, you'd want APIs like WattTime, Electricity Maps, and for plant-level history, EPA CAMD's hourly emissions data (published quarterly, not real time). Those are different products from the static emission factors covered here.

Do I need both eGRID AND AP-42 for full GHG inventory?

If your company has Scope 1 stationary combustion (boilers, gas furnaces, etc.) you need fuel combustion factors for those sources (EPA's GHG Emission Factors Hub; AP-42 for industrial processes) AND eGRID for purchased electricity (Scope 2). emission-factors.com covers both the Hub's stationary-combustion fuels (/api/fuel-emissions) and eGRID, location- and market-based (/api/calculate). AP-42 process emissions are not covered.

Try it: curl https://emission-factors.com/api/lookup?zip=94105 returns the EPA eGRID emission factor for San Francisco's grid. Free, no signup. Full API docs.