# EPA Toxic Release Inventory Scraper — TRI Chemical Emissions (`copious_atoll/epa-toxic-releases`) Actor

Extract EPA Toxic Release Inventory (TRI) data. Search industrial facilities and chemical emissions by state, county, zip code. Get pollutant quantities and facility details. Free EPA API, no proxy.

- **URL**: https://apify.com/copious\_atoll/epa-toxic-releases.md
- **Developed by:** [Grim R](https://apify.com/copious_atoll) (community)
- **Categories:** E-commerce
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Toxic Release Inventory Scraper

Extract Toxic Release Inventory (TRI) data from the EPA Envirofacts database. Search industrial facilities reporting chemical emissions and get detailed release quantities by state, county, and zip code. The TRI program tracks over 650 toxic chemicals released by more than 20,000 industrial facilities across the United States. Powered by the free EPA API — no proxy or authentication needed.

> **Disclaimer:** This actor is unofficial and is not affiliated with, sponsored by, or endorsed by the United States Environmental Protection Agency (EPA).

### What EPA TRI data can you extract?

This actor wraps the free EPA Envirofacts REST API to extract two types of Toxic Release Inventory data:

#### Facility data

Information about industrial facilities that report to the TRI program, including facility name, address, city, county, state, zip code, EPA region, and whether the facility is currently active or closed.

#### Chemical release data

Detailed chemical release quantities reported by TRI facilities, including chemical name, CAS number, reporting year, total release amounts, and breakdown by release pathway (fugitive air, stack air, water, underground injection, landfills).

### Input parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| Search Mode | select | `facilities` for TRI-reporting facilities or `releases` for chemical release data |
| State | string | US state abbreviation (CA, TX, NY, OH, etc.) |
| Zip Code | string | Optional zip code to narrow results within the state |
| Max Results | integer | Maximum records to return (1–5,000, default 50) |

### Output example

Each facility record contains:

```json
{
    "facilityId": "90001BCNCX935E5",
    "facilityName": "NEWARK CUSTOM PAPERBOARD",
    "streetAddress": "935 E 59TH ST",
    "city": "LOS ANGELES",
    "county": "LOS ANGELES",
    "state": "CA",
    "zipCode": "900011007",
    "region": "9",
    "isClosed": true,
    "federalFacility": "C",
    "source": "EPA Toxic Release Inventory",
    "sourceUrl": "https://www.epa.gov/toxics-release-inventory-tri-program"
}
```

### How much does it cost to scrape EPA TRI data?

This actor uses **pay-per-event pricing**. You pay per facility or release record returned.

- **$0.00005 per actor start** (Apify default)
- **Per-result charge** based on the number of records extracted
- **No proxy costs** — the EPA Envirofacts API is free and public

A typical state-level facility search returns 500-3,000 records. Use zip code filters to narrow results.

**Tip:** Start with a specific zip code to preview the data, then expand to full state searches as needed.

### Who uses EPA TRI data?

- **Environmental consultants** — assess contamination risk for site remediation and compliance audits
- **Real estate due diligence firms** — identify nearby polluters for Phase I environmental assessments
- **ESG investors** — screen companies and facilities for environmental risk in investment portfolios
- **Investigative journalists** — report on industrial pollution, environmental justice, and corporate accountability
- **Community activists** — monitor local industrial emissions and advocate for environmental protections
- **Compliance officers** — track competitor reporting, benchmark emissions, and verify regulatory submissions

### Tips for best results

- **State is required** — the EPA API needs at least a state filter. Use the two-letter abbreviation (CA, not California).
- **Facility mode vs release mode**: Start with facilities to identify what's in an area, then switch to releases for detailed chemical data.
- **Zip codes** in the EPA database may include the +4 extension (e.g., "900011007" instead of "90001").
- **The TRI program** only covers facilities that meet reporting thresholds — small emitters may not appear.
- **Release quantities** are self-reported by facilities to the EPA annually.

### Integrations

Export your data as JSON, CSV, or Excel. Schedule annual runs after new TRI data is published (typically July each year). Use webhooks to alert when new facility data is available.

This actor works as an **MCP server** — AI agents can discover and use it to access EPA toxic release data programmatically.

# Actor input Schema

## `searchMode` (type: `string`):

Choose what to search: 'facilities' for TRI-reporting industrial facilities or 'releases' for chemical release data.

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

US state abbreviation to filter by (e.g., CA, TX, NY, OH). Required.

## `zipCode` (type: `string`):

Optional zip code to narrow results within the selected state.

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

Maximum number of records to return.

## Actor input object example

```json
{
  "searchMode": "facilities",
  "state": "CA",
  "maxResults": 50
}
```

# 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 = {
    "searchMode": "facilities",
    "state": "CA",
    "maxResults": 50
};

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

# Run the Actor and wait for it to finish
run = client.actor("copious_atoll/epa-toxic-releases").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 '{
  "searchMode": "facilities",
  "state": "CA",
  "maxResults": 50
}' |
apify call copious_atoll/epa-toxic-releases --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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