Skip to main content
Validate

The Environmental Compliance Check API tells you what the EPA's records say about the facilities that carry a company's name

Send a company name, with a state if you like, and get its active EPA-regulated facilities totalled in one answer: compliance status, inspections, enforcement actions and penalties. 3 credits, charged only when a facility carries the name.

3 credits per lookupOnly charged on a matchSame credits as every other product
1Lookup Environmental Compliance Check API turning a fictional company name, Sample Chemical, into one answer: five active facilities carry the name, one is in significant non-compliance, six formal enforcement actions and 2,417,795 dollars in penalties over five years, and a review call

3

Credits per company

about $0.01 on Starter, $14.85 per 1,000

0

Credits when no facility carries the name

no facility, no charge

5 years

Of inspections, actions and penalties

compliance over the last 12 quarters

10

Riskiest facilities listed

each with a link to the EPA's page

The EPA's search returns six facilities and only the five that carry the name are counted

A site that once used the name is left out, so every total describes the facilities that really carry it, and the answer keeps both numbers.

How the facilities for a company are chosen: the EPA's search returns six facilities for the words sample chemical, five carry both words in their own name and are counted, and one fuel stop that once sold the product is left out, so the totals describe five sites

A company comes back as totals over the facilities that carry its name in one flat payload

Every total counts only the facilities that carry the name

The EPA's own search returns sites that once used a name, so a search for one oil company also returns stores that sold its fuel. The API keeps a facility only when its own name carries every word you sent, and computes each total from those facilities.

  • matched_facilities and total_matches_in_epa kept apart
  • Order, case and endings such as Inc ignored
  • A long word also matches the start of a longer one
  • Only active facilities searched

The EPA's own flag for a serious violator is counted

A facility the EPA flags as in significant non-compliance is counted on its own line, next to the facilities with quarters in violation and those with a current violation, so a risk screen can start from the serious cases.

  • facilities_in_snc
  • facilities_with_quarters_in_nc
  • facilities_with_current_violation
  • compliance_status for each facility

Inspections, actions and penalties come with their window

Compliance is counted over the last 12 quarters and inspections, notices of violation, formal enforcement actions and penalties over the last 5 years. The windows object states both in every answer, so no figure is read against the wrong period.

  • Inspections and the date of the last one
  • Notices of violation and formal actions
  • Penalties in whole US dollars
  • The windows stated in every answer

The ten riskiest facilities are listed with a link to each

Each facility comes with its compliance status, address, the programs it is regulated under, such as air or hazardous waste, and a link to its own page on the EPA's site, so a reviewer can open the record behind the number.

  • Riskiest facility first
  • Address, town, state and zip
  • Programs it is regulated under
  • echo_url to the EPA's page

A plain assessment says where to look first

primary_action is REVIEW when a facility is in significant non-compliance or has formal enforcement or penalties, VERIFY when violations or notices are on record, and APPROVE when every matched facility is clear. It states what the EPA's records show, never that no violation exists.

  • REVIEW, VERIFY or APPROVE
  • secondary_actions that say why
  • A partial read is VERIFY, never APPROVE
  • user_message in plain words

A name no facility carries costs nothing

You are charged 3 credits only when at least one facility's own name carries the words you sent. A name the EPA returned facilities for but none carries, a name with no active facility, a malformed entry and a lookup the EPA could not answer cost 0, and that holds for bulk CSV jobs as well as the API.

  • Zero credits when none match
  • Bulk CSV with a company column
  • The same credits as every other product
  • One API key for all of it

A company name goes in and the EPA's record for its facilities comes out

01

Send a name

POST a company or facility name, with a two-letter state if you want to narrow it. Endings such as Inc and LLC are dropped, and a malformed entry is refused with a clear error and costs nothing.

request

$ POST /api/v1/epa-compliance-check

"company": "Sample Chemical"

"state": "TX"

02

We read the EPA's records

The EPA's database is searched for active facilities, and only the ones whose own name carries every word you sent are kept. Their compliance status, inspections, enforcement actions and penalties are totalled over the stated windows.

processing

Name cleaned and checked

EPA database searched

Facilities kept by their own name

Totals computed over the stated windows

03

Get the totals and the facilities, flat and structured

The totals, the ten riskiest facilities and an assessment arrive in one JSON payload. A company with a facility that carries its name bills 3 credits, and a name no facility carries bills nothing.

200 OK

companysample chemical

matched3 facilities, 1 in SNC

penalties$2,417,795, 5 years

assessment REVIEW3 credits, 0 if none

One endpoint checks a company and works like every other 1Lookup call

Same authentication, same credit balance, and the same response envelope as every other 1Lookup product. If you have already integrated one endpoint, this one is a URL change.

POST /v1/epa-compliance-check
curl -X POST https://app.1lookup.io/api/v1/epa-compliance-check \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "company": "Sample Chemical" }'
200 OK
{
  "classification": {
    "found": true,
    "outcome": "matched",
    "company": "sample chemical",
    "state": null,
    "matched_facilities": 3,
    "total_matches_in_epa": 4,
    "facilities_in_snc": 1,
    "facilities_with_quarters_in_nc": 2,
    "inspections_5yr": 14,
    "formal_actions_5yr": 5,
    "penalties_usd_5yr": 2417795,
    "assessment": "REVIEW",
    "top_facility": "SAMPLE CHEMICAL PLANT 1",
    "states": ["LA", "TX"],
    "truncated": false,
    "checked_at": "2026-10-25",
    "name_search": true
  },
  "insights": {
    "epa_compliance_result": {
      "outcome": "matched",
      "totals": {
        "matched_facilities": 3,
        "total_matches_in_epa": 4,
        "facilities_in_snc": 1,
        "facilities_with_quarters_in_nc": 2,
        "facilities_with_current_violation": 2,
        "inspections_5yr": 14,
        "informal_actions_5yr": 5,
        "formal_actions_5yr": 5,
        "penalties_usd_5yr": 2417795,
        "states": ["LA", "TX"]
      },
      "facilities": [
        {
          "name": "SAMPLE CHEMICAL PLANT 1",
          "registry_id": "999900000001",
          "city": "SAMPLETOWN",
          "state": "TX",
          "compliance_status": "Significant Violation",
          "in_snc": true,
          "quarters_in_nc": 12,
          "inspections": 11,
          "formal_actions": 4,
          "penalties_usd": 2204913,
          "programs": ["Air", "Water discharge", "Hazardous waste"],
          "echo_url": "https://echo.epa.gov/detailed-facility-report?fid=999900000001"
        }
      ],
      "facilities_listed": 3,
      "windows": { "compliance_quarters": 12, "inspections_and_enforcement_years": 5 },
      "data_source": "epa_echo"
    }
  },
  "recommendations": {
    "primary_action": "REVIEW",
    "secondary_actions": [
      "review_facilities_in_significant_noncompliance",
      "review_enforcement_and_penalties",
      "confirm_facilities_belong_to_the_company"
    ]
  },
  "metadata": { "credits_used": 3, "cache_hit": false }
}

A column of companies goes in and one row per company comes out

Upload a CSV with a company column, with a state after the name and a comma if you want one, and download a result file with each company's outcome, assessment, facility count and penalties. The three companies here are invented.

companies.csvYou upload
  1. 1company
  2. 2sample chemical
  3. 3Sample Foods, OH
  4. 4Sample Plating Works
epa-compliance-results.csvYou download
companyFoundOutcomeAssessmentFacilities MatchedIn Significant Non-CompliancePenalties (USD, 5 Years)Credits Used
sample chemicalYesmatchedREVIEW3124177953
Sample Foods, OHYesmatchedAPPROVE2003
Sample Plating WorksNono_name_match0

Seven more columns in the file, among them Facilities The EPA Returned, With Quarters In Violation, Inspections (5 Years), Formal Actions (5 Years), Riskiest Facility, States and Read On.

One row in, one row out

Every company becomes one row, so a supplier list of 500 names is a spreadsheet of 500 rows you can sort by penalties or filter by assessment.

A name no facility carries is a free row

A typo, a name the EPA matched only loosely or a company with no active facility comes back as a row that says so and costs 0 credits, so cleaning a list never bills for the misses.

Facility names are guarded in the file

A facility name is text the facility filed with the EPA, so the file guards it against spreadsheet formulas before you open it.

One call returns the EPA's record for the facilities that carry a company's name

One call turns a company name on a supplier list, a loan file or a watchlist into the EPA's record for the active facilities that carry it: how many matched, how many are in significant non-compliance, the inspections and enforcement of the last 5 years and the penalties, with the raw JSON your code receives beside it. Every figure is computed from the facilities that carry the name, never from the EPA's wider search.

app.1lookup.io/api/v1Found: Review
  • Companysample chemical
  • Facilities matched3 of 4 returned
  • In significant non-compliance1
  • With quarters in violation2
  • Inspections, 5 years14
  • Formal actions, 5 years5
  • Penalties, 5 years$2,417,795
  • StatesLA, TX
  • Riskiest facilitySAMPLE CHEMICAL PLANT 1
  • AssessmentREVIEW
  • Read on2026-10-25
200 OK, 3 credits
{
  "classification": {
    "found": true,
    "outcome": "matched",
    "company": "sample chemical",
    "matched_facilities": 3,
    "total_matches_in_epa": 4,
    "facilities_in_snc": 1,
    "formal_actions_5yr": 5,
    "penalties_usd_5yr": 2417795,
    "assessment": "REVIEW",
    "top_facility": "SAMPLE CHEMICAL PLANT 1",
    "checked_at": "2026-10-25"
  },
  "insights": {
    "epa_compliance_result": {
      "facilities_listed": 3,
      "data_source": "epa_echo"
    }
  },
  "metadata": { "credits_used": 3 }
}

Every environmental compliance check returns the same fields at one flat price

A figure the EPA's records do not hold comes back as null and never as a guess, and every company with a facility costs the same 3 credits.

Question and outcome

  • found
  • outcome
  • company
  • state
  • name_search
  • checked_at

Totals

  • matched_facilities
  • total_matches_in_epa
  • facilities_in_snc
  • facilities_with_quarters_in_nc
  • facilities_with_current_violation
  • states
  • truncated
  • scanned_facilities

Inspections, actions and penalties

  • inspections_5yr
  • informal_actions_5yr
  • formal_actions_5yr
  • penalties_usd_5yr
  • windows
  • scope

Each facility

  • facilities[].name
  • facilities[].registry_id
  • facilities[].address
  • facilities[].compliance_status
  • facilities[].in_snc
  • facilities[].quarters_in_nc
  • facilities[].inspections
  • facilities[].formal_actions
  • facilities[].penalties_usd
  • facilities[].programs[]
  • facilities[].echo_url

Assessment

  • assessment
  • top_facility
  • primary_action
  • secondary_actions[]
  • user_message

Procurement, credit and compliance teams check a company's record instead of opening one EPA page per facility

Procurement teams vetting a supplier

Check a manufacturer on your approved-vendor list for facilities in significant non-compliance or recent penalties, and send the REVIEW ones to a person before a contract renews.

Lenders and insurers sizing an industrial borrower

Start the file from the EPA's record: how many regulated sites the borrower runs, what was recorded against them in the last 5 years and which site to open first.

Investors and ESG analysts screening a holding

Run a watchlist of companies through a bulk job, then sort the rows by penalties or by the number of facilities in significant non-compliance.

Compliance and risk teams onboarding a counterparty

Add the EPA's record to the counterparty file, then compare the facilities it lists with the sites the counterparty told you it operates.

Journalists and researchers

Find the facilities behind a company's name, read their penalties and inspections in one answer and open each one on the EPA's site to read the detail.

Due diligence teams on an acquisition

Screen a target's facilities for enforcement and penalties before a deeper environmental review is ordered, and confirm the facility names belong to the target.

Only a name that a facility carries is billed, and every other answer is free

A name that active facilities carry returns the totals for one charge. A name the EPA returned facilities for but none carries returns a plain answer at no charge, and so does a name with no active facility.

Three results of an environmental compliance check: a name that three active facilities carry returns their totals and bills the lookup, a name the EPA returned four facilities for but none carries returns a plain answer and is not charged, and a name with no active facility is not charged

These are the questions people ask before they check their first company

What does the Environmental Compliance Check API return?

Send a company or facility name, with a two-letter state if you like, and it returns the active EPA-regulated facilities whose own name carries it, totalled: how many matched, how many are in significant non-compliance, how many had quarters in violation in the last 12, and the inspections, notices of violation, formal enforcement actions and penalties of the last 5 years. It also lists the ten riskiest facilities with their compliance status, address, programs and a link to each one's page on the EPA's site, and gives an overall assessment of REVIEW, VERIFY or APPROVE.

Where does the data come from?

From the EPA's public Enforcement and Compliance History Online database, which holds the compliance status, inspections, enforcement actions and penalties of the facilities the EPA regulates. The EPA refreshes it weekly, and checked_at says the day we read it.

How does it decide which facilities belong to a company?

By name. The EPA's own search is loose: it matches every word anywhere in any name a site has been filed under, so a search for one oil company also returns stores that once sold its fuel. We keep a facility only when its own name carries every word you sent. Order, capital letters and endings such as Inc and LLC do not matter, a word of five or more letters also matches the start of a longer word, and only active facilities are searched. matched_facilities says how many carried the name and total_matches_in_epa how many the EPA returned.

How much does a check cost?

3 credits per company, about $0.01 on the Starter plan. You are charged only when at least one facility's own name carries the words you sent. A name the EPA returned facilities for but no facility carries, a name with no active facility, a malformed entry and a lookup the EPA could not answer all cost 0 credits, in the API, the dashboard and bulk jobs.

What time windows do the figures cover?

Compliance, meaning quarters in violation, is counted over the last 12 quarters, which is 3 years. Inspections, notices of violation, formal enforcement actions and penalties are counted over the last 5 years. Both windows are stated in every answer, in the windows object.

What do REVIEW, VERIFY and APPROVE mean?

REVIEW means a matched facility is in significant non-compliance now, or has formal enforcement or penalties in the last 5 years. VERIFY means there are quarters in violation, a current violation or notices of violation on record, and it is also returned for a clean result that did not read every facility the EPA returned. APPROVE means every matched facility is clear in the EPA's records. It states what the records show for the facilities matched, never that no violation exists.

Does a clean result mean the company has no violations?

No. It means the EPA's records show none for the facilities that carried the name, in the windows checked. A parent company's sites filed under other names, other agencies' records and anything not yet reported to the EPA are not in it, and the answer asks you to confirm the facilities are the sites you mean.

Why does a company I know come back with fewer facilities than I expected?

Facilities are matched by their own name, not by who owns them, so a parent company's sites filed under other names are not found. Only active facilities are searched. Try the name the facilities use, or send the facility's own name.

What happens when a name matches thousands of facilities?

The lookup reads the first 3,000 the EPA returns, in the EPA's own order, which is arbitrary but not biased. The answer sets truncated to true, says the totals are partial and suggests adding a state. A state, or a more specific name, narrows the search so every facility is read.

What happens when I send a bad name or the EPA does not answer?

A name shorter than 3 or longer than 120 characters, a name that is only an ending such as Inc or Company, and a state that does not exist are refused with a 400 before anything is charged. If the EPA does not answer, the API responds 503 with a Retry-After header, charges nothing and does not save the answer, so a retry is never a second charge. A failure is never read as no facility.

How current is the record, and can I ask again?

The EPA refreshes the database weekly and checked_at names the day we read it. A repeat lookup of the same company by the same user within 7 days comes from the cache at no charge. Send bypass_cache: true to read the EPA's records again instead of reusing the saved answer.

What input does it accept?

A company or facility name of 3 to 120 characters, read by at most its first 8 words, and an optional two-letter state or territory code. You can send company and state as separate fields, or the state after a comma in the name, such as Sample Chemical, TX. Endings such as Inc and LLC are dropped.

Can I check a list of companies at once?

Yes. Upload a CSV with a company column, with a state after the name and a comma if you want one, and you get a row per company with its outcome, assessment, facility counts, penalties and riskiest facility. A row with no facility is a free miss, not a failure. The price stays at the same credits per company with a facility, however long the list is.

What does it not cover?

Only the EPA's records. Other agencies' records are not included, and facilities are not matched to a parent company, so a company's sites under other names are not found. It reads the EPA's database for active facilities and does not say who owns a facility.

To check a single company before you write any code, run it through the free EPA facility compliance lookup.

Check a few companies you work with and see what comes back

Start a free trial, and your credits work across every product in the catalog.