Work FAERS Explorer
Reports of harm for one heartburn drug exploded in 2020. Nothing about the drug had changed.
Python · pandas · matplotlib · Streamlit · openFDA API
The finding
The spike tracked a wave of litigation, not new clinical harm. Report counts measure how much attention a drug is getting, not how dangerous it is.
Method
Live dashboard over the FDA adverse-event database via the openFDA API — per-drug reactions, reports per year, and reporter demographics, with the caveat built into the interface rather than the footnotes.
So what
If you are valuing a drug, pricing litigation exposure, or reading a safety headline, a rise in reports is not evidence of a rise in harm. Treating the two as the same thing is how a molecule gets mispriced.
Interactive
Scrub the timeline of Zantac adverse-event reports per year; the post-2019 spike is driven by an FDA recall and litigation, not new harm.
A spike isn't always a safety signal.
Zantac (ranitidine) adverse-event reports per year. Drag along the timeline and watch what happens after 2019.
Report counts measure attention, not harm. The first question for any spike is "what else happened that year?"
Full write-up
What it does
You pick a drug and the dashboard returns:
- Its top reported adverse reactions (by report count)
- Reports filed per year
- Age and sex breakdown of reporters
There is also a built-in panel explaining what these numbers actually measure. FAERS counts are driven by who files reports, not by how often an adverse event occurs in patients. More reports for a drug does not mean the drug is more dangerous — it can mean it is more widely used, more scrutinised, or that a safety signal has already been publicised. The dashboard makes that explicit.
Why I built it
I kept reading pharmacovigilance literature that cited FAERS counts without that caveat. I wanted a tool that showed the data and the caveat together, so the interpretation is part of the interface.
Stack
Python · pandas · matplotlib · Streamlit · openFDA API