EPA GHGRP Emitter Screener — Facility CO2e, Gases & Trend
Pricing
from $4.40 / 1,000 results
EPA GHGRP Emitter Screener — Facility CO2e, Gases & Trend
Every large US greenhouse-gas emitter from EPA GHGRP, on EPA’s own basis: direct CO2e excluding biogenic, with supplier volume and injected CO2 kept separate. Per-gas split (CO2/CH4/N2O/fluorinated), subparts, parent company, YoY delta, multi-year trend, rank and proximity mode. Keyless.
Pricing
from $4.40 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
EPA GHGRP Emitter Screener — facility CO2e, per-gas split, trend & proximity
Every large US greenhouse-gas emitter, straight from EPA's Greenhouse Gas Reporting Program (GHGRP), on EPA's own basis: direct emissions excluding biogenic CO2. One row per facility with total CO2e, the split by gas, the reporting subparts, the parent company and its ownership share, a year-over-year delta, a multi-year trend, and both a state and a national rank. Or switch on proximity mode and get one row per site you care about, with every emitter inside a radius.
Keyless. No API key, no login, no scraping — this reads EPA Envirofacts directly.
The number this Actor reports, and why it is not the obvious one
pub_facts_sector_ghg_emission mixes three kinds of rows that look identical until
you join sector_id to pub_dim_sector.sector_type:
sector_type | What it is | RY2023 national total |
|---|---|---|
E | Direct emissions — the facility's own stack | 2,578,282,291 t CO2e (excl. biogenic) |
S | Supplier volume — CO2e that will be emitted downstream by whoever buys the fuel or industrial gas this facility sold | 4,650,647,215 t CO2e |
I | CO2 injected underground (subpart UU) — received and sequestered, not emitted | 16,298,602 t CO2 |
Adding them together gives 7.36 billion t — 2.9x what EPA publishes. On top of that, EPA states plainly that "the reported emissions exclude biogenic CO2", so a pulp mill's 2.2 Mt of biomass CO2 does not belong in its headline figure either.
So latest_year_co2e_tonnes here is direct emissions, excluding biogenic CO2.
Run the Actor for any state and the national context it prints matches EPA's published
RY2023 Data Highlights exactly: 7,544 direct-emitting facilities and
2.578 billion metric tons CO2e. Supplier volume, biogenic CO2 and injected CO2 are
each reported on their own field, and the all-sector sum is still available as
latest_year_all_reported_co2e_tonnes for anyone who wants it.
What that changes in practice, in the default Wyoming run:
- HF Sinclair Parco Refining (facility 1007217) is the state's 10th-largest emitter at 1,050,393 t, not its largest at 13,221,176 t. 12.2 Mt of that was petroleum product it sold.
- Laramie River (1001045) is Wyoming's true #1 at 10,979,532 t.
- Black Hills Wyoming Gas (1006579) reports no direct emissions at all — it is
a pure gas supplier. It gets
latest_year_co2e_tonnes: nullandtop_emitter_rank: null, not a fabricated 1.7 Mt and a top-12 slot.
Who this is for
- ESG and carbon-accounting analysts building a Scope 1 picture of an industry, a state, or a counterparty — with the gas split you need for a methane or fluorinated-gas story, not just a lump CO2e number.
- Scope 3 / supply-chain screening. Look a supplier's site up by name, county or NAICS and get its reported emissions, its parent company and its trend.
- Air-permitting and environmental consultants. Proximity mode answers "what is already emitting within N miles of this site" for a permit narrative or a cumulative-impacts section.
- Climate and energy researchers. Full-state inventories with subpart detail, county FIPS and EPA FRS IDs so the rows join to anything else.
- Industrial-decarbonization and CCS sales teams. Filter by NAICS and minimum
tonnage, sort by methane share, and read
co2_captured/rr_mrv_plan_urlto see who already has a capture project.
Example input
Default inventory mode — every GHGRP reporter in a state:
{"states": ["Wyoming"],"startYear": 2022,"endYear": 2023,"minCo2e": 0,"maxResults": 2000}
Large power and refining emitters across three states, with a five-year trend:
{"states": ["Texas", "Louisiana", "Oklahoma"],"startYear": 2019,"endYear": 2023,"includeTrend": true,"naicsPrefix": "2211","minCo2e": 250000,"directEmittersOnly": true,"maxResults": 500}
Proximity mode — one row per site instead of one per facility:
{"states": ["Wyoming", "Colorado"],"startYear": 2022,"endYear": 2023,"assets": [{ "label": "Gillette WY plant", "lat": 44.2862, "lon": -105.3843, "radiusMiles": 25 },{ "label": "Denver CO site", "lat": 39.7392, "lon": -104.9903, "radiusMiles": 30 }]}
Inputs
| Input | Type | Default | What it does |
|---|---|---|---|
states | array | ["Wyoming"] | US states to pull. 2-letter codes or full names. |
startYear | integer | 2022 | Prior/baseline reporting year for the YoY delta. |
endYear | integer | 2023 | Headline reporting year, used for ranking. 2023 is the newest EPA has published; the Actor detects this live on every run. |
naicsPrefix | string | — | Keep only facilities whose NAICS starts with this. 2211 power, 3241 refineries, 325 chemicals, 2111 oil & gas extraction, 3221 pulp & paper, 33441 semiconductors. |
minCo2e | integer | 0 | Minimum latest-year direct CO2e in metric tons. |
directEmittersOnly | boolean | false | Drop supplier-only reporters. |
includeTrend | boolean | false | Fetch every year between startYear and endYear and add the trend fields. Costs one extra national scan per year. |
includeWithheldReporters | boolean | false | Include facilities that are on EPA's books for the year but whose CO2e value it does not publish (97 of Wyoming's 169 RY2023 records). They carry no tonnage, so they are off by default and not billed. |
strictCompleteness | boolean | true | Fail the run when an upstream read comes back short. See below. |
assets | array | — | Switches to proximity mode: {lat, lon, radiusMiles, label}. |
maxResults | integer | 2000 | Cap on emitted rows, largest emitters first. |
How it fails
A wrong emissions number is worse than no number, so this Actor is loud:
- Every query is COUNT-guarded. Before paging any table it asks EPA
.../COUNT/JSONand checks the retrieved row count against the answer. A short read is truncation, not a result — withstrictCompletenesson (the default) the run fails and bills nothing. Turn it off and every row is stampeddata_complete: falsewith the exact shortfall inpartial_reason. - Twelve live drift assertions run on every execution and fail the run if EPA's
tables change shape: both
sector_typeEandSmust still exist, national supplier and injection volumes must still be non-zero (if either collapses to zero the direct total has silently absorbed it), the national direct total must stay inside 1.5-4.0 billion t, the direct facility count inside 5,000-12,000, every column the Actor reads must still be present, and no fact row may carry asector_idmissing frompub_dim_sector. - The dimension tables are not optional. If
pub_dim_sectorcannot be read the run fails rather than guessing which rows are emissions. nullmeans "not reported", never zero. A facility with no direct emissions getsnull, not0. A row EPA files without a published CO2e value is counted inlatest_year_withheld_rowsand never folded in as a zero.- No state, no run. An empty
stateslist fails immediately with an actionable message, before anything is billed.
Output fields
One row per facility in inventory mode.
Identity and location
| Field | Description |
|---|---|
facility_id | EPA GHGRP facility ID. |
facility_name | Facility name as reported. |
facility_role | Direct Emitter, Supplier, CO2 Injection, or a combination — derived from the facility's own fact rows. |
is_direct_emitter / is_supplier / is_co2_injection | Booleans behind facility_role. |
facility_types_reported | EPA's own facility_types string, verbatim. Null on about half of records — which is why facility_role exists. |
state / state_name / city / county / county_fips / zip / address1 | Location. county_fips joins to census, FEMA and county datasets. |
latitude / longitude | WGS84 coordinates. |
naics_code / reported_industry_types | Industry classification. |
frs_id | EPA Facility Registry Service ID — joins to ECHO, RCRA, NPDES and TRI. |
eggrt_facility_id / program_sys_id | EPA system identifiers. |
tribal_land_id | Populated when the facility sits on tribal land (208 of Oklahoma's 493 RY2023 facilities). |
metadata_year / metadata_is_stale | Which reporting year the metadata came from, and whether it is older than the emissions year. |
source_url / flight_url | The raw Envirofacts rows behind this row, and the EPA FLIGHT page to verify it. |
Emissions — latest year
| Field | Description |
|---|---|
latest_year | The reporting year behind the headline figure. |
latest_year_co2e_tonnes | Direct emissions, metric tons CO2e, excluding biogenic CO2. The headline. null for a pure supplier. |
latest_year_direct_co2e_tonnes | The same value, named explicitly so the basis is unambiguous in a spreadsheet. |
latest_year_biogenic_co2_tonnes | Biogenic CO2, held out of the headline exactly as EPA does. 533 US facilities in RY2023. |
latest_year_supplier_co2e_tonnes | Supplier volume — burned downstream by customers, not here. |
latest_year_injected_co2_tonnes | CO2 injected underground (subpart UU). |
latest_year_all_reported_co2e_tonnes | Every numeric row added together regardless of type. Not an emissions figure — kept for continuity. |
latest_year_co2_tonnes | Fossil CO2. |
latest_year_ch4_co2e_tonnes | Methane, as CO2e (AR4 GWP). |
latest_year_n2o_co2e_tonnes | Nitrous oxide, as CO2e. |
latest_year_fluorinated_co2e_tonnes | SF6, HFCs, PFCs, NF3, HFEs, HFC-23 and other fully fluorinated gases combined. 155 US facilities in RY2023; dominant at semiconductor and fluorochemical sites — Samsung Austin Semiconductor is 88.7% fluorinated. |
latest_year_other_gas_co2e_tonnes | Gases EPA classes as "Other". |
latest_year_methane_share_pct | Methane as a percent of direct CO2e. |
gas_breakdown_json | All gas buckets as one JSON object. |
co2e_basis | A one-line statement of exactly what the headline measures, on every row. |
Sectors, subparts and completeness
| Field | Description |
|---|---|
largest_sector_name / largest_sector_co2e_tonnes / largest_sector_share_pct | The GHGRP sector contributing the most direct CO2e. |
sectors_reported | Every direct sector the facility reported under. |
subparts_reported / subparts_reported_count | 40 CFR Part 98 subpart letters, derived from the facility's own fact rows — far more complete than the raw reported_subparts column, which is null on about half of records. |
reported_subparts | EPA's raw subpart string, verbatim. |
latest_year_reported_rows / latest_year_withheld_rows / latest_year_value_withheld | How many upstream rows carried a number, how many did not, and whether the total is therefore a floor. |
cems_used | Y when Continuous Emissions Monitoring was used — a materially higher-confidence figure. |
co2_captured / emitted_co2_supplied / rr_mrv_plan_url | CCS/CCUS markers, including the subpart RR sequestration MRV plan. |
emission_classification_code / reporting_status | EPA classification and filing status. |
Change over time
| Field | Description |
|---|---|
prior_year / prior_year_co2e_tonnes / prior_year_direct_co2e_tonnes | The baseline year, same basis. |
prior_year_biogenic_co2_tonnes / prior_year_supplier_co2e_tonnes / prior_year_all_reported_co2e_tonnes | Baseline components. |
yoy_delta_co2e / yoy_pct | Change in direct CO2e from prior to latest year. null when the facility did not report both years. |
trend_years_json / trend_years_count / trend_first_year / trend_first_year_co2e_tonnes / trend_change_pct / trend_cagr_pct | Multi-year series and growth rate. Populated when includeTrend is true. |
Ownership, rank and context
| Field | Description |
|---|---|
parent_company | EPA's raw parent string, verbatim. |
parent_company_primary / parent_company_primary_pct / parent_company_count / parent_companies_json | Parsed owners with ownership percentages, largest first. |
top_emitter_rank | Rank by direct CO2e within the run. null for a facility with no direct emissions. |
state_rank / state_rank_of / state_share_pct | Rank and share within the facility's own state. |
national_share_pct / national_direct_co2e_tonnes / national_direct_facilities | Share of all US direct GHGRP emissions, and the national denominators — which match EPA's published figures exactly. |
Run status (on every row)
| Field | Description |
|---|---|
facility_source_status / emissions_source_status / dimension_source_status | ok, partial or unavailable per upstream table. |
data_complete / partial_reason | Whether every read returned its full advertised row count, and if not, exactly what fell short. |
reporting_year_latest_available / reporting_year_is_latest | The newest published GHGRP year, detected live, and whether you asked for it. |
checked_at / disclaimer | Run timestamp and provenance note. |
Proximity mode
One row per asset instead of one per facility.
| Field | Description |
|---|---|
asset_label / asset_lat / asset_lon / radius_miles | Echo of your input. |
emitters_within_radius / direct_emitters_within_radius | Facilities inside the radius, and how many actually emit. |
total_nearby_co2e_tonnes / total_nearby_direct_co2e_tonnes | Combined direct CO2e inside the radius. null when nothing inside reported any. |
total_nearby_biogenic_co2_tonnes / total_nearby_supplier_co2e_tonnes | The components kept out of that total. |
nearest_facility_id / nearest_facility_name / nearest_distance_miles / nearest_co2e_tonnes / nearest_direct_co2e_tonnes / nearest_facility_role / nearest_parent_company / nearest_naics_code | The closest facility. |
largest_nearby_facility_id / largest_nearby_facility_name / largest_nearby_co2e_tonnes / largest_nearby_distance_miles | The biggest emitter inside the radius, which is usually not the closest. |
nearby_facilities_json | Up to 25 nearby facilities with distance and tonnage. |
states_searched | The states actually screened. Emitters outside them are not counted, so list a neighbouring state for a site near a border. |
emitters_screened / nearby_without_coordinates | How many candidates were distance-tested, and how many had no published coordinates. |
error | Populated when a single asset could not be screened. One bad asset never fails the run. |
Use as an MCP tool
This Actor is available to AI agents through mcp.apify.com.
Every input and output field carries a description, so an agent can call it directly to
answer questions like "what are the ten largest methane emitters in New Mexico" or "how
much CO2 is emitted within 20 miles of this address" without any glue code.
co2e_basis ships on every row so an agent cannot misread the number.
Pricing
Pay per result: $8.00 per 1,000 rows ($0.008 per row), with graduated discounts on
paid Apify plans down to $0.0024 per row on Diamond. One row per facility in inventory
mode, one row per asset in proximity mode. minCo2e, naicsPrefix,
directEmittersOnly and maxResults all let you pay only for the rows you want.
Data source and limits
EPA Envirofacts GHGRP: pub_dim_facility, pub_facts_sector_ghg_emission,
pub_dim_sector, pub_dim_ghg, pub_dim_subsector. Keyless and public.
- GHGRP covers large direct emitters, generally above 25,000 t CO2e/yr. It is not a complete national inventory; it captures roughly half of US emissions directly, and 85-90% once supplier reporting is included.
- All values are self-reported to EPA and use AR4 global warming potentials.
- Reporting year 2023 is the newest EPA has published. The Actor detects the newest available year live and stamps it on every row.
- Facility metadata comes from the newest facility record at or below
endYear;metadata_is_staleflags the cases where that is older than the emissions year.
FAQ
Why is a facility's number lower than what I read elsewhere?
Almost certainly because the other source added supplier volume or biogenic CO2 into
the total. Compare latest_year_all_reported_co2e_tonnes — that is the all-in sum —
and open flight_url to check the split against EPA's own viewer.
Why does a facility have null emissions and no rank?
It reports to GHGRP only as a supplier or a CO2 injection site, so it has no direct
emissions to rank. null means "not reported", never zero.
Can I get 2024 data? Not yet — EPA has not published it. Ask for it and the run tells you which year is the newest available rather than quietly returning nothing.
Why did my run fail instead of returning fewer rows?
strictCompleteness is on by default: if EPA returned fewer rows than it said the
query had, every emissions total would be understated by an unknown amount. That is a
wrong answer, not a small answer, so the run fails and nothing is billed.
Does proximity mode search the whole country?
No — it screens the facilities in the states you list, and states_searched says so
on every row. For a site near a state line, list the neighbouring state too.
Related Actors
- EPA Nonattainment Air Permit Screener — NAAQS nonattainment status for a site, the other half of an air-permitting screen.
- EPA RCRA Hazardous Waste Generator Rollup — the same facilities' hazardous-waste profile.
- EPA Contaminated Site Screener — Superfund, RCRA, tanks and spills near a site.
- Site Due Diligence Bundle — twenty environmental layers for one coordinate in a single call.