A free, CORS-enabled JSON API for querying EPA Superfund, Toxic Release Inventory, and ECHO enforcement data. No API key required. Built for researchers, data journalists, mapping projects, and anyone who needs programmatic access to federal pollution data.
GET /api/nearby?lat=29.76&lng=-95.37&radius=25
Returns Superfund sites and EPA-regulated facilities (violators and releasers) within a radius of a coordinate. Maximum radius 200 miles, maximum 200 results.
Example: /api/nearby?lat=29.76&lng=-95.37&radius=25
GET /api/facilities?state=TX&kind=tri&violator_only=1&limit=100
| Parameter | Description | Example |
|---|---|---|
state | Two-letter state code or state slug (required) | TX, texas |
kind | Facility type filter | tri, air, water, rcra |
violator_only | Return only significant violators | 1 |
limit | Max rows (1–1000, default 100) | 500 |
Example: /api/facilities?state=TX&violator_only=1&limit=50
GET /api/superfund?state=NJ&limit=200
Returns all Superfund NPL sites in a state.
Example: /api/superfund?state=NJ
GET /api/download/{state}/echo.csv
GET /api/download/{state}/superfund.csv
Full CSV exports per state. Use the state slug (e.g. california, new-jersey).
Example: /api/download/california/echo.csv
All JSON endpoints return UTF-8 with Access-Control-Allow-Origin: * set, so you can call them directly from a browser. Example response for /api/facilities:
{
"state": "TX",
"count": 50,
"facilities": [
{
"registry_id": "110000123456",
"name": "Example Chemical Plant",
"city": "Houston",
"county": "Harris",
"state": "TX",
"lat": 29.76,
"lng": -95.37,
"snc_flag": "Y",
"programs_with_snc": 2,
"total_penalties": 245000,
"tri_on_site_releases": 182340,
"url": "https://pollutionlookup.com/facility/110000123456"
}
]
}
This API is free to use. If you use the data in research, journalism, or a public-facing project, please link back to PollutionLookup.com and cite the original federal sources (EPA Superfund, TRI, ECHO).
Please keep traffic reasonable — a few requests per second is fine. For bulk work, use the CSV downloads instead of looping over thousands of API calls.