Trade Intelligence

FDA Import Alert Screening

Screen a firm against every FDA Import Alert Red, Yellow and Green List in one call.

The problem

FDA can detain a shipment without physically examining it — or exempt one — based on which of its published Import Alerts a firm, product or country appears on. Each alert publishes its own lists — in FDA's words, the Red List for those that "have met the criteria for Detention without Physical Examination", the Yellow List for those "subject to intensified surveillance", and the Green List for those that "have met criteria for exemption". FDA's search looks a firm up one name at a time; screening a whole supplier list, and re-checking it every time an alert changes, is the repetitive part.

Who it's for

Import-compliance teams, customs brokers, and food, drug, device and cosmetic importers who need to know a supplier's FDA Import Alert exposure before goods ship — plus logistics and trade software builders embedding that check into their own tools.

Use cases

  • Vetting a new supplier's FDA Import Alert exposure before placing a purchase order
  • Batch screening a supplier list during onboarding or a periodic compliance review
  • Checking whether a firm sits on a Green List exemption for a specific alert
  • Embedding FDA Import Alert screening into a customs brokerage or logistics platform

What it does

Send a firm name and get back every FDA Import Alert list it is a potential match on: the alert number and name, which list it appears on (Red, Yellow or Green), and the firm-level detail FDA published — address, country, product code and description, notes, and date_published, the date FDA prints beside the firm's name in that alert's list (the entry's date, not the alert's). When FDA lists more than one product for a firm, its product codes, descriptions and notes each come back as one text joined with "; ", so which code goes with which description is not recorded. Country and product description are optional: each match says whether they agree (country_match, product_match), and they never remove a match. There is no address input; firm.address is returned so you can compare it with your supplier's address by eye. An FEI number is carried through for your own records. A batch endpoint screens up to 50 firms in one call. It screens firm names. Some alerts cover every shipment of a product from an entire country unless the firm is on that alert's Green List; those are not assessed, and every response says so, with FDA's alert list to check. A listed entry the screen read and scored below its match floor is not shown, but it is counted in records_below_match_threshold, so a no_match beside a non-zero count is not a statement that nothing resembled the name — a short trading name can score below the floor against a longer listed name. It screens organizations, not individuals: an entry is treated as an organization when its name carries a legal form or a trade word. An FDA entry whose listed name may identify a person is never returned; when one would have matched, the response sets withheld_possible_individual and incomplete_coverage to true and says so in coverage_note, so a hidden entry is never reported as a clean result.

Why Aervik's implementation is different

Every response tells you what it was built from. The source block carries basis (live FDA data or a clearly-labeled fixture dataset), as_of (the date of the data actually served), and a note naming the refresh cycle that produced it — so you never have to guess whether a result reflects current FDA data. An API that cannot tell you how current its data is cannot tell you anything useful about a detention risk. And every match carries its own evidence: match_type (exact or fuzzy), a similarity score, whether the country you supplied agreed, and FDA's entry for the firm the match was made against. That is enough for a reviewer to judge the match rather than trust it, which is the point — a name-similarity result a human cannot audit is worse than no result.

Example

Request

POST /screen
{
  "firm_name": "Barbosa & Marques S.A.",
  "country": "BRAZIL"
}

Response

Captured live 2026-09-18 from the request above, values unedited. The cache generation and `source.as_of` advance with each refresh cycle, so a call on a later day reports a later one — this is a dated recording, not a promise about today.

{
  "input": {
    "firm_name": "Barbosa & Marques S.A.",
    "country": "BRAZIL"
  },
  "status": "match",
  "matches": [
    {
      "alert_number": "12-10",
      "alert_name": "Detention Without Physical Examination of Cheese Due to Microbiological Contamination",
      "list_type": "red",
      "matched_name": "Barbosa & Marques S.A.",
      "match_type": "exact",
      "score": 1,
      "country_match": true,
      "product_match": null,
      "firm": {
        "name": "Barbosa & Marques S.A.",
        "address": "Rua Aluizio Esteves, 250 Lourdes , Governado Valadares, Minas Gerais, BRAZIL",
        "country": "BRAZIL",
        "fei_number": null,
        "product_code": "12 Y - - 99",
        "product_description": "Cheese And Cheese Products, Not Elsewhere Mentioned, N.E.C.",
        "notes": "Desc: Queijo Minas Cheese; Notes: DWPE date - 6/25/2004 Queijo Minas Cheese only.",
        "date_published": "2009-09-18"
      }
    }
  ],
  "incomplete_coverage": false,
  "withheld_possible_individual": false,
  "coverage_note": null,
  "records_below_match_threshold": 0,
  "source": {
    "name": "FDA Import Alerts (Red/Yellow/Green Lists)",
    "url": "https://www.accessdata.fda.gov/cms_ia/ialist.html",
    "basis": "live",
    "as_of": "2026-09-17",
    "note": "Served from a D1 cache of real FDA Import Alert data, generation 13, read from FDA in a refresh cycle that began 2026-09-17 (24051 firm entries across 153 alerts). The cache is refreshed by a scheduled job inside FDA's own published visiting-hours window, never on a customer request. A full cycle across every alert spans several runs; a newer cycle may be staging in the background without affecting this response."
  },
  "disclaimer": "Advisory only. A \"match\" or \"possible_match\" result is a deterministic name-similarity classification against FDA's published Import Alert Red/Yellow/Green List data -- it is a potential match requiring independent verification, never a confirmed determination that the firm you screened is the firm on FDA's list. Conversely, a \"no_match\" result is not a guarantee that a firm or shipment is free of exposure under any FDA Import Alert: coverage may reflect a fixture dataset rather than live FDA data (check source.basis and source.as_of before relying on any result), and this Service does not cover every FDA Import Alert or program that may apply. Countrywide Import Alerts: NOT ASSESSED. Some FDA Import Alerts detain every shipment of a product from an entire country (some only in a stated season) unless the firm is on that alert's Green List, so a firm can be covered without its name appearing on any list. This Service screens firm names only and cannot tell you whether such an alert covers your supplier's country and product: check the alerts for that country at https://www.accessdata.fda.gov/cms_ia/ialist.html before relying on a no_match. This is not a customs-business determination or legal/customs/regulatory advice of any kind. See GET /terms for the full disclosure."
}

Calling it directly — real, working requests you can paste and run:

cURL

curl -X POST "https://fda-import-alert-red-yellow-green-list-screening-api.p.rapidapi.com/screen" \
  -H "content-type: application/json" \
  -H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
  -H "X-RapidAPI-Host: fda-import-alert-red-yellow-green-list-screening-api.p.rapidapi.com" \
  -d '{"firm_name": "Barbosa & Marques S.A.", "country": "BRAZIL"}'

Python

import os
import requests

RAPIDAPI_HOST = "fda-import-alert-red-yellow-green-list-screening-api.p.rapidapi.com"

resp = requests.post(
    f"https://{RAPIDAPI_HOST}/screen",
    json={"firm_name": "Barbosa & Marques S.A.", "country": "BRAZIL"},
    headers={
        "X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"],
        "X-RapidAPI-Host": RAPIDAPI_HOST,
    },
)
print(resp.json())

Node.js

const RAPIDAPI_HOST = 'fda-import-alert-red-yellow-green-list-screening-api.p.rapidapi.com';

const res = await fetch(`https://${RAPIDAPI_HOST}/screen`, {
  method: 'POST',
  headers: {
    'content-type': 'application/json',
    'X-RapidAPI-Key': process.env.RAPIDAPI_KEY,
    'X-RapidAPI-Host': RAPIDAPI_HOST,
  },
  body: JSON.stringify({ firm_name: 'Barbosa & Marques S.A.', country: 'BRAZIL' }),
});
console.log(await res.json());

Where this API's data comes from, how we read it, and each source's own update schedule: Data Sources & Freshness.

Machine-readable: the OpenAPI 3.1 document for this API, generated from its code — import it into Postman or a client generator. More on the developer page.

A ready-made Postman collection is also available: import it and the shared environment in Postman (Import, then select the file), then set RAPIDAPI_KEY to your RapidAPI key.

Key features

  • One call covers the firm lists of every published FDA Import Alert — Red, Yellow and Green
  • Says what it cannot see: alerts covering an entire country are declared NOT ASSESSED on every response
  • Organizations only: an entry that may name an individual is withheld, and the response is marked incomplete, not clean
  • Near misses are counted: an entry read and scored below the match floor is reported, never silently dropped
  • Green List coverage, so an exemption is visible and not just a detention risk
  • Per-match evidence: match type, score, country agreement, and FDA's entry for the firm
  • Per-response freshness manifest — basis, as_of, and the ingest that produced it
  • Batch endpoint for supplier lists, up to 50 firms per call
  • Advisory-only disclosure carried in full on every response, not buried in terms

Pricing

A free tier with 30 API requests a month to build against, then monthly plans from $29 with a set number of requests included. The $29 and $99 plans are hard-capped — calls stop at the limit rather than billing you; only the top plan (10,000 requests) runs on a soft limit, with overage at $0.15 per additional request. Batching is cheap: one call screening up to 50 firms counts as a single request, so the same plan covers occasional supplier checks and high-volume brokerage workflows.

See exact current pricing tiers on RapidAPI →

Frequently asked questions

What does this API check in one call?

POST /screen checks the firm name you supply against the firm lists of every published FDA Import Alert — in FDA's words, the Red List ("have met the criteria for Detention without Physical Examination"), the Yellow List ("subject to intensified surveillance") and the Green List ("have met criteria for exemption") — and returns every list it is a potential match on. Alerts that cover an entire country's product are not assessed, and every response says so.

Why does the Green List matter?

Because an exemption is as commercially significant as a detention risk. A firm on a Green List for a given alert is specifically exempted from it, and a screening tool that only reported Red and Yellow would leave you re-verifying something FDA has already cleared. The top-level status counts a Green List entry as a match too, so read list_type on each match before acting on status.

Is a 'no_match' result a guarantee my shipment will clear?

No. This API is advisory only. A no_match is not a certified clearance: it means the firm name you supplied did not match the Import Alert data served on that date. It also cannot see alerts that cover an entire country's product — Import Alert 20-04, for example, covers fresh raspberries from Guatemala every March 15 to August 15 unless the grower is on its Green List — so check FDA's alerts for your supplier's country too. It is not a customs-business determination and not legal or customs advice — consult a licensed customs broker or attorney for your actual import compliance obligations.

What does the source.basis field mean?

Whether the response reflects real, currently-ingested FDA Import Alert data (live) or a clearly-labeled fixture dataset. It ships on every response alongside as_of, the date of the data actually served, so a stale or placeholder result can never look like a current one.

How is a match decided, and can I audit it?

A match is a deterministic name-similarity classification, never an AI judgment call. Every match returns match_type (exact or fuzzy), a similarity score, whether the optional country you supplied agreed, and FDA's entry for the firm it was matched against — so a reviewer can judge the match rather than trust it. A score of 0.92 or more is a match (exact when the normalized names are identical), 0.72 up to 0.92 a possible_match, and anything lower no_match. Names are compared after removing punctuation, accents, letter case and common legal forms such as Ltd, Limited, LLC and S.A.

Can I screen more than one firm at a time?

Yes. POST /screen/batch screens up to 50 firms in one call and returns one result per firm, in the order supplied. It is billed as a single request regardless of how many firms it carries.

Does the FEI number get matched?

No. It is accepted and carried through to the response for your own records, but FDA's published Import Alert list data has no FEI field to match against, so screening is on the firm name. That is stated rather than quietly ignored. If you hold the FEI, FDA's own Data Dashboard searches firms by name or FEI number, including their import alerts: [Firm/Supplier Evaluation Resources](https://datadashboard.fda.gov/oii/fd/fser.htm).

Which errors mean the firm was not screened?

400 unscreenable_firm_name (the name has no Latin letters or digits; send its romanized form), 503 source_unavailable (the cached FDA data could not be read or is more than 7 days old), and 503 firm_name_too_broad (the name matches too much of the list to compare every candidate; send a more specific name). None of them is a no_match.

How current is the data?

The cache is refreshed on a schedule inside FDA's own stated crawl window, at the pace FDA's robots.txt sets, so a full refresh cycle spans several runs. Every response reports in source.as_of the date that cycle began reading FDA's pages. A cycle that could not read every alert page is discarded, and the previous complete one keeps serving. Once the data is more than 7 days old the service refuses to screen (503 source_unavailable) rather than answer from stale data. GET /health reports the same date, its age, whether it is stale, and why a refresh is degraded. FDA says its own import alert databases "are updated in real time", so a change FDA made after source.as_of is not in the answer.

How do I find out when FDA changes an Import Alert?

This API does not send notices; each call answers from the lists as of its source.as_of date. FDA publishes an Import Alerts Weekly Summary by email: its Import Alerts page (content current as of 03/03/2025) links the subscription from FDA's email updates page, https://www.fda.gov/about-fda/contact-fda/get-email-updates.

Further reading: Screening supplier names against FDA Import Alerts: the name traps documents the five ways FDA’s own spelling of a firm name makes an automated screen answer “not listed” about a firm that is listed — legal forms, spacing, diacritics, the Green List, and the alerts that name no firm at all — with live responses from this API against each one.

The guide What a screening API does not show you sets out the seven questions to ask of any screening response — including this one — and shows the same status in three different situations: a match with further entries disclosed below the floor, a no-match with the same disclosure, and a no-match where nothing close was read.

Before you screen a list, check its shape. A company name typed without its spaces finds its listed record 4% of the time against 98% for the same name with spaces — measured on 97 real listed entities in A company name without spaces misses the screening list. The free screening name checker flags those names, and the names with nothing comparable at all, in a list you paste. It runs the normalizer from our Import Risk Screening API — a separate copy from this one, so treat the flags as advisory about name shape rather than a statement about this API’s matcher — entirely in your browser, and nothing you paste is sent anywhere.

Try FDA Import Alert Screening on RapidAPI