Data sources and freshness

The data APIs below answer from official U.S. government sources. This page names each source, says how we read it, quotes what the source itself says about how often it changes, and shows the fields in a response that tell you how current an answer is. Where a date is ours rather than the source’s, it says so.

How a product can be current

Live per request
The source is queried when you call. The answer is as current as the source is at that moment, so the source’s own update schedule is the limit.
Scheduled cache
We copy the source on a schedule. The answer is as current as the last complete refresh, and the response carries that date.
Bundled snapshot
A dated copy of the source ships inside the service. The answer reflects that copy until it is rebuilt, and the response carries its date.
Your input only
Nothing is looked up. The product reads the document or text you send, so there is no source date to report.

At a glance

Each API's official sources, how they are read, and the date a response carries
APIOfficial sourceHow it is readDate in the response
EPA Compliance Risk Enforcement and Compliance History Online (ECHO)OSHA inspection and violation data, through the DOL Open Data APIWage and Hour Division enforcement and MSHA assessed violations, through the DOL Open Data APIopenFDA recall enforcement reports (food, drug and device)Consumer Product Safety Commission recalls (saferproducts.gov REST service) Live per request; openFDA and CPSC sections cached up to 6 hours generated_at is our clock; agency sections carry source.as_of, null where the agency publishes no date
FDA Import Alerts Import Alerts: Red, Yellow and Green Lists Scheduled cache source.as_of: the date the refresh cycle behind the served data began reading FDA’s pages
Landed Cost Estimator Harmonized Tariff Schedule of the United States Bundled snapshot tariff_schedule_snapshot: the date the bundled schedule was retrieved
SEC Form 4 Alerts EDGAR: submissions API, filing archives and the company ticker file Live per request filing_date on each row is EDGAR’s; generated_at is our clock
Import Risk (UFLPA) UFLPA Entity ListConsolidated Screening List Live per request uflpa.source.as_of is DHS’s “Last Updated” date; csl.source.as_of is null
COI Verification The document or text you send Your input only No source date applies
Invoice & Receipt OCR The document or text you send Your input only No source date applies
PII Redaction The document or text you send Your input only No source date applies
Resume Parser The document or text you send Your input only No source date applies

EPA ECHO Facility Violation History & Risk Score

Enforcement and Compliance History Online (ECHO)

U.S. Environmental Protection Agency

Used for /risk-score and the EPA section of /company-risk-screen: the facility match, alleged violations, and formal enforcement history under the Clean Air Act, Clean Water Act, RCRA and the Safe Drinking Water Act.
How we read it Live. ECHO’s web services are queried for each request, and nothing from ECHO is cached.
Source’s schedule

“Data are typically refreshed on a weekly schedule from EPA source databases.”

“Although data are routinely updated, a lag time exists (anywhere from a week up to three months) between when data are entered into the source database and when they appear in ECHO.”

ECHO’s own refresh table for the EPA systems behind the programs this product reports, as read 2026-09-17 18:25 UTC:

SystemData extractedNext expected
FRSFacility Registry Service (facility identity)2026-09-122026-09-19
ICIS-AirClean Air Act2026-09-122026-09-19
ICIS FE&CFederal enforcement and compliance2026-09-122026-09-19
ICIS-NPDESClean Water Act2026-09-122026-09-19
RCRAInfoHazardous waste (RCRA)2026-09-122026-09-19
SDWISSafe Drinking Water Act2026-07-092026-10-15

OSHA inspection and violation data, through the DOL Open Data API

Occupational Safety and Health Administration, U.S. Department of Labor

Used for The OSHA section of /company-risk-screen: inspections of establishments whose name matches the company, joined to their citations. This product uses the US Department of Labor API but is not endorsed or certified by the US Department of Labor.
How we read it Live. Queried for each request, and nothing is cached.
Source’s schedule

DOL’s dataset catalog lists the update frequency as Daily for OSHA inspection and Daily for OSHA violation (read 2026-09-17 18:25 UTC).

Wage and Hour Division enforcement and MSHA assessed violations, through the DOL Open Data API

U.S. Department of Labor

Used for The DOL section of /company-risk-screen. Employee Benefits Security Administration data is not covered. This product uses the US Department of Labor API but is not endorsed or certified by the US Department of Labor.
How we read it Live. Queried for each request, and nothing is cached.
Source’s schedule

DOL’s dataset catalog lists the update frequency as Quarterly for WHD enforcement and Weekly for MSHA assessed violations (read 2026-09-17 18:25 UTC).

openFDA recall enforcement reports (food, drug and device)

U.S. Food and Drug Administration

Used for The FDA section of /company-risk-screen: recalls that name the company as the recalling firm.
How we read it Live, behind a shared response cache: a result for the same company name can be up to 6 hours old.
Source’s schedule

“The data is updated weekly.”

“The data is updated weekly.”

“The data is updated weekly.”

Consumer Product Safety Commission recalls (saferproducts.gov REST service)

U.S. Consumer Product Safety Commission

Used for The CPSC section of /company-risk-screen: recalls that name the company as manufacturer, importer or distributor.
How we read it Live, behind the same response cache: a result can be up to 6 hours old.
Source’s schedule

No update schedule is stated on CPSC’s Recalls API information page. Read 2026-09-14.

Known limits

  • Advisory only. ECHO aggregates state and federal reporting with lags, so a facility’s current status can differ from what ECHO shows.
  • A name or address that matches more than one facility returns a match_count, and only the first is scored; narrow the query or send epa_id rather than assume the first result.
  • An ECHO flag or count left blank for a facility adds no points and is named in unreadable_inputs; it is never read as “no”.
  • DOL is searched for the longest part of the name that survives removing legal-form suffixes and punctuation, in the name’s own case and in upper case. A name typed all in lower case can miss Wage and Hour records, which DOL stores as filed.
  • On /company-risk-screen, a source holding more records for the name than the screen reads is named in that section's truncated list, and its counts are lower bounds.

FDA Import Alert Screening

Import Alerts: Red, Yellow and Green Lists

U.S. Food and Drug Administration

Used for The firm entries on each published Import Alert’s Red, Yellow and Green Lists, matched against the firm name you send.
How we read it Cached. A scheduled job runs every 30 minutes from 04:00 to 08:30 UTC, inside the visiting hours FDA’s robots.txt sets, and fetches alert pages at the pace it sets. A complete cycle can span several runs. Responses read the most recent complete cycle until the next one finishes; a cycle that could not read every alert page is discarded and the previous one keeps serving. A request never fetches from FDA. After 7 days the data counts as stale and screening requests are refused with 503 rather than answered from it.
Source’s schedule

No refresh schedule is stated on the Import Alerts index. The index lists a publish date for each alert. Read 2026-09-14.

Crawl rules we follow, from FDA’s robots.txt:

“Hit-rate: 30”

“Visiting-hours: 23:00EDT-05:00EDT”

Last refresh

A reading taken when this page was built, 2026-09-17 18:25 UTC. It is not live.

  • Data being served: the complete ingest that finished 2026-09-16 05:01 UTC (37 hours old at that time)
  • Stale: no (stale after 7 days)
  • Last refresh run: ok, finished 2026-09-17 08:41 UTC
  • Overall status: ok

For the current state, read fda.aerviklabs.com/health yourself. It returns JSON with data_as_of, data_age_days and stale.

Known limits

  • Alerts that cover every shipment of a product from a whole country are not assessed, and each response says so.
  • Screening is on the firm name. An FEI number is carried through to the response but not matched, because FDA’s list data has no FEI field to match against.
  • Names are compared after removing punctuation, accents, letter case and common legal forms (such as Ltd, Limited, LLC, S.A.); a name spelled differently in other ways can still score below the match threshold.

Landed Cost API — HS Subheading & Duty Range

Harmonized Tariff Schedule of the United States

U.S. International Trade Commission

Used for Tariff line descriptions and general duty rates behind the subheading and duty range, and China Section 301 list membership, parsed from the schedule’s Chapter 99 notes (U.S. Note 20).
How we read it Bundled snapshot. The schedule was exported on 2026-09-14 and ships inside the service. Nothing is fetched per request, so a later USITC revision is not reflected until the snapshot is rebuilt.
Source’s schedule

USITC publishes the schedule as numbered releases. Its release list, read 2026-09-17 18:25 UTC, shows 20 releases of the 2026 schedule, and names 2026 HTS Revision 19 as current, starting 2026-09-15.

That release started after the bundled snapshot was exported (2026-09-14), so rates it changed are not reflected.

Known limits

  • An estimate at the 6-digit subheading, not a customs classification.
  • Antidumping and countervailing duty orders are not assessed, and each estimate says so.
  • The Section 301 forced-labor duties and Section 232 duties are not assessed.

SEC Form 4 Insider Trade Alerts

EDGAR: submissions API, filing archives and the company ticker file

U.S. Securities and Exchange Commission

Used for A company’s recent Form 4 filings, the transactions reported in them, and the ticker-to-CIK lookup.
How we read it Live. The company’s filing history and each Form 4 document are fetched for each request. The ticker-to-CIK file is held in memory for up to 1 hour.
Source’s schedule

“The APIs are updated in real-time as filings are disseminated.”

“The submissions API is updated with a typical processing delay of less than a second; the xbrl APIs are updated with a typical processing delay of under a minute.”

“However these processing delays may be longer during peak filing times.”

Known limits

  • Only EDGAR’s recent filing window is read, and amended filings (Form 4/A) are not read, so a returned transaction may since have been amended.
  • Only filings that name the requested company as the issuer are returned; its own filings as an insider in another company are excluded.
  • In a joint filing, each transaction is shown under the first-listed reporting owner only.
  • Post-transaction holdings are those on the row’s ownership line (direct or indirect), not the insider’s total position.
  • is_rule_10b5_1_plan: false means the row’s footnotes do not say it was under a plan, not that there was no plan.
  • AI notes are written for at most 20 transactions per request; later rows get a template note marked as not AI-written.
  • Forms 3, 5 and 144 are not read.
  • Informational, not investment advice.

UFLPA Entity List Screening

UFLPA Entity List

U.S. Department of Homeland Security, Forced Labor Enforcement Task Force

Used for Supplier and manufacturer names on /screen/shipment and /screen/parties, and the name search on /uflpa/entities.
How we read it Live. The list page is fetched and read once for each name screened (so up to 50 times for one batch call), and nothing is kept between requests.
Source’s schedule

No update schedule is stated on the list page. The page carries its own “Last Updated” date. Read 2026-09-14.

The page read “Last Updated: 07/31/2026” when checked 2026-09-17 18:25 UTC.

Consolidated Screening List

International Trade Administration, U.S. Department of Commerce

Used for Denied-party screening of the same names, through the CSL search API.
How we read it Live. The search API is queried for each request, and nothing is cached.
Source’s schedule

“All the tools are updated automatically every day at 5:00 AM EST/EDT.”

“It is the responsibility of the federal agency to make available updated file(s) in order for the CSL to be up-to-date.”

“This data set is updated hourly.”

ITA states two different update schedules on two of its pages. We have not established which one applies to the search API, so this page does not choose between them.

Known limits

  • Screens names. An HTS number you send is echoed back and not used to screen anything.
  • Screens organizations: records the sources classify as individuals are withheld, and the response says so.
  • Both lists are published in Latin script, so a name with no Latin letters or digits cannot be screened; those sections answer error, never a clean result.
  • AD/CVD scope is not reported.
  • Advisory only; a no match is not a clearance.

How to read freshness in a response

These are the fields to branch on. Field names are checked against each API’s published OpenAPI document. A date the response calls ours is when our service did the work, not a date the source gave the data.

The same record is available as JSON, with each API's live health, at /sources.json; the rules behind it are on Trust & Transparency.

EPA ECHO Facility Violation History & Risk Score

Freshness fields in EPA ECHO Facility Violation History & Risk Score responses
FieldWhat it tells you
data_source /risk-score: names ECHO, its stated weekly refresh, and that ECHO is queried live.
last_formal_action_date ECHO’s date for the facility’s most recent formal enforcement action, across all programs. ECHO’s summary columns give no per-program date, so enforcement_actions[].most_recent_date is always null rather than a facility-wide date repeated on each program row.
generated_at When our service built the response. It is our clock, not a date from any agency.
<agency>.source.as_of /company-risk-screen, on each of the osha, dol, fda and cpsc sections: the agency’s own date for the data, or null when the agency publishes none in its response. It is not the date of your request.
<agency>.source.basis live when that section came from the agency itself.
incomplete_coverage true unless every agency section was checked without error, read every record its source holds for the name (each section's truncated list is empty), and the EPA section resolved to exactly one facility whose name matches company_name. When the name matches several facilities, or the one found is named differently, epa.note says so and that facility adds no points to cross_agency_risk_score.

FDA Import Alert Screening

Freshness fields in FDA Import Alert Screening responses
FieldWhat it tells you
source.as_of The date the refresh cycle behind the served data began reading FDA’s pages: when the data was taken from FDA, not a date FDA assigns. A cycle spans several runs.
source.basis live when the firm was screened against ingested FDA data. Any other value means it was not.
source.note How the served data was produced, including its ingest date and how many alerts it covers.
matches[].firm.date_published The date FDA shows in that firm’s entry on the alert page.
GET /health → data_as_of The same cycle-start date, with data_age_days, stale and stale_after_days beside it.
GET /health → status ok only when the data is fresh and its refresh is healthy; degraded otherwise.

Landed Cost API — HS Subheading & Duty Range

Freshness fields in Landed Cost API — HS Subheading & Duty Range responses
FieldWhat it tells you
tariff_schedule_snapshot The date the bundled USITC schedule was retrieved. Every rate in the response comes from it.
surcharge_coverage What was and was not checked for additional duties on this request.

SEC Form 4 Insider Trade Alerts

Freshness fields in SEC Form 4 Insider Trade Alerts responses
FieldWhat it tells you
filings[].filing_date The date EDGAR accepted the filing.
filings[].period_of_report The transaction period the form covers.
data_source Names EDGAR and states that it is queried per request.
generated_at When our service built the response, on our clock.

UFLPA Entity List Screening

Freshness fields in UFLPA Entity List Screening responses
FieldWhat it tells you
uflpa.source.as_of DHS’s own “Last Updated” date for the list page, or null when it could not be read. It is not the date of your request.
csl.source.as_of null, because the CSL search response carries no list update date.
uflpa.source.note, csl.source.note Includes the UTC date we fetched or queried the source, marked as ours.
uflpa.matches[].entity.listed_date The date DHS shows beside that entity on the list.
csl.result_page_truncated true when trade.gov reported more matching records than it returned; total_upstream_results carries its count.
exposure_summary.incomplete_coverage true when something was not fully screened: a source not live or not checked, a name that cannot be compared, a truncated page, or records below the match threshold.

APIs that read only what you send

These look nothing up in an outside dataset. They read the document or text in your request, so there is no source to go stale and no source date to report.

If something here is wrong

Sources change their pages and their schedules. If a source, date or quote on this page no longer matches what the source shows, tell us. How we handle corrections is on the About page.