Vet Meds Recall

Specific database for veterinary medicine recalls. Protect your pets by checking batch numbers against FDA reports.

Veterinary adverse-event reports
Every record here comes from api.fda.gov/animalandveterinary/event.json — the FDA Center for Veterinary Medicine's adverse-event database, as reported by veterinarians, animal owners and manufacturers. Search it, filter it, and read the whole record. Nothing on this screen is estimated, smoothed or filled in: a field the report did not carry is shown as absent, not as zero.
Informational only — this is not veterinary advice. These are voluntary reports. A report that names a drug does not establish that the drug caused what happened, the FDA does not verify every submission, and the same event can be reported more than once. Never start, stop or change an animal's medication because of this page — talk to your veterinarian, and check the FDA's own animal & veterinary safety pages.
No query run yet
—
Recalls & enforcement reports
FDA enforcement reports for the products people give animals. Search runs against both food/enforcement.json and drug/enforcement.json and every row says which dataset answered.
No query run yet
—
Signals
openFDA can count as well as list. Every chart below is one count= query against the veterinary adverse-event endpoint, drawn from exactly the rows the API returned. A count is a count of reports, not of animals harmed, and it carries no denominator of how many animals took the drug — so it tells you what is reported often, never what is dangerous.
No counts run yet
Reported reactions (VeDDRA terms)

Press Count to ask openFDA for the most frequently reported reaction terms.

Species named in the reports

Press Count to ask openFDA which species these reports are about.

Brand names

Press Count to see which product names appear most often in this slice.

Active ingredients

Press Count to see the ingredients named in this slice.

Reports per year

A year with no reports leaves a gap in this line rather than a straight segment across it. Press Yearly series to build it.

Reaction × species matrix
One count query per species, over the same reaction terms, so the rows can be compared. Cells are report counts; a species that returned nothing for a term shows an em dash rather than a zero, because "no report carried this pair" and "openFDA did not answer" are not the same statement.
Compare two terms
The reaction profile of two search terms side by side, as grouped bars, from two real count queries. Useful for "does this ingredient's report mix look like that one's" — and useless for "is it safer", which no report count can answer.
Share of a term's reports
How large a share of one term's reports name a given reaction, computed from two real queries — the numerator and the denominator are both printed, because a percentage whose denominator is hidden is a number nobody can check.
Species
The animal side of a report: which species, which breeds, how old, how heavy, and how it ended. Ages and weights arrive in mixed units, so this page converts what it can and counts what it cannot rather than dropping it quietly.
No profile built yet
Reactions reported for this species
One count= query over every report openFDA holds for this species, not a sample. A count of reports, not of animals harmed.

Pick a species above and press Build profile.

Breeds named
Reports that recorded no breed are counted on their own row rather than folded into "other", because a missing breed is a fact about the report, not about the animal.
Outcome mix
One report can carry several outcome rows; each is counted once. Reports with no outcome recorded are named below the chart rather than omitted.
Age of the animals
Ages are converted to years where the report gave a unit this page can convert. Anything else is excluded and counted, never guessed.
Weight of the animals
Weights are converted to kilograms where the unit allows it. Pounds and grams convert; an unrecognised unit is excluded and counted.
Compare species on one reaction set
Pick up to four species and one term. Each species gets its own count query over the same reaction terms, so the bars are comparable — and each species' own report total is printed beside it, because a taller bar for a species that has ten times as many reports is not a finding.
Watchlist
Things you want to keep an eye on: a brand, an active ingredient, a recalling firm, or a species-and-reaction pair. Each entry is re-queried against openFDA and told you how many reports are newer than the last time you looked.
Add something to watch
Case files
A case file is a named snapshot: the query you ran, the exact openFDA URL, the rows that came back and any note you wrote. Saving, opening, renaming, duplicating and deleting them is free and unlimited on both plans — and importing one is free too, so nothing you have saved is ever trapped in here.
Workbench
Build a query field by field and see the URL it produces, keep the ones you run often, freeze a result set as a cohort, cross-tab two fields over it, and take the whole session away as a file that says where every number came from.
Query builderanimalandveterinary/event.json
Add a clause at a time. The Lucene expression openFDA will receive is printed under the rows, so you can check it, copy it, or paste it into the raw box below and edit it by hand.
The expression
No clauses yet.
Write the query yourself
The search= value, exactly as openFDA will get it. Nested groups, ranges and .exact fields all work; anything openFDA rejects comes back as its own error message rather than as an empty list.
Saved searches
Cohorts
A cohort freezes the rows currently loaded in Reports, with the query and the URL that produced them, so a later cross-tab is over a set that cannot silently change under you.
Cross-tab
Two fields against each other over one cohort, counted in your browser from the rows the cohort holds. Rows where a field is absent get their own "not recorded" line instead of being dropped, because dropping them would quietly change the totals.
Query audit
Every request this session made, with the URL and the total openFDA reported. This is what turns "I found 41 serious reports" into something someone else can run and get 41 from.
Report builder
Assemble what is on screen into one document: pick the sections, add a note, and take it as a print sheet or as JSON. Sections you have not built yet are listed as unavailable with the reason, never silently skipped.
Workspace
Everything this app knows about your work in one file — the watchlist with its notes and tags, your saved searches, your cohorts, your case files and the query audit. Not one view: all of it.
About the data
What this app reads, what it will not do with it, and where each number came from.
The sources
What these records are not

An adverse-event report is a report. Somebody — usually a veterinarian, an owner or the manufacturer — told the FDA that something happened after an animal was given a product. That is all it is.

  • It does not establish cause. The animal may have been ill already, may have had another medicine, or the timing may be coincidence. openFDA says so itself and so does this page.
  • It has no denominator. Nothing here says how many animals took the product without incident, so a product with more reports is not a product with a higher rate.
  • Reporting is uneven. A newly launched or heavily publicised product attracts reports. So does a product used in millions of animals. Neither is a safety signal on its own.
  • The same event can appear twice. Follow-ups and duplicate submissions exist in the dataset and this app does not de-duplicate them, because deciding two records are the same animal is a judgement it has no grounds to make.

This app will not compute a risk score, a severity index or a prediction from any of that. There is no model in this page. Every figure on every screen is either a number openFDA returned or a count of rows you can see.

Absent, or unreachable — they are different

Three things can make a cell on this page empty, and each one asks you to do something different, so each one says something different:

not recorded
openFDA answered and the record simply does not carry that field. That is knowledge — stop looking for it here.
request failed
The call to openFDA did not come back. Nothing has been substituted; retry, or come back later.
still loading
The request is in flight. The cell is not empty, it is not finished.

A derived figure — a dose per kilogram, a share of reports — is only as knowable as its inputs. Where an input is missing, the derived value says its input was missing rather than printing a number computed from a guess.

Field reference
The fields this app reads, the openFDA path each one comes from, and what it is used for.
Free and Student Boost
Licence and attribution
openFDA data is published by the U.S. Food and Drug Administration and is in the public domain in the United States. The FDA does not endorse this application and has not reviewed it. See the openFDA terms of service and the rate limits — 240 requests per minute per IP for anonymous callers, which is what this page is.