BYTETOOLS

EPA Envirofacts API

Free US EPA Envirofacts API with no key: toxic release inventory, facility permits, air and water compliance data across US environmental programmes. Tested.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 19 Aug 2026

What is the EPA Envirofacts API?

The EPA Envirofacts API is a free, key-free US government API exposing environmental databases including the Toxics Release Inventory, facility registry, air emissions and water discharge permits.

Envirofacts provides direct query access to the EPA's underlying database tables, covering which facilities release which chemicals, their permits and their compliance history. It is unusually granular open data.

The URL structure is a REST wrapper over table queries rather than a curated API: you name the table, a column filter, a row range and an output format. That is powerful but unforgiving — you need to know the table and column names, which the EPA documents separately.

Quick facts

Base URL
https://data.epa.gov/efservice
Authentication
No API key required.
Rate limit
No published hard limit; row ranges keep responses manageable.
Pricing
Free public domain US government data.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the EPA Envirofacts API

Every request below was executed against the live API on 19 Aug 2026, and the response shown is the real body it returned — not an illustration.

1. Query facilities from the Toxics Release Inventory

GET https://data.epa.gov/efservice/tri_facility/state_abbr/CA/rows/0:1/JSON

curl
curl 'https://data.epa.gov/efservice/tri_facility/state_abbr/CA/rows/0:1/JSON'
JavaScript (fetch)
const res = await fetch("https://data.epa.gov/efservice/tri_facility/state_abbr/CA/rows/0:1/JSON");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://data.epa.gov/efservice/tri_facility/state_abbr/CA/rows/0:1/JSON", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "tri_facility_id": "90001BCNCX935E5",
    "facility_name": "NEWARK CUSTOM PAPERBOARD",
    "street_address": "935 E 59TH ST",
    "city_name": "LOS ANGELES",
    "county_name": "LOS ANGELES",
    "state_county_fips_code": "06037",
    "state_abbr": "CA",
    "zip_code": "900011007",
    "region": "9",
    "fac_closed_ind": "1",
    "mail_name": "NEWARK CUSTOM PAPERBOARD",
    "mail_street_address": "935 E 59TH ST",
    "mail_city": "LOS ANGELES",
    "mail_state_abbr": "CA",
    "mail_province": null,
    "mail_country": null,
    "mail_zip_code": "90001-1007",
    "asgn_federal_ind": "C",
    "asgn_agency": null,
    "frs_id": null,
    "parent_co_db_num": "085653186",
    "parent_co_name": "THE NEWARK GROUP INC",
    "fac_latitude": null,
    "fac_longitude": null,
    "pref_latitude": null,
    "pref_longitude": null,
    "pref_accuracy": null,
    "pref_collect_meth": null,
    "pref_desc_category": null,
    "pref_horizontal_datum": null,
    "pref_source_scale": null,
    "pref_qa_code": null,
    "asgn_partial_ind": "0",
    "asgn_public_contact": "PAUL WOODS",
    "asgn_public_phone": "3232321108",
    "asgn_public_contact_email": "PWOODS@TNGUS.COM",
    "bia_code": null,
    "standardized_parent_company": "THE NEWARK GROUP INC",
    "asgn_public_phone_ext": null,
    "epa_registry_id": "110031000235",
    "asgn_technical_contact": null,
    "asgn_technical_phone": null,
    "asgn_technical_phone_ext": null,
    "mail": null,
    "asgn_technical_contact_email": null,
    "foreign_parent_co_name": null,
    "foreign_parent_co_db_num": null,
    "standardize

Parameters

ParameterTypeRequiredDescription
<table>pathRequiredDatabase table name. tri_facility
<column>/<value>pathOptionalColumn filter as consecutive path segments. state_abbr/CA
rows/<start>:<end>pathOptionalRow range — always include this. rows/0:9
<format>pathRequiredJSON, CSV or XML as the final segment. JSON

Response fields

tri_facility_idstring
EPA facility identifier.
facility_namestring
Facility name.
street_address / city_name / state_abbrstring
Facility location.
county_namestring
County.
(varies by table)mixed
Columns depend entirely on which table you query.

What you can build with the EPA Envirofacts API

  • Map industrial facilities and their reported chemical releases
  • Research environmental compliance history for a location
  • Support environmental justice and public health analysis
  • Build local pollution transparency tools

Common errors and how to fix them

Enormous response or timeout

No row range was specified.

Fix: Always append rows/0:99 or similar — unbounded table queries return everything.

Empty array

Wrong table or column name.

Fix: Table and column names are database identifiers; check the EPA model documentation rather than guessing.

Format defaults unexpectedly

The output format is the last path segment.

Fix: End the URL with /JSON explicitly.

EPA Envirofacts API — frequently asked questions

Is the EPA Envirofacts API free?

Yes, completely free with no API key. It is public domain US government environmental data.

How is the URL structured?

As a table query: /efservice/<table>/<column>/<value>/rows/<start>:<end>/JSON. You name the table, filter, row range and format as path segments.

Why did my query return an enormous response?

You omitted the row range. Always include rows/0:99 or similar, or the API returns every matching row in the table.

What is the Toxics Release Inventory?

A mandatory US programme requiring facilities to report annual releases of listed toxic chemicals. The tri_ tables in Envirofacts expose that data at facility level.

Tools that pair with this API

Alternatives to EPA Envirofacts API

If EPA Envirofacts does not fit, these environment apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.

APIWhat it doesAuthCORSLast verified
UK Carbon IntensityFree National Grid carbon intensity API with no key: current and forecast grid carbon per half hour, by region, with generation mix. Tested curl example.No keyYes19 Aug 2026
GBIFFree GBIF API with no key: 2 billion+ species occurrence records, taxonomic data and distribution maps from museums and research institutions worldwide. Tested.No keyNo19 Aug 2026
iNaturalistFree iNaturalist API with no key: millions of citizen-science species observations with photos, coordinates, identifications and quality grades. Tested example.No keyYes19 Aug 2026
USGS Water ServicesFree USGS Water Services API with no key: real-time river discharge, gauge height, water temperature and groundwater levels from thousands of US sites. Tested.No keyYes19 Aug 2026
Open-Meteo FloodFree flood forecasting API with no key: daily river discharge forecasts worldwide from the GloFAS global flood model, with historical data back to 1984. Tested.No keyNo20 Aug 2026
Global Warming APIFree climate data API with no key: global temperature anomalies from 1880 to now, plus CO2, methane, nitrous oxide and polar ice extent series. Tested example included.No keyYes21 Aug 2026
All Environment APIs

EPA Envirofacts is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 19 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.