EPA GHGRP Emitter Screener — Facility CO2e, Gases & Trend avatar

EPA GHGRP Emitter Screener — Facility CO2e, Gases & Trend

Pricing

from $4.40 / 1,000 results

Go to Apify Store
EPA GHGRP Emitter Screener — Facility CO2e, Gases & Trend

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

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

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_typeWhat it isRY2023 national total
EDirect emissions — the facility's own stack2,578,282,291 t CO2e (excl. biogenic)
SSupplier volume — CO2e that will be emitted downstream by whoever buys the fuel or industrial gas this facility sold4,650,647,215 t CO2e
ICO2 injected underground (subpart UU) — received and sequestered, not emitted16,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: null and top_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_url to 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

InputTypeDefaultWhat it does
statesarray["Wyoming"]US states to pull. 2-letter codes or full names.
startYearinteger2022Prior/baseline reporting year for the YoY delta.
endYearinteger2023Headline reporting year, used for ranking. 2023 is the newest EPA has published; the Actor detects this live on every run.
naicsPrefixstringKeep only facilities whose NAICS starts with this. 2211 power, 3241 refineries, 325 chemicals, 2111 oil & gas extraction, 3221 pulp & paper, 33441 semiconductors.
minCo2einteger0Minimum latest-year direct CO2e in metric tons.
directEmittersOnlybooleanfalseDrop supplier-only reporters.
includeTrendbooleanfalseFetch every year between startYear and endYear and add the trend fields. Costs one extra national scan per year.
includeWithheldReportersbooleanfalseInclude 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.
strictCompletenessbooleantrueFail the run when an upstream read comes back short. See below.
assetsarraySwitches to proximity mode: {lat, lon, radiusMiles, label}.
maxResultsinteger2000Cap 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/JSON and checks the retrieved row count against the answer. A short read is truncation, not a result — with strictCompleteness on (the default) the run fails and bills nothing. Turn it off and every row is stamped data_complete: false with the exact shortfall in partial_reason.
  • Twelve live drift assertions run on every execution and fail the run if EPA's tables change shape: both sector_type E and S must 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 a sector_id missing from pub_dim_sector.
  • The dimension tables are not optional. If pub_dim_sector cannot be read the run fails rather than guessing which rows are emissions.
  • null means "not reported", never zero. A facility with no direct emissions gets null, not 0. A row EPA files without a published CO2e value is counted in latest_year_withheld_rows and never folded in as a zero.
  • No state, no run. An empty states list fails immediately with an actionable message, before anything is billed.

Output fields

One row per facility in inventory mode.

Identity and location

FieldDescription
facility_idEPA GHGRP facility ID.
facility_nameFacility name as reported.
facility_roleDirect Emitter, Supplier, CO2 Injection, or a combination — derived from the facility's own fact rows.
is_direct_emitter / is_supplier / is_co2_injectionBooleans behind facility_role.
facility_types_reportedEPA'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 / address1Location. county_fips joins to census, FEMA and county datasets.
latitude / longitudeWGS84 coordinates.
naics_code / reported_industry_typesIndustry classification.
frs_idEPA Facility Registry Service ID — joins to ECHO, RCRA, NPDES and TRI.
eggrt_facility_id / program_sys_idEPA system identifiers.
tribal_land_idPopulated when the facility sits on tribal land (208 of Oklahoma's 493 RY2023 facilities).
metadata_year / metadata_is_staleWhich reporting year the metadata came from, and whether it is older than the emissions year.
source_url / flight_urlThe raw Envirofacts rows behind this row, and the EPA FLIGHT page to verify it.

Emissions — latest year

FieldDescription
latest_yearThe reporting year behind the headline figure.
latest_year_co2e_tonnesDirect emissions, metric tons CO2e, excluding biogenic CO2. The headline. null for a pure supplier.
latest_year_direct_co2e_tonnesThe same value, named explicitly so the basis is unambiguous in a spreadsheet.
latest_year_biogenic_co2_tonnesBiogenic CO2, held out of the headline exactly as EPA does. 533 US facilities in RY2023.
latest_year_supplier_co2e_tonnesSupplier volume — burned downstream by customers, not here.
latest_year_injected_co2_tonnesCO2 injected underground (subpart UU).
latest_year_all_reported_co2e_tonnesEvery numeric row added together regardless of type. Not an emissions figure — kept for continuity.
latest_year_co2_tonnesFossil CO2.
latest_year_ch4_co2e_tonnesMethane, as CO2e (AR4 GWP).
latest_year_n2o_co2e_tonnesNitrous oxide, as CO2e.
latest_year_fluorinated_co2e_tonnesSF6, 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_tonnesGases EPA classes as "Other".
latest_year_methane_share_pctMethane as a percent of direct CO2e.
gas_breakdown_jsonAll gas buckets as one JSON object.
co2e_basisA one-line statement of exactly what the headline measures, on every row.

Sectors, subparts and completeness

FieldDescription
largest_sector_name / largest_sector_co2e_tonnes / largest_sector_share_pctThe GHGRP sector contributing the most direct CO2e.
sectors_reportedEvery direct sector the facility reported under.
subparts_reported / subparts_reported_count40 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_subpartsEPA's raw subpart string, verbatim.
latest_year_reported_rows / latest_year_withheld_rows / latest_year_value_withheldHow many upstream rows carried a number, how many did not, and whether the total is therefore a floor.
cems_usedY when Continuous Emissions Monitoring was used — a materially higher-confidence figure.
co2_captured / emitted_co2_supplied / rr_mrv_plan_urlCCS/CCUS markers, including the subpart RR sequestration MRV plan.
emission_classification_code / reporting_statusEPA classification and filing status.

Change over time

FieldDescription
prior_year / prior_year_co2e_tonnes / prior_year_direct_co2e_tonnesThe baseline year, same basis.
prior_year_biogenic_co2_tonnes / prior_year_supplier_co2e_tonnes / prior_year_all_reported_co2e_tonnesBaseline components.
yoy_delta_co2e / yoy_pctChange 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_pctMulti-year series and growth rate. Populated when includeTrend is true.

Ownership, rank and context

FieldDescription
parent_companyEPA's raw parent string, verbatim.
parent_company_primary / parent_company_primary_pct / parent_company_count / parent_companies_jsonParsed owners with ownership percentages, largest first.
top_emitter_rankRank by direct CO2e within the run. null for a facility with no direct emissions.
state_rank / state_rank_of / state_share_pctRank and share within the facility's own state.
national_share_pct / national_direct_co2e_tonnes / national_direct_facilitiesShare of all US direct GHGRP emissions, and the national denominators — which match EPA's published figures exactly.

Run status (on every row)

FieldDescription
facility_source_status / emissions_source_status / dimension_source_statusok, partial or unavailable per upstream table.
data_complete / partial_reasonWhether every read returned its full advertised row count, and if not, exactly what fell short.
reporting_year_latest_available / reporting_year_is_latestThe newest published GHGRP year, detected live, and whether you asked for it.
checked_at / disclaimerRun timestamp and provenance note.

Proximity mode

One row per asset instead of one per facility.

FieldDescription
asset_label / asset_lat / asset_lon / radius_milesEcho of your input.
emitters_within_radius / direct_emitters_within_radiusFacilities inside the radius, and how many actually emit.
total_nearby_co2e_tonnes / total_nearby_direct_co2e_tonnesCombined direct CO2e inside the radius. null when nothing inside reported any.
total_nearby_biogenic_co2_tonnes / total_nearby_supplier_co2e_tonnesThe 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_codeThe closest facility.
largest_nearby_facility_id / largest_nearby_facility_name / largest_nearby_co2e_tonnes / largest_nearby_distance_milesThe biggest emitter inside the radius, which is usually not the closest.
nearby_facilities_jsonUp to 25 nearby facilities with distance and tonnage.
states_searchedThe states actually screened. Emitters outside them are not counted, so list a neighbouring state for a site near a border.
emitters_screened / nearby_without_coordinatesHow many candidates were distance-tested, and how many had no published coordinates.
errorPopulated 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_stale flags 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.

  • 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.