Food barcodes · Open Food Facts, the FDA and the USDA, read as you ask
What is in it,
and whether it was recalled.
Every packaged food carries a number under its bars. Give this page that number — scan it with your camera, or type it — and it asks Open Food Facts, the open database of food products, what the pack says: the ingredients, the allergens, the nutrition table. Then it asks the two federal recall registers that cover food, the FDA’s enforcement reports and the USDA’s meat, poultry and egg recalls, whether any report names that barcode or a product like it.
A recall found by the barcode’s own digits and a recall that only resembles the product by name are different things, and every match here says which of the two it is. Nothing is filled in: a product the database does not hold is reported as exactly that, and so is a source that will not answer.
Three public sources, no key and no account · the camera opens only when you press Scan and is released when the scan ends · the picture never leaves your device
The desk
A barcode in. The label and the recalls out.
EAN-13, UPC-A and EAN-8 — the barcodes on nearly every packaged food — and the short UPC-E on cans when you type it, or where your browser’s own detector reads it. The last digit of a barcode checks the others, so a mistyped number is caught here before any source is asked.
Pantry
ready
The digits printed under the bars. Spaces and hyphens are fine.
Not medical or allergy advice. A product database can be wrong or out of date, and so can a list of recalls. The label on the pack in your hand is the authority on what is in it; ask a doctor, a pharmacist or the maker about anything that matters to your health.
Nothing looked up yet. Scan a pack, type its number, or start from one of these barcodes:
No source has been asked yet.
Looked up on this device
Reading a result
A match by digits, and a match by resemblance.
A recall report is a paragraph of text written by a person. Some print the barcode; many do not. So every report on a result carries one of four labels, and they do not mean the same thing.
How it was matched
- Exact barcode
- The report’s own text prints this barcode, whole: as 12 or 13 digits, as a 14-digit GTIN, solid or grouped with spaces or hyphens. The page finds the digits in the text itself and shows them marked. A barcode of eight digits (an EAN-8, or the short UPC-E on a can) is called exact only where the report itself calls those digits a barcode — “UPC 00818377” — because a lot number or a date is eight digits too.
- Barcode, short form
- The report prints the barcode with a digit left off — no check digit, or no leading 0, which some firms do. The digits that are there all agree. Very likely the same product; the missing digit is why it is not called exact.
- Same eight digits
- The report holds the eight digits of this barcode and does not call them a barcode: in “Lot Numbers: 60947409, 60991812” they are lot numbers. It is listed so that you can read it for yourself. It is not counted as a match.
- Name similarity
- The page did not find this barcode in the report. The report names the same brand and shares words with the product’s name, and the page says how many. It may be this product, another size or flavour of it, or something else from the same maker. It is a resemblance, never a finding. Where Open Food Facts gives a product no brand, the maker cannot be compared at all: reports that hold every telling word of its name are listed apart, closed, and are not counted.
What a match does not tell you
A barcode names a product, not a pack. A recall almost always covers certain lots, dates or plants — the report lists them, and this page prints that list beside each FDA match. Whether your pack is one of them is on the pack: compare its lot code and date with the report.
No match is not a clearance. The FDA’s reports appear only after a recall is classified, which takes weeks; many reports print no barcode at all; and a recall outside the United States is on neither register. When the page says it found nothing, that is what it found in these two registers today, searching for this number in the forms it searches for and for this name — no more. A barcode that a report prints in some unusual grouping is not found by its digits.
Class, status and dates
Each match carries the agency’s own class (I, II or III) and the dates the register gives. What the three classes mean, and how long a recall takes to be published, is set out on Recall, which lists every recall by date; this page is only the barcode’s view of the same registers.
An FDA report’s status — Ongoing, Completed or Terminated — is printed as the report has it. The FDA says itself that it does not keep that status current after a recall is classified, so read “Ongoing” as “ongoing when the FDA last touched the report”. A USDA notice carries the type FSIS lists it under — Active Recall, Closed Recall or Public Health Alert — as FSIS gives it.
Method
Three sources, what each knows, and where a barcode goes.
The product: Open Food Facts
Open Food Facts is a database of food products made by
volunteers who photograph packs and type in what the label says. The name, brand,
quantity, ingredients, allergens, traces and nutrition on a result are its record for that
barcode, read through its public API (world.openfoodfacts.org/api/v3/product/),
with the day its record was last edited. Its Nutri-Score letter and NOVA group, where it has
them, are scores Open Food Facts computes; they are printed as its own.
How fresh. A small relay on this site asks Open Food Facts and keeps each answer for six hours (fifteen minutes when the answer is “no such product”), so a correction made there can take that long to show here. Every result prints when the record was read and how old the relay’s copy is.
Licence. The database is © Open Food Facts contributors, under the Open Database License 1.0; its individual contents are under the Database Contents License 1.0; product photographs are under Creative Commons Attribution-ShareAlike 3.0 and may show packaging whose design belongs to its maker. Every product here links to its page on openfoodfacts.org, where anyone can correct it.
The recalls: the FDA and the USDA
FDA. The food enforcement reports the FDA publishes through openFDA
(api.fda.gov/food/enforcement.json): the food recalls the FDA monitors, each
added once it has been classified, republished weekly — the stamp under a result
prints the date openFDA gives for its last update. The oldest report it returned when this
page was built, on 6 October 2026, was dated 20 June 2012. The relay asks two
questions: which reports hold this barcode’s digits — solid, or cut into two,
three or four runs by spaces or hyphens in the ways barcodes are usually printed —
and which reports’ product descriptions hold the brand (the hundred newest of each).
The page then reads every report either question returns for the digits itself. On the
500 newest reports of 6 October 2026 the first question found every one of the 228
barcodes printed after the word UPC, GTIN or EAN; a barcode cut up some rarer way, or run
together with letters, it would not find. Data
provided by the U.S. Food and Drug Administration (open.fda.gov),
public domain under CC0 1.0. openFDA asks that nobody rely on it for decisions about medical care.
USDA. The Food Safety and Inspection Service’s recalls and public health alerts for
meat, poultry and egg products (fsis.usda.gov/fsis/api/recall/v/1), this
year’s and last year’s. Your browser reads that register directly; if it is
turned away, the relay the Recall desk uses asks instead, and failing
both the page shows the last copy this browser kept, with its date. A register your browser
has read is used again for half an hour, and the result says how old it is. A work of the
U.S. government, in the public domain.
Which FDA route. openFDA allows 1,000 questions a day from one address without a key and 120,000 with one. This site’s relay works without a key and uses one when the server has it, and stops itself under half of either allowance (480 a day without a key). The stamp under a result says which route the relay reads by, keyless or keyed — for a copy the relay already held, its route now — and a key never reaches your browser. When the relay has spent its allowance, or cannot be reached, your browser asks the source itself and the stamp says directly.
What is worked out here
The check digit (from the right, digits weigh 1, 3, 1, 3 … and the sum must end in 0). The scan: the browser’s own barcode detector where it has one; where it does not, this page’s decoder, which reads EAN-13, UPC-A and EAN-8 from the camera’s frames and believes a barcode only when two lines across it, or two frames, agree and the check digit holds. The matching: the page searches each report’s text for the barcode’s digits itself, and counts shared words for a name match; the labels on a result are its own. Rounding: nutrition figures are printed to a few digits for reading (energy to the whole number, grams to two decimals at most, and to two significant digits below a gram); the product’s page has them in full.
What this page does not know
- Products nobody has added to Open Food Facts, and anything its volunteers typed wrong or have not updated since a recipe changed.
- Which lots and dates of a product a recall covers, beyond the report’s own words, and whether your pack is one of them.
- Recalls the FDA has announced but not yet classified, FDA reports from before June 2012, USDA notices from before last year, and recalls outside the United States.
- Recalls of pet food, medicines, cosmetics and other goods: the Recall desk carries the other federal registers.
- Whether a name match is the same product. It says how alike the words are, and stops there.
- Whether a report prints the barcode in a form its search does not ask for: the FDA is asked for the digits solid and in the usual groupings, not in every way twelve digits can be cut.
- What a number a shop made up for itself stands for. Barcodes that begin 2 (or 02 or 04 as a twelve-digit UPC) are assigned by shops, for their own packs and weighed goods: another shop may use the same number for something else.
When a source does not answer
Each source is reported on its own line. If one is slow, down or refusing, the result says which, in the source’s or the relay’s own words, and shows the last answer it has with the time that answer was read — the relay’s copy, or the one this browser kept. If there is none, that part of the result stays empty and says so. Nothing is estimated.
Where a barcode, and your camera’s picture, go
The picture goes nowhere. Frames are read inside this page and discarded; nothing is recorded or uploaded, and the same is true of a photo you choose. The camera is asked for only when you press Scan, and every track is stopped when a barcode is read, when you press Stop, after a minute without a read, and when you leave or hide the page.
The number goes from your browser to this site’s two relays
(pantry/off-relay.php, pantry/fda-relay.php) and from them to
Open Food Facts and openFDA, which see this server, not you. The relays keep the answer,
not who asked; they count requests per address for a few minutes, under a keyed hash, to
stop a flood. Three things do reach a source from your own browser: the pack photo, which
loads from Open Food Facts’ image server; the USDA register, which holds no barcode
in its address; and, only when a relay cannot ask (it is resting, over its allowance,
unreachable, or the source did not answer it), the question itself.
The address of this page holds no barcode unless you open or copy a link to a result
(#code=); the site’s analytics may record an address as it stands. The
last twelve barcodes you looked up, with their results, are kept in this browser so a
result survives a source being down; Forget these deletes them.
Questions and corrections: labs@labs.llc.