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

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. Preliminary eGRID2024 data became available late 2025.

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 (every several years, latest is NEI 2020), 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. The 2025 update (released June 2025) is the current version for 2026 reporting.

API status: No API. The Hub is a curated reference document, not a queryable database. Some categories within it (notably purchased electricity) trace back to eGRID, which has third-party API options as covered above.

7. Third-party API options compared

ProviderCoverageFree tierBest for
emission-factors.comEPA eGRID (US Scope 2 only)Free, no key, no signupUS-only Scope 2, indie devs, 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 have been tested against the live API. The JSON output shown is the real, current response.

curl - Look up a ZIP

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

Real response (verified April 2026, 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.34,
    "renewable_pct": 46.36,
    "generation_mix": {
      "coal_pct": 2.09, "gas_pct": 42.77,
      "nuclear_pct": 7.98, "hydro_pct": 14.06,
      "wind_pct": 6.58, "solar_pct": 20.04,
      "geothermal_pct": 3.59, "biomass_pct": 2.19,
      "other_fossil_pct": 0.7, "oil_pct": 0, "other_pct": 0
    }
  }],
  "notes": "Single-subregion ZIP"
}

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.3343 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.2

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}'

Real response:

{
  "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": "Single-subregion ZIP"
}

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": {
      "url": "https://emission-factors.com/mcp"
    }
  }
}

Restart Claude. Then ask: "What's the carbon intensity of electricity in ZIP 94105?" Claude calls the MCP server directly and returns the answer with the EPA citation. 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.3928393~1%
Dallas, TXERCT0.334333437%
Chicago, ILRFCW0.415541636%
Detroit, MIRFCM0.442644321%
Seattle, WANWPP0.288028858%
Atlanta, GASRSO0.3815382~32%

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 (requires EPA shapefiles + GIS work), keep up with annual updates, handle preliminary vs final releases. Most teams who try this end up either dropping the project or using a third-party API after a few months.

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, or the EPA's CAMD (Continuous Emissions Monitoring) hourly data. 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'll need AP-42 or equivalent for those sources, AND eGRID for purchased electricity (Scope 2). Most corporate inventories use both. emission-factors.com only covers eGRID.

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.