# US Facility Greenhouse Gas Emissions API — EPA GHGRP (`nexgensignal/us-ghg-facility-emission-records`) Actor

EPA Greenhouse Gas Reporting Program data: emissions by facility, sector and gas (CO2, methane, N2O and more) for thousands of US power plants, refineries, landfills and factories, 2010 onwards, with parent company. Filter by state and year. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/us-ghg-facility-emission-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 ghg emission records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏭 US Facility Greenhouse Gas Emissions API — EPA GHGRP

Get the US EPA Greenhouse Gas Reporting Program (GHGRP) as clean JSON — greenhouse gas emissions by facility, sector, subsector and gas (CO2, methane, nitrous oxide, fluorinated gases) for US power plants, refineries, chemical plants, landfills and other large emitters and fuel suppliers, 2010 onwards, with each facility's location, NAICS code and parent companies — straight from EPA's Envirofacts service.

Filter by year, state, NAICS code, sector, gas, facility type, facility name, parent company or a minimum emission. The largest emission lines come first.

The unit of output is one **emission line**: one facility, year, subsector and gas. You pay per line delivered; a run that finds nothing costs nothing.

### Who buys this and for what job

- **ESG, climate and sustainability analysts** screening companies and assets by reported facility emissions.
- **Investors and lenders** mapping parent companies to their highest-emitting facilities.
- **Carbon markets, CCS and decarbonization teams** finding large CO2 and methane point sources by state and industry.
- **Researchers and journalists** studying emissions by sector and place.

Buyers usually search for this as **"epa ghgrp data"** or **"facility greenhouse gas emissions"**.

### 📊 Sample Output

![Table of EPA GHGRP emission lines for Texas facilities in 2023: facility, state, subsector, gas and CO2-equivalent emissions, largest first.](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/us-ghg-facility-emission-records.png)

| year | facility_name | facility_types | subsector | gas_code | co2e_emission |
|---|---|---|---|---|---|
| 2023 | Valero Marketing and Supply Company | Supplier | Exporter | CO2 | 238380353.9659809 |
| 2023 | MOTIVA ENTERPRISES LLC | Supplier, Direct Emitter | Producer | CO2 | 91983868.1551206 |
| 2023 | Exxonmobil Beaumont Refinery | Supplier, Direct Emitter | Producer | CO2 | 83078905.1310102 |
| 2023 | EXXONMOBIL Bt Site | Supplier, Direct Emitter | Producer | CO2 | 82201241.1046668 |
| 2023 | Enterprise Products Operating LLC | Supplier | Exporter | CO2 | 72902210.3653748 |
| 2023 | Galveston Bay Refinery | Supplier, SF6 from Elec. Equip., Direct Emitter | Producer | CO2 | 71172512.7154706 |

Rows from live run `ZGjqRVYU1LlhJDvwc` on Apify (the Store example: state TX, latest year, 10 lines). Notice the largest lines first and the facility type: Supplier figures are the emissions the fuels a company supplies would release, not on-site emissions — filter `facilityTypes` to Direct Emitter for those.

### ✅ What you get

Every field of each record:

- `record_id` — gHGRP:<facility>:<year>:<subsector>:<gas>; stable, use it to upsert.
- `facility_id` — gHGRP facility ID.
- `frs_id` — ePA Facility Registry Service ID.
- `year` — reporting year.
- `facility_name` — facility name as reported.
- `address` — facility street address (the site, not a person).
- `city` — city.
- `state` — state.
- `zip` — zIP code.
- `county` — county.
- `county_fips` — county FIPS code.
- `latitude` — latitude.
- `longitude` — longitude.
- `naics_code` — primary NAICS code.
- `parent_company` — parent companies and ownership shares, as EPA publishes them.
- `facility_types` — e.g. Direct Emitter.
- `reported_subparts` — gHGRP subparts the facility reported under.
- `sector` — ePA sector, e.g. Power Plants.
- `subsector` — ePA subsector.
- `gas_code` — gas code, e.g. CO2, CH4, N2O.
- `gas_name` — gas name.
- `co2e_emission` — emissions of this gas from this subsector in CO2-equivalent, as EPA publishes them.
- `source` — ePA tables read.
- `source_url` — envirofacts query for that year.
- `licence` — licence notice.
- `attribution` — source line.
- `observed_at` — when this run read it (UTC).

### ⚙️ Sample inputs

**1. The Store example — Texas, latest year**

```json
{
  "states": ["TX"],
  "maxRecords": 10
}
```

Read 4,761 Texas lines for 2023 and returned the 10 largest in run `ZGjqRVYU1LlhJDvwc`; $0.50 on the Free plan.

**2. Largest power-plant CO2 emitters nationwide**

```json
{
  "sectors": ["Power Plants"],
  "facilityTypes": ["Direct Emitter"],
  "gases": ["CO2"],
  "maxRecords": 40
}
```

Read 26,272 lines for 2023, matched 1,319 and returned the 40 largest in run `RUmGfRCJjuCXQPaJy`.

**3. One parent company's facilities**

```json
{
  "parentCompanyContains": ["exxon"],
  "years": ["2023"],
  "maxRecords": 20
}
```

Matched 271 lines and returned the 20 largest in run `IW5Zcz60jKCOd02tA`.

Input fields:

| Field | Meaning |
|---|---|
| `years` | e.g. 2023, 2022 (2010 onwards). Leave empty for the latest year EPA has published. |
| `states` | Two-letter state codes, e.g. TX, LA. |
| `naicsPrefixes` | e.g. 2211 (power generation), 324 (petroleum and coal products), 3251 (basic chemicals). |
| `sectors` | e.g. Power Plants, Refineries, Landfills, Cement. |
| `gases` | Gas codes, e.g. CO2, CH4, N2O, SF6. |
| `facilityTypes` | Direct Emitter (on-site emissions) or Supplier (fuel and gas suppliers, whose figures are the emissions their supplied products would release). Leave empty for both. |
| `facilityNameContains` | Words in the facility name. |
| `parentCompanyContains` | Words in the parent company field, e.g. Exxon. |
| `facilityIds` | GHGRP facility IDs, e.g. 1000001. |
| `minCo2e` | Keep emission lines at or above this CO2e value. |
| `order` | Sort order. |
| `maxRecords` | Stop after this many emission lines (each is charged once). |

### 🧾 JSON sample record

```json
{
  "record_id": "GHGRP:1010568:2023:43:1",
  "facility_id": 1010568,
  "frs_id": "110071160284",
  "year": 2023,
  "facility_name": "Valero Marketing and Supply Company",
  "address": "One Valero Way",
  "city": "San Antonio",
  "state": "TX",
  "zip": "78249",
  "county": "BEXAR COUNTY",
  "county_fips": "48029",
  "latitude": 29.567614,
  "longitude": -98.605074,
  "naics_code": "424720",
  "parent_company": "VALERO ENERGY CORP (100%)",
  "facility_types": "Supplier",
  "reported_subparts": "MM",
  "sector": "Petroleum Product Suppliers",
  "subsector": "Exporter",
  "gas_code": "CO2",
  "gas_name": "Carbon Dioxide",
  "co2e_emission": 238380353.9659809,
  "source": "U.S. EPA Greenhouse Gas Reporting Program — Envirofacts PUB_DIM_FACILITY joined to PUB_FACTS_SECTOR_GHG_EMISSION",
  "source_url": "https://data.epa.gov/efservice/PUB_DIM_FACILITY/year/2023/PUB_FACTS_SECTOR_GHG_EMISSION",
  "licence": "U.S. Environmental Protection Agency data: a work of the U.S. Government, not subject to copyright protection in the United States (17 U.S.C. 105).",
  "attribution": "Source: U.S. EPA Greenhouse Gas Reporting Program (GHGRP), via Envirofacts",
  "observed_at": "2026-10-12T04:09:03Z"
}
```

### 🔧 How it works

1. **Robots check.** `data.epa.gov/robots.txt` is read on every run; it sets no rules, so Envirofacts is allowed. A robots file that disallowed it would stop the run with nothing charged.

2. **Pick the year.** With no `years`, the actor asks EPA which recent year has data (2023 on 12 Oct 2026).

3. **Query Envirofacts.** For each year (and state, if given) it reads EPA's facility table joined to its sector/gas emissions table, 10,000 rows at a time, plus EPA's gas, sector and subsector code tables.

4. **Filter, sort, deliver, then charge.** Lines are filtered, sorted largest first and pushed in batches, each charged after delivery.

5. **Receipt.** `RUN_RECEIPT` records the robots result, the queries and their row counts, and delivered and charged counts.

No login, API key, proxy or bot workaround. EPA's `comments` column is never delivered.

### 💰 Pricing example

Per emission line delivered, no start fee, no monthly charge:

| Apify plan | Price per emission line |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

- 10 records (the Store example): $0.50 on the Free plan, $0.335 on Gold.
- 1,000 records (the default cap): $50 on Free, $45 on Bronze, $40 on Silver, $33.50 on Gold.

**Coverage and size.** Reporting years 2010 onwards; on 12 Oct 2026 the latest year in Envirofacts was 2023 (26,272 emission lines; 2024 returned none). Facilities above GHGRP reporting thresholds and fuel and industrial gas suppliers; small sources are not covered. `co2e_emission` is given exactly as EPA publishes it; EPA's column definition calls it emissions "in carbon dioxide equivalent (CO2e) value" and does not state the unit, so none is asserted here. Supplier lines are not on-site emissions.

### ⚖️ Legal & ToS

Data: U.S. Environmental Protection Agency, Greenhouse Gas Reporting Program, via Envirofacts (data.epa.gov). EPA data are a work of the U.S. Government, not subject to copyright protection in the United States (17 U.S.C. §105); EPA's disclaimers page states this for EPA-produced data. Every record carries the notice in `licence` and a source line in `attribution`. Not affiliated with or endorsed by EPA.

Facility-level records — facility names and site addresses, NAICS codes and parent companies as EPA publishes them; no personal data is selected and EPA's free-text comments column is never delivered. `robots.txt` is honoured. One public service, declared User-Agent, no login, key, proxy or form.

### ❓ FAQ

**Do I need an EPA key?**
No. Envirofacts is open.

**What is a Supplier?**
A company reporting the emissions its supplied fuels or gases would release when used, not its own on-site emissions. Use `facilityTypes` to keep Direct Emitter only.

**Why is the newest year 2023?**
That is the newest year EPA's Envirofacts service returned on 12 Oct 2026.

**Can I get one facility's history?**
Yes: `facilityIds` plus several `years`.

### 🆘 Troubleshooting

- **0 records for a sector** — `sectors` matches EPA's sector and subsector names, e.g. Power Plants, Refineries, Landfills.
- **Run takes longer without a state** — a whole year is about 26,000 lines read in three pages; add `states` to narrow it.
- **Totals look double-counted** — a facility can report several subsectors and gases; sum by `facility_id` only within one gas or use CO2e across gases deliberately.
- **SOURCE UNAVAILABLE message** — the source did not answer after four tries; nothing was charged — run again later.
- **CAPPED message** — your maximum total charge was reached; raise it in the run options.
- **Run failed with "Invalid input"** — a filter value is malformed; the message names the field. Nothing was charged.

### 🔗 Related Actors

- [EPA Facility Compliance Records — Envirofacts](https://apify.com/nexgensignal/epa-facility-compliance-records) — EPA compliance records for facilities.
- [EU Industrial Emissions Records — EEA IED Facilities](https://apify.com/nexgensignal/eu-industrial-emissions-records) — EU industrial facility emissions.
- [EU GHG Inventory Records — EEA](https://apify.com/nexgensignal/eu-ghg-inventory-records) — EU national greenhouse gas inventories.
- [ENERGY STAR Product Records — EPA Certified Products](https://apify.com/nexgensignal/energy-star-product-records) — EPA ENERGY STAR certified products.
- [US Electricity Data API — EIA Generation, Prices & Sales](https://apify.com/nexgensignal/eia-electricity-time-series-observations) — US electricity generation and prices.

🏢 **About NexGen Signal** — official-source data products from government and regulator publications. Browse the catalog: [apify.com/nexgensignal](https://apify.com/nexgensignal)

### ⭐ Found this useful?

If this actor saved you time, a rating on its Apify Store page helps other buyers find it.

Part of NexGen Signal — official-source data products.

# Actor input Schema

## `years` (type: `array`):

e.g. 2023, 2022 (2010 onwards). Leave empty for the latest year EPA has published.

## `states` (type: `array`):

Two-letter state codes, e.g. TX, LA.

## `naicsPrefixes` (type: `array`):

e.g. 2211 (power generation), 324 (petroleum and coal products), 3251 (basic chemicals).

## `sectors` (type: `array`):

e.g. Power Plants, Refineries, Landfills, Cement.

## `gases` (type: `array`):

Gas codes, e.g. CO2, CH4, N2O, SF6.

## `facilityTypes` (type: `array`):

Direct Emitter (on-site emissions) or Supplier (fuel and gas suppliers, whose figures are the emissions their supplied products would release). Leave empty for both.

## `facilityNameContains` (type: `array`):

Words in the facility name.

## `parentCompanyContains` (type: `array`):

Words in the parent company field, e.g. Exxon.

## `facilityIds` (type: `array`):

GHGRP facility IDs, e.g. 1000001.

## `minCo2e` (type: `integer`):

Keep emission lines at or above this CO2e value.

## `order` (type: `string`):

Sort order.

## `maxRecords` (type: `integer`):

Stop after this many emission lines (each is charged once).

## Actor input object example

```json
{
  "years": [],
  "states": [
    "TX"
  ],
  "naicsPrefixes": [],
  "sectors": [],
  "gases": [],
  "facilityTypes": [],
  "facilityNameContains": [],
  "parentCompanyContains": [],
  "facilityIds": [],
  "order": "largest_first",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered (and billed) records.

## `receipt` (type: `string`):

Robots result, source files, rows read, delivered and charged counts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "states": [
        "TX"
    ],
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/us-ghg-facility-emission-records").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "states": ["TX"],
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/us-ghg-facility-emission-records").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "states": [
    "TX"
  ],
  "maxRecords": 10
}' |
apify call nexgensignal/us-ghg-facility-emission-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/us-ghg-facility-emission-records"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/X6mCNe5H5CVTGC8Tj/builds/dBh9NQMBEhoEcMuto/openapi.json
