Every material error we have found in our own published numbers, what caused it, and what changed. Newest first. We also log the corrections we rejected; a page that only shows the times we were wrong is marketing, not accountability.
Why this page exists.
We publish statistics that people may act on. The only thing that makes a number trustworthy is a visible history of what happened when it was wrong. Nobody else in this category publishes one. We would rather show you the 10 times we corrected ourselves than have you assume we never needed to.
If you are right we will fix it and credit you here. If you are wrong we will show our working and log that too.
The log
A readout row scrambled three companies' facts into one entry2026-08-10 · Readout calendar
An estimated-readout row on /readouts listed ticker ABCL (AbCellera) with drug LY3819253 (Eli Lilly's code for bamlanivimab, an AbCellera-discovered COVID antibody no longer in this kind of development) and linked trial NCT06226571, which belongs to a Syndax Pharmaceuticals AML study. Three unrelated facts joined into one row by the trial-estimate pipeline. Our own integrity report had flagged the ABCL date conflict for reconciliation; it was not acted on until AbCellera's real catalyst, ABCL635, correctly tracked separately as a company-guided Q3 2026 readout; reported positive Phase 2 results on Aug 10 and we went looking. The scrambled row is removed. The company-guided row was correct throughout and is now marked reported, with the company release linked.
We published an FDA Complete Response Letter for SELLAS that never happened2026-08-03 · Decision archive
A page at /fda-decision/SLS-2025-02-20 stated that SELLAS Life Sciences received a Complete Response Letter on Feb 20, 2025, and /ticker/SLS repeated it as “1 past FDA decision”. No such decision exists. A CRL can only follow a submitted marketing application, and SELLAS has never submitted one: galinpepimut-S is still in the Phase 3 REGAL trial and SLS009 is in Phase 2. As of 2023 the company had only held a Type C meeting with the FDA about a future BLA filing strategy.
How it happened. The page was generated by the price-only tier of our decision archive, which infers an outcome from the stock reaction around a date rather than reading a filing. It saw a date and a price pattern and minted a regulatory event. It carried a “price-only (validating)” label, but it also carried a definitive title and a “CRL” badge, which is not an honest way to present something we had not verified. Our own SLS tracker said at the same time that GPS was still in Phase 3, so the site contradicted itself.
What we did. Deleted the page, removed it from the archive and from the ticker hub, and 301’d the URL to /sls. We are also reviewing how the whole price-only tier is presented, because a badge that looks identical to a verified outcome is the real defect here, not this one row. Found by an external red-team audit, not by us.
Two more royalty holders were listed as if they were the FDA applicant2026-07-21 · PDUFA calendar
While filling in drug names for undated rows we found two catalysts attributed to the wrong company. ANAB (AnaptysBio) was shown on the 2026-12-12 imsidolimab decision for generalized pustular psoriasis, but Vanda (VNDA) holds the exclusive global license and is the BLA applicant; AnaptysBio receives a royalty. And IONS (Ionis) was shown on the 2026-10-26 bepirovirsen decision for chronic hepatitis B: that is GSK’s application (GSK licensed the drug from Ionis), and it duplicated the correct GSK row on the same date. Both Ionis rows were royalty interests, not FDA decisions. Removed. Same rule as before: a royalty holder does not have a PDUFA date: only the applicant does.
We listed three companies on an FDA decision they had nothing to do with2026-07-19 · PDUFA calendar
The 2026-08-17 Keytruda + Padcev perioperative muscle-invasive bladder cancer decision was shown under six tickers. Three were real: MRK (Merck, the sBLA sponsor) and PFE/ALPMY (Pfizer and Astellas, who co-own Padcev). Three were not: BNTX (BioNTech), CTMX (CytomX) and EVAX (Evaxion) are not parties to that application. Evaxion is a Danish AI-vaccine microcap with no bladder-cancer BLA. The same fault put MIRM (Mirum) on Incyte’s zilurgisertib.
Cause. Rows were joined on drug/indication text with no sponsor key: a many-to-many join. The bad rows were diagnosable from the payload itself: they resolved no market cap while their real siblings did, and carried a different indication string. We now join on sponsor/applicant, and a CI guard fails the build when a ticker with no market cap appears beside a resolved one on the same date and drug.
Also corrected. That Keytruda + Padcev application was approved on 2026-07-10, so the Aug-17 row should have been retired regardless. Our decided-event sweep removed MRK and PFE but missed ALPMY, because it only retires a ticker that has its own entry in our decision archive: a partner ticker on a decided event survived. Fixed, and the guard now also fails any past-dated multi-ticker event.
We removed ONC (BeOne Medicines) from the 2026-08-25 zanidatamab decision and RPRX (Royalty Pharma) from the 2026-09-18 zidesamtinib decision. Both are genuine counterparties; BeOne holds Asia ex-Japan rights, Royalty Pharma holds a royalty, but neither is the US applicant, and a royalty holder does not have an FDA decision. Jazz and Nuvalent are the sponsors.
Market-cap tiers were assigned with hindsight2026-07-12 · conference study
Every presentation in the conference study was bucketed by the company's market cap today. That is a look-ahead error: a company that was a $900M mid-cap when it presented in 2018 and has since collapsed to $40M was filed under nano, so the nano bucket was quietly enriched with companies that later fell apart, and its negative run-up was partly just measuring the collapse. We now compute market cap as of the day of each presentation, from SEC-reported shares outstanding × the split-unadjusted close. (Splits matter: the universe contains 208 reverse-splits; multiplying split-adjusted prices by as-reported share counts overstates historical caps by the split factor.) 17% of events changed tier. The finding survived; nano is still the worst cohort, but the number moved from −9.84% to −7.11% and two tiers changed sign.
We deleted a real conference, then put it back2026-07-12 · conference study
We pulled a row labelled “ANE” (n=47) from the conference table and said it was “not a conference at all: a parsing artifact.”That was wrong. “ANE” is a garbled letter-order of ENA, the AACR-NCI-EORTC International Conference on Molecular Targets and Cancer Therapeutics, a real annual October meeting. The meeting was real; its code was mangled, and two of its six stored dates were corrupt (a March and a June date on an October conference), which dragged unrelated presentations into the bucket. We split it: 23 events with October dates restored as ENA, 24 with unverifiable labels marked unknown. “This data looks like garbage” is a hypothesis, not a finding. We deleted first and checked second.
Our crawler was inventing conference presentations that never happened2026-07-12 · conference calendar
A press release saying “Presented data at ESMO 2025” was being read as an upcoming 2026 catalyst. The year detector, unable to read a year from the text, defaulted to the filing year and then projected a future date, so a memory of a past presentation became a forward-calendar event. 74 of 121 projected rows were past-tense history sold as future; one was dated to 2027. None reached the study (it only prices exact dates), but 26 would have gone on the public conference calendar. The crawler now refuses to emit a date after the filing date unless the filing actually says the company will present.
We hedged a number we could have simply printed2026-07-12 · readout study
The cross-catalyst table printed the PDUFA run-up as “≈0%.” On a site that puts an n next to every figure, a tilde is not good enough. The number is +0.57% (n=1,792), so we print +0.57%. It does not change the conclusion. It stops us rounding in our own favour.
The homepage did not fit on a phone2026-07-11 · site
The homepage; our most-crawled page: was never migrated to the shared responsive header. It overflowed horizontally by 220px on a 390px phone, because its two-column grid only collapsed below 820px and CSS grid children default to min-width:auto, so the sidebar refused to shrink. Fixed, and a CI test now fails the build if any page can overflow.
We retired one of our own models for being wrong2026-07-11 · methodology
Our internal Conference Overlay claimed nano- and micro-cap conference presenters ran up +4.88% into the event. Our own 1,425-event study found the nano median was negative. The overlay was built on a thin, biased sample and it did not survive contact with the full dataset. It is retired and refuted, and the tool that served it now returns a refutation notice instead of a score.
A drug was on our calendar that had already been approved2026-07-11 · calendar
CORT (relacorilant) was showing a July 2026 PDUFA date. The FDA had approved it on 25 March 2026: roughly fifteen weeks early. Our crawler had re-added it to the forward calendar from its original PDUFA date without reconciling against decided events. Removed, and a reconciliation guard added.
We refused to publish our most quotable statistic2026-07-10 · readout study
We could have written “68% of clinical readouts do nothing.” It would have travelled. We did not publish it, because the “flat” bucket it came from spans −14.9% to +5.0%: a 20-point range is not “nothing,” and calling it that would have misled every reader who acted on it. We published the honest cut instead: 56.5% of readouts land within ±5%. Less punchy. True.
We rejected a bug report that would have broken the dataset2026-07-10 · readout study
A reviewer reported that our 1-day return column was scaled wrong and that the 25th percentile was −521%. We checked before acting: the column is already expressed in percent, matches the raw prices for 93.9% of events exactly, and the real 25th percentile is −5.19%. The reviewer had treated a percentage as a fraction. Acting on the report would have corrupted our most valuable dataset. We log rejected corrections too; a corrections page that only shows the times we were wrong is marketing.
A model feature was counting a company's CRLs against a drug2026-07-12 · internal model
prior_crl_count ran as high as 26. No drug has 26 complete response letters, but a large generic manufacturer plausibly has 26 across its whole portfolio. The feature was counting at the company level. Because it is z-scored, those 28 rows inflated the feature's standard deviation by 151%, compressing the CRL signal to roughly a third of its true strength for every event in the model. Capped. The model must be retrained for the fix to take effect, and it has not been yet.
What we will never do.
Publish a per-drug approval probability. Publish a win rate. Publish a number we cannot defend against the raw data. Quietly change a figure without saying so on this page.
Not affiliated with or endorsed by the FDA or any medical society. pdufa.bio is an independent publication with no affiliation with, endorsement by, sponsorship by, or connection to the U.S. Food and Drug Administration or any other government agency. “FDA”, “PDUFA” and all company, drug and ticker names are used descriptively and remain the property of their respective owners.
Informational and educational purposes only. Not investment advice. Nothing on this page is investment, legal, tax or medical advice, or an offer or solicitation to buy or sell any security. pdufa.bio is not a registered investment adviser or broker-dealer and does not recommend trades or publish individual-drug approval probabilities. Verify every date and outcome against primary FDA, SEC or company filings. Data is provided as is, without warranty of any kind, and past behaviour does not predict future outcomes.