# EPA TRI Scraper - Toxic Release Inventory API (`pink_comic/epa-tri-toxic-release-search`) Actor

Search EPA Toxic Release Inventory (TRI) facility and chemical release records. Find toxic emissions by state, ZIP, facility, or chemical for ESG research, environmental due diligence, compliance monitoring, and risk screening. No API key required. Pay per result.

- **URL**: https://apify.com/pink\_comic/epa-tri-toxic-release-search.md
- **Developed by:** [Ava Torres](https://apify.com/pink_comic) (community)
- **Categories:** Automation, Developer tools, AI
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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 TRI Scraper - Toxic Release Inventory API

Search the EPA Toxic Release Inventory (TRI) for chemical pollution data reported by industrial facilities. Find facilities by state, ZIP code, facility name, or chemical. Get air emissions, water discharges, land disposal, underground injection, and off-site chemical transfers — with parent company names, EPA registry IDs, and open/closed status. Covers 25,000+ reporting facilities, 650+ chemicals, and data back to 1987.

Data is sourced from the official EPA Envirofacts public API. No API key is required.

> **Evidence boundary:** TRI contains facility-reported annual release and waste-management data subject to reporting thresholds, EPA processing, and later revisions. A TRI record or quantity is not proof of a violation, current exposure, causation, site safety, or regulatory compliance. Review the linked EPA record and relevant program context.

***

### Output Fields

| Field | Type | Description |
|---|---|---|
| `outcome` | string | `FOUND`, `NO_MATCH`, `INVALID_INPUT`, or `SOURCE_UNAVAILABLE` |
| `facilityId` | string | EPA TRI Facility ID |
| `facilityName` | string | Facility name |
| `city` | string | City |
| `state` | string | State code |
| `zipCode` | string | ZIP code |
| `parentCompany` | string | Parent company name |
| `closed` | boolean | Whether the facility is currently closed |
| `releases` | array | Chemical release reports for the facility (stable empty array when none are available) |
| `enrichmentStatus` | string | `COMPLETE`, `PARTIAL`, `NOT_REQUESTED`, or `NOT_APPLICABLE` |
| `warnings` | array | Explicit source or enrichment limitations for the item |
| `sourceUrl` | string | Official EPA Envirofacts record or service URL |
| `retrievedAt` | string | UTC retrieval timestamp |
| `resultLimit` | integer | Applied total facility-item cap |
| `searchScope` | string | Criteria used for the bounded query |
| `evidenceNotice` | string | Required source and interpretation limits |

Each item in `releases` includes chemical name, reporting year, and quantities released to air (fugitive and stack), water, underground injection, and land, plus off-site transfer amounts.

***

### Use Cases

- **ESG research and sustainability reporting** — Identify facilities emitting specific chemicals, quantify release volumes, and assess environmental risk by geography or parent company.
- **Environmental due diligence** — Screen industrial sites or neighboring parcels before real estate acquisition, lending, or investment.
- **Regulatory and legal research** — Pull historical release records for a facility or chemical as part of litigation support or regulatory compliance review.
- **Investigative journalism** — Identify the largest polluters in a state or ZIP code, track trends over time, or expose parent companies behind facility operations.
- **Community and public health analysis** — Assess chemical exposures in a specific ZIP code or county and identify facility clusters near residential areas.
- **Supply chain sustainability auditing** — Verify whether suppliers are among TRI reporters and assess the scale and type of their chemical releases.

***

### How to Use

Choose a search type and provide the required input. Use the `year` field to target a specific reporting year, or set it to `0` for all available years.

**Fast first-run example — one TRI-reporting facility in Texas (2024):**

```json
{
  "searchType": "state",
  "state": "TX",
  "year": 2024,
  "maxResults": 1
}
```

This default returns at most one paid facility item (up to **$0.0021** at current pricing, including the start event). Each facility item can contain multiple nested chemical release reports. Increase `maxResults` for broader research.

**Example input — search for Shell Oil facilities:**

```json
{
  "searchType": "facility",
  "query": "SHELL OIL",
  "state": "",
  "year": 2022,
  "maxResults": 25
}
```

**Example input — facilities reporting benzene releases:**

```json
{
  "searchType": "chemical",
  "query": "Benzene",
  "state": "",
  "year": 2022,
  "maxResults": 25
}
```

**Example input — facilities in a specific ZIP code:**

```json
{
  "searchType": "zip",
  "zipCode": "77001",
  "year": 2022,
  "maxResults": 25
}
```

#### Search Types

| Value | Description |
|---|---|
| `facility` | Search by the EPA facility name value; similar-name matching is not guaranteed |
| `state` | All TRI-reporting facilities in a state |
| `zip` | Facilities within a specific ZIP code |
| `chemical` | Facilities reporting releases of a specific chemical |

***

### Cost

Current pricing is **$0.0001 per start** plus **$0.002 per facility item**. The one-item default costs up to **$0.0021**. Source latency and the number of nested chemical forms vary by facility; broad searches can take longer.

***

### Output Formats

Results are available as **JSON**, **CSV**, and **Excel** from the Apify dataset interface. The `releases` array in JSON contains the full chemical-level detail for each facility.

***

### FAQ

**Does this require an EPA API key?**
No. The EPA Envirofacts API is public and requires no authentication.

**How far back does TRI data go?**
TRI reporting began in 1987. Set `year` to any year from 1987 onward, or set it to `0` to retrieve all available years for a facility.

**What chemicals are covered?**
The TRI program covers 650+ chemicals and chemical categories that meet EPA toxicity thresholds. This includes common industrial chemicals such as ammonia, benzene, lead, mercury, sulfuric acid, and many others.

**What industries are required to report?**
Manufacturing, mining, electric utilities, hazardous waste treatment, and certain other industries with 10+ employees that use TRI chemicals above reporting thresholds must file annual TRI reports.

**What is the difference between air, water, and land releases?**
The TRI categorizes releases by environmental medium: fugitive air emissions (uncontrolled), stack air emissions (through a smokestack), surface water discharges, underground injection, on-site land disposal, and off-site transfers to treatment or disposal facilities.

# Actor input Schema

## `searchType` (type: `string`):

How to search for toxic release data.

## `query` (type: `string`):

Facility name (for facility search) or chemical name (for chemical search). Examples: "SHELL OIL", "DUPONT", "Ammonia", "Benzene".

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

Two-letter state code (e.g. "TX", "CA", "OH"). Required for state search, optional filter for other searches.

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

5-digit ZIP code for ZIP search (e.g. "77001", "90210").

## `year` (type: `integer`):

Filter by reporting year (e.g. 2022). Set to 0 for all years. TRI data goes back to 1987.

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

Maximum number of facilities to return. Each facility is one paid dataset item and may contain multiple nested chemical release reports. The default returns 1 item (up to $0.0021 including the start event).

## Actor input object example

```json
{
  "searchType": "state",
  "query": "",
  "state": "TX",
  "zipCode": "",
  "year": 2024,
  "maxResults": 1
}
```

# 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 = {
    "searchType": "state",
    "query": "",
    "state": "TX",
    "year": 2024,
    "maxResults": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("pink_comic/epa-tri-toxic-release-search").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 = {
    "searchType": "state",
    "query": "",
    "state": "TX",
    "year": 2024,
    "maxResults": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("pink_comic/epa-tri-toxic-release-search").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 '{
  "searchType": "state",
  "query": "",
  "state": "TX",
  "year": 2024,
  "maxResults": 1
}' |
apify call pink_comic/epa-tri-toxic-release-search --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/byN4J2LK0rlNRaQgQ/builds/0seZd7zsQXxQiy8gU/openapi.json
