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
| API | Official source | How it is read | Date 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 |
ECHO’s own refresh table for the EPA systems behind the programs this product reports, as read 2026-09-17 18:25 UTC:
|
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 |
|
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 sendepa_idrather 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'struncatedlist, 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:
|
| Last refresh |
A reading taken when this page was built, 2026-09-17 18:25 UTC. It is not live.
For the current state, read fda.aerviklabs.com/health yourself. It
returns JSON with |
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 |
|
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: falsemeans 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 |
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
| Field | What 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
| Field | What 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
| Field | What 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
| Field | What 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
| Field | What 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.