# 🏭 EPA TRI Toxic Release Inventory Facilities (`nexgendata/epa-tri-toxic-release-facilities`) Actor

EPA Toxics Release Inventory (TRI) reporting facilities by state and city: facility name, address, county, FIPS, EPA region. For ESG, environmental compliance, and community researchers.

- **URL**: https://apify.com/nexgendata/epa-tri-toxic-release-facilities.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Business
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 weather forecast per coordinates

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🏭 EPA TRI Toxic Release Inventory Facilities

**Pay-per-result EPA Toxics Release Inventory facility data — $0.10 per facility. No Enhesa subscription, no IHS Markit EHS contract, no per-seat compliance-database licence. The official TRI reporting-facility roster, delivered as flat JSON, queryable by state and city.**

The EPA Toxics Release Inventory (TRI) is the federal program that tracks industrial facilities handling toxic chemicals — manufacturers, chemical plants, metal-finishers, power generators, and other reporters covered under EPCRA Section 313. The TRI facility roster is the foundational layer of US environmental-compliance and ESG intelligence: it tells you *which facilities, in which communities, are on the federal toxic-release radar*. For ESG analysts, environmental-compliance teams, community and environmental-justice researchers, and site-selection diligence, knowing every TRI-reporting facility in a given state or city is step one.

This actor returns a clean record per facility: the facility name, its city, county, state, ZIP, and EPA region. Filter by two-letter state code, optionally narrow to a single city, and pull the full roster of TRI-reporting facilities that match — as structured JSON you can drop straight into a map, an ESG model, or a compliance database.

### Why use this

Commercial environmental-compliance platforms like Enhesa and IHS Markit (now part of S&P Global) bundle TRI-style data into broad EHS subscriptions that run into five figures a year and lock the data behind a seat-based portal you cannot pipe into your own models. The EPA's own TRI tooling is free and authoritative, but it is built for interactive browsing and bulk-file downloads, not for a clean "give me every TRI facility in Harris County, Texas as JSON" API call. Pulling it yourself means handling the EPA's data-services endpoints, paginating, and normalizing the facility records.

This actor is the practical middle: official EPA TRI facility data, normalized to a flat, ETL-ready record, filtered to exactly the state (and optional city) you care about, for cents per facility. Because billing is pay-per-result, a query scoped to one city returns and bills only those facilities — not a whole-country bulk file you then have to filter. No subscription, no seat, no minimum.

### What you get

Every record represents one TRI-reporting facility and carries exactly these fields:

- `facilityName` — the facility name as registered in the TRI program
- `city` — the facility's city
- `county` — the facility's county
- `state` — the two-letter state code
- `zip` — the facility's ZIP code
- `epaRegion` — the EPA region the facility falls under (1–10)

Records are flat JSON, ready for a GIS layer, Snowflake, BigQuery, Postgres, a pandas DataFrame, or an ESG / compliance database without remapping.

### Use cases

- **ESG facility-footprint mapping** — Pull every TRI-reporting facility in the states where a portfolio company or counterparty operates, and quantify its exposure to federal toxic-release reporting at the facility level. The `county` + `city` fields let you roll exposure up to community and county granularity.
- **Environmental-justice & community research** — Researchers and advocacy organizations can enumerate the TRI facilities in a specific community, county, or EPA region to study the geographic concentration of toxic-release reporters relative to demographic data.
- **Site-selection & real-estate diligence** — Before acquiring or developing a site, pull the TRI facility roster for the target city to understand the surrounding industrial-emissions landscape and any nearby reporting facilities.
- **Compliance-team facility inventory** — EHS teams can reconcile their own facility list against the official TRI roster for a state, catching facilities that should be (or unexpectedly are) on the federal reporting radar.
- **EPA-region benchmarking** — Aggregate facility counts by `epaRegion` to benchmark industrial-emissions reporting density across the ten EPA regions for policy and research work.
- **Supply-chain ESG screening** — Screen a supplier's operating cities against the TRI roster to flag suppliers co-located with toxic-release reporters as part of supply-chain ESG due diligence.
- **Lead generation for environmental services** — Environmental-consulting, remediation, and compliance-software vendors can build a prospect list of TRI-reporting facilities by state and city.

### Sample output

```json
{
  "facilityName": "EXAMPLE CHEMICAL PROCESSING LLC",
  "city": "HOUSTON",
  "county": "HARRIS",
  "state": "TX",
  "zip": "77015",
  "epaRegion": "6"
}
````

A facility in a different region:

```json
{
  "facilityName": "EXAMPLE METAL FINISHING CO",
  "city": "CLEVELAND",
  "county": "CUYAHOGA",
  "state": "OH",
  "zip": "44115",
  "epaRegion": "5"
}
```

### Input parameters

| Parameter | Type | Description |
|---|---|---|
| `state` | string | Two-letter state code to filter facilities (e.g. `CA`, `TX`, `OH`). |
| `city` | string | Optional city-name filter to narrow within the state. |
| `maxResults` | integer | Maximum number of facilities to return. Bounds result size and cost. |

### How to use

#### Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("nexgendata/epa-tri-toxic-release-facilities").call(run_input={
    "state": "TX",
    "city": "HOUSTON",
    "maxResults": 500,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["facilityName"], item["city"], item["county"], item["epaRegion"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/nexgendata~epa-tri-toxic-release-facilities/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "TX",
    "city": "HOUSTON",
    "maxResults": 500
  }'
```

Schedule it on Apify's built-in scheduler to refresh your facility roster periodically, and use webhooks to push new facilities into your ESG warehouse or GIS pipeline automatically.

### Pricing

This actor runs on Apify's **pay-per-event** model — you pay only for results:

- **$0.10 per facility record** — the primary event, charged once per facility pushed to the dataset
- **No subscription, no seat licence, no minimum commitment**

#### Cost worked example

- Every TRI facility in a single city (say 40 facilities) → 40 × $0.10 = **$4.00**
- A full-state roster of 600 facilities → 600 × $0.10 = **$60.00**
- A small-city scan returning 8 facilities → **$0.80**

You set `state`, optional `city`, and `maxResults`, so you control cost before the run. Browse 200+ buyer-intent actors at https://apify.com/nexgendata?fpr=2ayu9b

### How this compares to Enhesa / IHS Markit

| Platform | TRI coverage | Annual cost | Programmatic export |
|---|---|---|---|
| Enhesa EHS Intelligence | Global EHS regulatory + facility data | Five-figure enterprise subscription | Portal-based, seat-locked |
| IHS Markit / S\&P Global EHS | Broad EHS / environmental datasets | Enterprise contract | API, enterprise-priced |
| EPA TRI tools (DIY) | Complete official TRI data | Free | Bulk files / interactive search, not a clean per-query JSON API |
| **EPA TRI Facilities (this actor)** | **Official TRI reporting facilities by state / city** | **$0.10 per facility, no subscription** | **Apify REST API + webhooks; flat JSON, state/city filtered** |

Enhesa and IHS Markit bundle TRI-style data into broad EHS platforms priced for enterprise compliance departments — powerful, but overkill (and over-priced) if all you need is the official TRI facility roster for a state or city, in JSON, in your own pipeline. This actor delivers exactly that official EPA data, normalized and scoped, for cents per facility, with no seat to license.

### FAQ

**Q: Where does the data come from?**

A: The actor reads the official EPA Toxics Release Inventory facility data. The fields returned — facility name, city, county, state, ZIP, EPA region — come from the EPA's TRI program records.

**Q: Does this include the actual chemical-release quantities?**

A: This actor returns the facility roster — which facilities are TRI reporters and where they are located. It does not return per-chemical release tonnage; the fields are `facilityName`, `city`, `county`, `state`, `zip`, and `epaRegion`. Use it to enumerate and locate facilities, then pull release detail from EPA's release-data products downstream if needed.

**Q: Can I pull the whole country at once?**

A: The actor filters by `state` (with an optional `city`). To cover the country, run it once per state and concatenate the results — each run bills only for the facilities it returns.

**Q: What is an EPA region?**

A: The EPA divides the US into ten regions, each covering a group of states. The `epaRegion` field (1–10) tells you which regional EPA office oversees the facility — useful for benchmarking and for routing compliance inquiries.

**Q: How current is the facility list?**

A: The actor reads the current EPA TRI facility data at run time. The TRI program is updated by the EPA on its own reporting cycle; schedule a periodic run to keep your roster in sync.

### Schema stability & versioning

This actor follows NexGenData's **additive-only schema** contract:

- New fields may be **added** at any time — they appear as new keys defaulting to `null` for older runs.
- Existing fields (`facilityName`, `city`, `county`, `state`, `zip`, `epaRegion`) are **never renamed or removed** without a major-version bump and an advance changelog notice.
- Field semantics are **never silently changed**.

Build your ESG / compliance ETL on this schema with confidence. Report anything unexpected via the actor's Apify Issues tab.

### Compliance & legal

- The actor reads **public** EPA Toxics Release Inventory facility data — federal environmental data published for public use.
- All requests route through Apify's compliant infrastructure with polite pacing.
- This actor is a **data tool, not legal or environmental-compliance advice**. Facility presence on the TRI roster reflects federal reporting obligations, not a finding of wrongdoing; verify specifics against official EPA records before acting.
- You are responsible for downstream-use compliance with applicable data-protection and environmental regulations.

### Related NexGenData actors

Part of NexGenData's **Environmental / ESG** suite — pair this actor with:

- [EPA ECHO Enforcement Scraper](https://apify.com/nexgendata/epa-echo-enforcement-scraper?fpr=2ayu9b) — EPA enforcement and compliance-history records by facility
- [OpenFEMA NFIP Flood Claims](https://apify.com/nexgendata/openfema-nfip-flood-claims?fpr=2ayu9b) — federal flood-insurance claims data for climate / physical-risk analysis
- [Environmental & ESG MCP](https://apify.com/nexgendata/environmental-esg-mcp?fpr=2ayu9b) — model-context-protocol bridge to pull ESG datasets from Claude, Cursor, and any MCP client
- [Labor & Compliance MCP](https://apify.com/nexgendata/labor-compliance-mcp?fpr=2ayu9b) — ERISA, H-1B, CFPB, and HMDA compliance data for AI agents
- [SEC Conflict Minerals Tracker](https://apify.com/nexgendata/sec-conflict-minerals-tracker?fpr=2ayu9b) — Form SD conflict-minerals disclosures, a related ESG-supply-chain feed
- [FDIC Bank Financials & Health](https://apify.com/nexgendata/fdic-bank-financials-health?fpr=2ayu9b) — bank financial-condition data for institutional ESG screening

Explore the full catalog of 200+ buyer-intent actors at **https://apify.com/nexgendata?fpr=2ayu9b**.

# Actor input Schema

## `state` (type: `string`):

Two-letter state code (e.g. CA, TX).

## `city` (type: `string`):

Optional city name filter.

## `maxResults` (type: `integer`):

Maximum facilities to return.

## Actor input object example

```json
{
  "state": "CA",
  "maxResults": 1000
}
```

# 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 = {
    "state": "CA"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/epa-tri-toxic-release-facilities").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 = { "state": "CA" }

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/epa-tri-toxic-release-facilities").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "state": "CA"
}' |
apify call nexgendata/epa-tri-toxic-release-facilities --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/epa-tri-toxic-release-facilities",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🏭 EPA TRI Toxic Release Inventory Facilities",
        "description": "EPA Toxics Release Inventory (TRI) reporting facilities by state and city: facility name, address, county, FIPS, EPA region. For ESG, environmental compliance, and community researchers.",
        "version": "0.0",
        "x-build-id": "50oQc0EbbUi4cv6o1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~epa-tri-toxic-release-facilities/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-epa-tri-toxic-release-facilities",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nexgendata~epa-tri-toxic-release-facilities/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-epa-tri-toxic-release-facilities",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nexgendata~epa-tri-toxic-release-facilities/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-epa-tri-toxic-release-facilities",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "state": {
                        "title": "State",
                        "type": "string",
                        "description": "Two-letter state code (e.g. CA, TX)."
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "Optional city name filter."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Maximum facilities to return.",
                        "default": 1000
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
