Food Safety Brief

Signal Explorer › Methodology

How signal records are classified, verified, and updated

The Signal Explorer turns public recall and outbreak notices into one dataset with fixed categories, so recurring risks can be counted and compared. This page is the full method. It is generated from the same code that classifies the records, so it cannot describe rules the site does not actually use.

Four principles

Accuracy
Every number comes from an agency record, fetched by code that is tested against saved copies of the real responses and checked daily against the live sites. Nothing is estimated or filled in. A field the agency did not provide is shown as "not stated".
Consistency
Every record, from all three agencies, is classified with the same fixed vocabularies below, by the same rules, at the same time. When a rule changes, every record is reclassified and the change log shows what moved.
Traceability
Every record links to the agency's notice and keeps the agency's original wording next to each derived label, with a note saying whether the label was stated by the agency, coded by the agency, or inferred by our rules. Every version of the dataset is kept in the project's public history.
Useful reporting
The explorer answers practical questions: which hazards recur, in which products, from which sources, whether the rate is changing, and how often causes are actually known. Any filtered view can be shared as a link or downloaded as a CSV.

What is in the dataset

Records reported since Jan 1, 2021, from:

The dataset starts on January 1, 2021 and keeps growing. Once it holds 15 years, the oldest records age out so it never exceeds that span.

CDC
Centers for Disease Control and Prevention: multistate outbreak notices. Currently 75 records.
FDA
Food and Drug Administration: enforcement reports via openFDA, covering most foods and pet food. Currently 2,641 records.
USDA FSIS
USDA Food Safety and Inspection Service: meat, poultry, and egg product recalls and alerts. Currently 383 records.

Record types: Recall: a product recall from fda or usda fsis.; Public health alert: an fsis alert issued instead of a recall.; Outbreak notice: a cdc multistate foodborne outbreak investigation notice..

Not included: dietary supplements (excluded from FDA records by product wording), drugs, cosmetics, and medical devices (never fetched), single-state outbreaks (CDC does not publish notices for them), and anything before the start date. Pet food is included and labeled. FDA records are grouped so that one recall event with many products is one record.

What a record contains

FieldMeaningWhere it comes from
Source and agency idWhich agency, and the agency's own identifieropenFDA event id, FSIS recall number, CDC notice path
Title, firm, productWhat was affected and who recalled itAgency fields; FDA titles are built from firm and first product
Hazard typeThe kind of dangerInferred from the reason wording (rules below)
Organism, allergen, or materialThe specific agent(s) namedInferred from the reason wording; CDC names the pathogen directly
Product categoryOne food categoryInferred from product wording
ClassFDA/FSIS risk class (I is most serious)Agency field; outbreaks have no class
GeographyDistribution scope and named statesFSIS state list (stated); FDA free text (inferred); CDC per-state counts (stated)
Root causeWhy the problem happenedFSIS reason codes (coded) or free text (inferred); otherwise "not stated"
How it was foundWhat triggered the actionFSIS "problem was discovered" sentence (inferred); CDC (coded); FDA usually "not stated"
Corrective actionWhat was doneAgency coded fields
StatusOpen, closed, or unknown, with the agency's wordAgency field, normalized
DatesEvent, reported, last agency update, closedAgency fields; "not stated" when absent
Outbreak figuresCases, hospitalizations, deaths, onset rangeCDC notice (outbreaks only)
Missing and inferredLists of fields the source lacked, and fields our rules assignedComputed for every record
Record historyFirst seen, last changed, revision countComputed by comparing each build with the previous one

The categories and rules (version 1.0)

Hazard type

Follows from the organism, allergen, material, or chemical named in the reason. Organisms take precedence, then allergens, foreign material, chemicals. Only when none is named do the regulatory and other rules apply.

ValueDefinition
BiologicalA pathogen (bacteria, virus, or parasite) or a condition that lets one grow, such as underprocessing or temperature abuse.
Undeclared allergenA major food allergen present but not declared on the label.
PhysicalForeign material in the food: metal, plastic, glass, wood, bone, pests.
ChemicalLead and other heavy metals, pesticide residue, unapproved additives or colors, cleaning chemicals, toxins.
Labeling or regulatoryNo named hazard: misbranding, import violations, or products made without required inspection.
OtherA stated problem that fits none of the above, such as spoilage or a packaging defect, with no agent named.
UndeterminedThe agency's wording matched none of our rules. The original reason is shown on the record.

Product category

One category per record from the product description and title. Rules are ordered from most specific (infant, prepared foods) to most general (beverages); the first match wins. The finer food tags used elsewhere on the site are kept too.

ValueDefinition
ProduceFresh, cut, or frozen fruits, vegetables, herbs, and sprouts.
MeatBeef, pork, lamb, and products made mainly from them, including deli meats and sausages.
PoultryChicken, turkey, duck, and products made mainly from them.
SeafoodFish and shellfish.
DairyMilk, cheese, yogurt, ice cream, butter, cream.
EggsShell eggs and egg products.
Nuts and seedsNuts, seeds, and butters made from them.
Grains and bakeryFlour, cereal, bread, pasta, baked goods, cookies.
Snacks and confectioneryChips, crackers, candy, chocolate.
Prepared foodsReady-to-eat meals, sandwiches, salads, soups, dips, frozen entrees.
Condiments and spicesSpices, seasonings, sauces, dressings, oils, sweeteners.
BeveragesJuice, water, soft drinks, coffee, tea, and other drinks.
Infant and babyInfant formula and foods marketed for babies and toddlers.
Pet foodFood and treats for animals. FDA files these under food; they are labeled here so they are never mistaken for human food.
Other or unclassifiedNothing in the product description matched a category.

Geography

FSIS lists states explicitly. FDA gives free text ("Nationwide", "CA, NV, and OR", "Distributed in WA only"), which is read for state names and codes; in all-capitals text, two-letter codes are only trusted inside a list, so words like IN and OR are not mistaken for states. CDC per-state case counts give the states for outbreaks.

ValueDefinition
NationwideThe agency says the product was distributed nationwide or throughout the US.
Multi-stateTwo or more named states.
Single stateOne named state.
International onlyOnly distribution outside the US was named.
UnspecifiedThe agency gave no distribution area, or gave one our rules could not read. The original wording is on the record.

Root cause

FSIS codes each recall with a reason; the codes that describe a cause (Misbranding, Processing Defect, Insanitary Conditions, Import Violation, Produced Without Benefit of Inspection) are used directly and marked "coded by the agency". Otherwise keyword rules read the free text. A pathogen finding or an undeclared allergen on its own is a hazard, not a cause, so those records say "not stated" unless the text explains why it happened.

ValueDefinition
Labeling or packaging errorWrong label, wrong package, or an ingredient left off the label.
Supplier or ingredientAn ingredient or component from a supplier was contaminated or recalled.
Process deviationUnderprocessing, temperature abuse, or another step that did not go as designed.
Equipment failureBroken or worn equipment, usually the origin of metal or plastic fragments.
Sanitation or facilityInsanitary conditions or a contaminated plant environment.
Import or inspection violationProduct entered the US without eligibility or inspection, or was made without federal inspection.
Not statedThe agency did not say why the problem happened. This is the honest default: most notices describe the hazard, not its cause.

How it was found

FSIS press releases usually contain a sentence beginning "The problem was discovered when…"; that sentence is read. FDA enforcement reports rarely say, and are marked "not stated". CDC notices are illness investigations by definition.

ValueDefinition
Consumer complaintA consumer or customer reported the problem.
Illness reports or outbreakReported illnesses or an outbreak investigation led to the action.
Firm's own testing or reviewThe company found the problem itself and told the agency.
Another agency or partnerAnother agency, a state lab, or a business partner notified the responsible agency.
Agency sampling or inspectionRoutine agency testing, inspection, or surveillance found it.
Not statedThe notice does not say how the problem was found. FDA enforcement reports never do.

Corrective action

From coded fields: FDA's "voluntary/mandated" and "initial firm notification", FSIS's record type (recall or public health alert), and CDC's "Recall issued" line.

ValueDefinition
Voluntary recallThe firm removed the product from the market. Nearly all US food recalls are voluntary.
Mandated recallFDA ordered the recall.
Public health alertFSIS warned the public without a recall, usually because the product is no longer for sale.
Outbreak investigation, recall issuedCDC's notice says a recall was issued for the implicated food.
Outbreak investigation, no recallCDC's notice says no recall was issued.
Outbreak investigationCDC's notice does not say whether a recall was issued.
UnknownThe source gave no usable information.

Status

Recorded on every record and used to detect closures for the change log, but deliberately not offered as a filter or a headline figure in the explorer. Across agencies "open" is an administrative state meaning the agency has not formally closed the record, not a statement that the product is still a risk: FDA recalls commonly stay "Ongoing" for years after the food is gone. Counting the three agencies' senses of the word together produced a figure that invited exactly that misreading. Each record shows the agency's own word instead. For open CDC investigations specifically, see the open outbreaks list on the overview. FSIS gives only a closing year, not a date; that is recorded as a missing closed date.

ValueDefinition
OpenFDA "Ongoing", FSIS "Active Recall" or an active public health alert, or a CDC investigation CDC lists as open.
ClosedFDA "Completed" or "Terminated", FSIS "Closed Recall" or an archived alert, or an outbreak CDC has declared over.
UnknownThe source gave no status we could read.

Organisms recognized: Listeria monocytogenes, Salmonella, E. coli (STEC), Hepatitis A, Norovirus, Clostridium botulinum, Cyclospora, Cronobacter, Campylobacter, Vibrio, Shigella, Staphylococcus, Bacillus cereus, Clostridium perfringens, mold or yeast, and "unspecified microbial" when the reason describes conditions for growth (underprocessing, temperature abuse) without naming one. Allergens: the nine US major allergens plus sulfites and mustard, recognized only when the reason is about declaration, so "raw milk tested positive for Salmonella" is not a milk-allergen record. Foreign materials: metal, plastic or rubber, glass, wood, bone or pit fragments, pests. Chemicals: lead, other heavy metals, pesticide residue, unapproved additives or colors, cleaning chemicals, mycotoxins, histamine, ethylene oxide, drug residues, radioactive contamination. The exact patterns are in classify.ts.

Missing and inferred information

Data quality right now

Of 3,099 records built Sep 26, 2026, 9:14 PM UTC. "Stated" includes values coded or written explicitly by the agency.

FieldStated by agencyInferred by rulesNot stated / no match
Hazard type75 (2%)2,888 (93%)136 (4%)
Organism or allergen75 (2%)2,796 (90%)228 (7%)
Product category0 (0%)2,904 (94%)195 (6%)
Geography251 (8%)2,535 (82%)313 (10%)
Root cause217 (7%)299 (10%)2,583 (83%)
Detection75 (2%)434 (14%)2,590 (84%)
Corrective action3,090 (100%)0 (0%)9 (0%)
Status3,092 (100%)0 (0%)7 (0%)
Class2,977 (96%)0 (0%)122 (4%)
Closed date2,743 (89%)0 (0%)356 (11%)

How records are verified

  1. Parser tests. Every fetcher and every classification rule has automated tests that run against saved copies of real agency responses before any deploy. A deploy is blocked if a test fails.
  2. Daily live check. Once a day the parsers run against the live CDC, FDA, and USDA sites without writing anything, and fail loudly if a site has changed shape.
  3. Source links on every record. Each record links to the agency notice and, for FDA, to the exact machine-readable record. The agency's own reason, status, and distribution wording are shown unchanged.
  4. Independent failure. If a source cannot be fetched, its previous records are kept unchanged, the site shows a warning, and no "removed" entries are written for that source.
  5. Public history. The dataset files are committed to the public repository on every change, so any past state can be inspected.

How records are updated and logged

The dataset is rebuilt every six hours from a fresh fetch. Each new build is compared with the previous one, record by record, on these fields: status, agency status, class, hazard type, agents, product category, root cause, detection, corrective action, geography, states, updated date, closed date, outbreak cases, hospitalizations, deaths, firm, product, reason, and rules version. The change log records:

Each record carries the version of the rules it was classified under. When the rules change, the version is bumped, every record is reclassified on the next build, and each record whose labels moved gets an "updated" entry that names the rule change. Log entries are kept for 400 days; older history remains in the repository.

Rules history

Limitations to keep in mind

Reusing the data

The full dataset with every field is data/signals.json in the repository, and the change log is data/signals-changelog.json. The compact version the explorer loads is at signals/data.json. Any filtered view in the explorer can be downloaded as CSV. All of it is derived from public US government data; please cite the agency notice for anything that matters.