Why 90% of Drug Candidates Fail – and How to Beat the Odds
Drug development has a brutal attrition rate. Of every 10,000 compounds that enter preclinical screening, only about 10 make it to clinical trials, and only 1 or 2 will ever reach patients. The numbers are staggering: a 2023 analysis from the Tufts Center for the Study of Drug Development put the average cost of bringing a single drug to market at $2.6 billion, with most of that cost absorbed by the failures.
The question is not whether compounds will fail – they will. The question is when they fail. A compound that fails in a $50 computational screen saves the project. A compound that fails in Phase II clinical trials after $200 million in investment destroys it. This is why ADMET prediction matters: it moves failure forward, catching pharmacokinetic and toxicity liabilities before a single gram of compound is synthesized.
The five ADMET properties – Absorption, Distribution, Metabolism, Excretion, and Toxicity – collectively determine whether a molecule that binds a target in a test tube can actually become a medicine that works in the human body. History is littered with potent molecules that failed spectacularly because nobody checked ADMET early enough.
In this guide, we will walk through real examples of drugs that failed due to ADMET liabilities, show you how to screen compounds using modern AI-powered prediction, and compare the major ADMET tools available today. By the end, you will be able to batch-screen your own compound library and interpret every result.
Real Drugs That Failed: Lessons from ADMET Disasters
Terfenadine – The hERG Channel Catastrophe
Terfenadine (Seldane) was one of the best-selling antihistamines of the 1980s, generating over $700 million in annual revenue at its peak. It worked beautifully for allergies. Then patients started dying of cardiac arrhythmias. The problem was hERG channel inhibition: terfenadine's parent compound blocked the human ether-a-go-go-related gene (hERG) potassium channel, prolonging the QT interval and causing fatal torsades de pointes. The SMILES for terfenadine is OC(CCN(C1CC1)C2CC2)(c3ccccc3)c4ccc(C(C)(C)C)cc4.
Under normal circumstances, the liver rapidly metabolizes terfenadine into fexofenadine (which does not block hERG). But when patients took ketoconazole or erythromycin – both CYP3A4 inhibitors – terfenadine accumulated in the blood at dangerous levels. The FDA pulled Seldane from the market in 1998. Today, every drug candidate is screened for hERG liability as a mandatory safety gate. Modern ADMET-AI models predict hERG inhibition with AUC-ROC above 0.88, catching compounds like terfenadine before they reach patients.
Troglitazone – The Hepatotoxicity Nightmare
Troglitazone (Rezulin) was the first thiazolidinedione approved for type 2 diabetes in 1997. It was a breakthrough drug – until it started causing fatal liver failure. Within three years, at least 63 patients died from troglitazone-induced hepatotoxicity, and the drug was withdrawn worldwide in 2000. The compound (Cc1c(C)c2OC(C)(COc3ccc(CC4SC(=O)NC4=O)cc3)CCc2c(O)c1C) forms reactive metabolites through CYP3A4 oxidation that covalently bind to liver proteins, triggering immune-mediated hepatocellular damage.
Troglitazone illustrates a critical ADMET dimension: reactive metabolite formation. The parent drug may look safe, but its metabolic products can be toxic. Modern ADMET tools predict hepatotoxicity risk, CYP-mediated bioactivation, and structural alerts for reactive metabolite formation. If troglitazone had been screened through today's ADMET-AI models, the quinone-forming chromanol ring would have triggered both hepatotoxicity and reactive metabolite alerts.
Lorcainide – The CAST Trial Shock
Lorcainide was developed as an antiarrhythmic drug in the 1980s. It suppressed irregular heartbeats in post-heart-attack patients, and on paper, this should have saved lives. The Cardiac Arrhythmia Suppression Trial (CAST) revealed the opposite: patients taking lorcainide and similar drugs died at 2.5 times the rate of the placebo group. The drug had excellent absorption and target engagement, but its metabolic profile generated pro-arrhythmic metabolites that accumulated during chronic dosing.
These failures share a common thread: the compounds were potent at their targets but had catastrophic ADMET profiles that were not caught early enough. Modern computational screening does not eliminate all risk, but it dramatically reduces the chance of advancing a fundamentally flawed molecule into expensive development stages.
Lipinski's Rule of Five: The Foundation (and Its Limits)
Before we discuss modern AI-powered ADMET, we need to understand Lipinski's Rule of Five – the framework that started it all. In 1997, Christopher Lipinski at Pfizer analyzed the properties of orally active drugs and found that poor absorption is more likely when a compound violates two or more of these rules:
- Molecular weight ≤ 500 Da
- LogP (octanol-water partition coefficient) ≤ 5
- Hydrogen bond donors ≤ 5
- Hydrogen bond acceptors ≤ 10
These rules remain a useful first filter. If your compound violates three or four Lipinski criteria, it almost certainly has oral bioavailability problems. But the Rule of Five is just a starting point. It says nothing about metabolism, toxicity, or distribution. It cannot distinguish between a compound that is merely large (violating MW) and one that is actively toxic. And it misses entire classes of successful drugs – cyclosporine (MW 1203, 11 HBD) violates every single rule yet has been used for decades.
More importantly, Lipinski operates on simple thresholds. It cannot tell you how much a compound deviates from drug-like space, or predict specific liabilities like hERG inhibition or CYP3A4 interaction. For that, you need modern ADMET models.
Beyond Lipinski: What Modern ADMET-AI Predicts
Modern ADMET prediction tools use graph neural networks, transformers, and ensemble models trained on hundreds of thousands of experimental datapoints. The SciRouter ADMET endpoint, powered by ADMET-AI, predicts over 20 individual endpoints organized across the five ADMET dimensions. Here are the most important ones.
Absorption Endpoints
Caco-2 permeability predicts how well a compound crosses the intestinal epithelium, measured as apparent permeability (Papp). Values above 8 x 10-6 cm/s indicate high absorption; below 2 x 10-6 indicates poor absorption. Human intestinal absorption (HIA) provides a binary classification – will the compound be absorbed or not? Oral bioavailability (F20%) predicts whether at least 20% of the dose reaches systemic circulation, accounting for both absorption and first-pass metabolism.
Distribution Endpoints
Plasma protein binding (PPB) determines how much drug is bound to albumin and other plasma proteins versus free to act at the target. Compounds with PPB above 95% may have insufficient free drug concentrations. Blood-brain barrier (BBB) penetration is critical for CNS drugs (you want it) and equally critical for non-CNS drugs (you often do not want it, to avoid neurological side effects). The model predicts binary BBB permeation with an AUC-ROC of 0.90.
Metabolism Endpoints
CYP inhibition is predicted for five major isoforms: CYP1A2, CYP2C9, CYP2C19, CYP2D6, and CYP3A4. These enzymes metabolize approximately 75% of all marketed drugs. Inhibiting them causes drug-drug interactions – if your compound blocks CYP3A4, every patient also taking a statin, immunosuppressant, or calcium channel blocker is at risk. Microsomal stability predicts how quickly the liver breaks down your compound. Half-lives under 30 minutes often mean the drug is cleared too fast for a practical dosing regimen.
Excretion Endpoints
Clearance predicts the rate at which the body eliminates the compound. High clearance means frequent dosing or infusion; very low clearance risks accumulation and toxicity. Half-life combines distribution volume and clearance to predict how long the drug stays in the body. Ideal oral drugs typically have half-lives between 4 and 12 hours, enabling once- or twice-daily dosing.
Toxicity Endpoints
hERG inhibition is the cardiac safety gate – the terfenadine lesson made this mandatory. AMES mutagenicity predicts whether the compound causes DNA mutations in the standard bacterial reverse mutation assay. A positive AMES result is typically a hard stop for non-oncology programs. Hepatotoxicity (DILI) predicts drug-induced liver injury risk. Skin sensitizationflags compounds likely to cause allergic contact dermatitis.
Hands-On: Screening 10 Compounds Through SciRouter
Let us put this into practice. We will screen 10 real compounds through the SciRouter ADMET API – a mix of approved drugs and known failures – and interpret the results. This demonstrates exactly how you would triage your own compound library.
import scirouter
client = scirouter.SciRouter(api_key="sk-sci-YOUR_KEY")
# 10 compounds: approved drugs + known ADMET failures
compounds = {
"aspirin": "CC(=O)Oc1ccccc1C(=O)O",
"ibuprofen": "CC(C)Cc1ccc(cc1)C(C)C(=O)O",
"metformin": "CN(C)C(=N)NC(=N)N",
"atorvastatin": "CC(C)c1n(CC[C@@H](O)C[C@@H](O)CC(=O)O)c(c2ccc(F)cc2)c(c1c3ccccc3)C(=O)Nc4ccccc4",
"terfenadine": "OC(CCN(C1CC1)C2CC2)(c3ccccc3)c4ccc(C(C)(C)C)cc4",
"troglitazone": "Cc1c(C)c2OC(C)(COc3ccc(CC4SC(=O)NC4=O)cc3)CCc2c(O)c1C",
"celecoxib": "Cc1ccc(cc1)c2cc(cf3)n(n2)S(=O)(=O)c4ccc(N)cc4",
"ritonavir": "CC(C)c1nc(cs1)CN(C[C@@H](O)[C@H](Cc2ccccc2)NC(=O)O[C@H]3CO3)C(=O)[C@@H](NC(=O)c4cncs4)C(C)C",
"verapamil": "COc1ccc(CCN(C)CCCC(C#N)(c2ccc(OC)c(OC)c2)C(C)C)cc1OC",
"caffeine": "Cn1c(=O)c2c(ncn2C)n(C)c1=O",
}
# Screen all compounds
for name, smiles in compounds.items():
result = client.chemistry.admet(smiles=smiles)
print(f"\n--- {name} ---")
print(f" Lipinski violations: {result.lipinski_violations}")
print(f" LogP: {result.logp:.2f}")
print(f" Caco-2: {result.caco2_class}")
print(f" BBB penetration: {result.bbb_penetration}")
print(f" CYP3A4 inhibitor: {result.cyp3a4_inhibitor}")
print(f" hERG inhibitor: {result.herg_inhibitor}")
print(f" AMES mutagenic: {result.ames_mutagenic}")
print(f" Hepatotoxicity: {result.hepatotoxicity}")Let us walk through what you would see for key compounds. Aspirin passes nearly everything: zero Lipinski violations, LogP around 1.2, high Caco-2 permeability, no hERG flag, no AMES flag. This is what a clean ADMET profile looks like for a simple, well-behaved small molecule. Metformin is interesting – it has a very low LogP (-1.4), suggesting poor membrane permeability, yet it is one of the most prescribed drugs in the world. It relies on organic cation transporters (OCTs) for absorption, which pure physicochemical models cannot capture. This is a known limitation of ADMET prediction for transporter-dependent drugs.
Terfenadine lights up the hERG inhibitor flag immediately – exactly the liability that killed Seldane. It also flags as a strong CYP3A4 inhibitor and substrate, explaining the lethal drug-drug interactions with ketoconazole. If you were screening a compound library and saw this profile, terfenadine would be triaged out before any synthesis.
Troglitazone triggers the hepatotoxicity flag and shows a structural alert for reactive metabolite formation from the chromanol moiety. The CYP3A4 substrate prediction is also positive, consistent with its known metabolic bioactivation pathway.Verapamil shows moderate hERG risk (it does cause QT prolongation at high doses) and flags as a CYP3A4 inhibitor, which is clinically managed through dose adjustment.
Interpreting ADMET Results: What Is Good, What Is Bad
LogP: The Goldilocks Zone
LogP measures how much a compound prefers oil over water. Too low (below 0) and the compound cannot cross lipid membranes. Too high (above 5) and it becomes insoluble, binds to plasma proteins, and accumulates in fatty tissues. The sweet spot for oral drugs is 1.0 to 3.0. Most successful oral drugs cluster around LogP 2.0. When reviewing your screen results, compounds with LogP above 4.0 deserve extra scrutiny – they will likely have solubility and distribution problems even if everything else looks clean.
hERG: The Hard Stop
A positive hERG prediction is the most serious flag in any ADMET screen. hERG channel inhibition causes QT prolongation, which can lead to fatal cardiac arrhythmias. For most therapeutic areas, a positive hERG flag means the compound must be redesigned. The only exception is oncology, where the risk-benefit calculus is different. If your compound flags for hERG, look at the confidence score – predictions above 0.85 confidence are very likely true positives. Structural features associated with hERG liability include basic nitrogen centers, aromatic rings, and lipophilic substituents.
AMES Mutagenicity: Structural Alerts
The AMES test detects compounds that cause bacterial gene mutations. A positive result suggests genotoxic potential and is a regulatory deal-breaker for chronic-use drugs. Common structural alerts that trigger AMES positivity include: nitroaromatic groups, aromatic amines and hydroxylamines, alkylating agents (epoxides, aziridines), Michael acceptors (alpha-beta-unsaturated carbonyls), and polycyclic aromatic hydrocarbons. If your compound flags AMES-positive, identify which structural feature is responsible and modify it – often replacing an amine with an amide or removing a nitro group eliminates the alert without losing potency.
CYP Inhibition: The Drug-Drug Interaction Risk
CYP inhibition does not kill your compound outright, but it creates serious clinical complications. If your compound inhibits CYP3A4, it will interact with roughly 50% of all co-administered medications. CYP2D6 inhibition is particularly problematic because 10% of the Caucasian population are poor CYP2D6 metabolizers – adding a CYP2D6 inhibitor on top puts them at risk of drug accumulation. The SciRouter API predicts inhibition for all five major CYP isoforms. One or two flags are manageable with clinical monitoring; three or more should trigger a medicinal chemistry redesign.
Tool Comparison: SwissADME vs ADMETlab vs SciRouter
Three tools dominate the ADMET prediction landscape for researchers and drug developers. Here is how they compare across the dimensions that matter most for practical screening.
| Feature | SwissADME | ADMETlab 2.0/3.0 | SciRouter ADMET |
|---|---|---|---|
| Input method | Web form (manual) | Web form + file upload | REST API + Python SDK + web UI |
| Batch screening | Up to 5 molecules per session | Up to 500 via file upload | Up to 100 per API call, unlimited via SDK loop |
| API access | None | None | Full REST API with API key auth |
| ADMET endpoints | Physicochemical + 5 PK models | 53 ADMET endpoints | 20+ ADMET endpoints |
| Model type | Rule-based + classical ML | Graph neural networks | ADMET-AI (graph neural networks) |
| Speed (single compound) | ~2 seconds | ~3-5 seconds | ~1-2 seconds |
| CI/CD integration | Not possible | Not possible | Full API integration into pipelines |
| MCP / AI agent support | No | No | Yes (40+ MCP tools) |
| Cost | Free (web only) | Free (web only) | Free tier (5,000 calls/mo), Pro from $29/mo |
| Output format | HTML page (manual copy) | HTML + CSV download | Structured JSON + CSV export |
SwissADME remains excellent for quick, one-off assessments. Its BOILED-Egg plot (a visual BBB vs GI absorption diagram) is genuinely useful for understanding a single compound's disposition. But it has no API, no batch capability beyond a handful of molecules, and its ADMET models rely on older QSAR approaches rather than modern deep learning.
ADMETlab 2.0/3.0 (from Zhejiang University) offers the broadest set of ADMET endpoints – 53 in version 3.0 – with modern graph neural network models. It accepts file uploads of up to 500 compounds, making it practical for medium-scale screening. However, it has no API, which means every screen requires manual web interaction and cannot be integrated into automated pipelines.
SciRouter fills the automation gap. While it does not yet match ADMETlab's breadth of endpoints, it provides the only production-grade API for ADMET prediction with Python SDK support, batch processing, structured JSON output, and integration into CI/CD and AI agent workflows. If your workflow involves screening compounds programmatically – whether from a generative model output, a virtual screening hit list, or an AI agent pipeline – SciRouter is currently the only option that does not require manual web interaction.
Python SDK: Batch Screening a Compound Library
Here is a complete workflow for screening a larger compound library, collecting results into a pandas DataFrame, and filtering for drug-like candidates. This is the pattern you would use in a real drug discovery pipeline.
import scirouter
import pandas as pd
import time
client = scirouter.SciRouter(api_key="sk-sci-YOUR_KEY")
# Load your compound library (e.g., from a CSV or generative model output)
library = [
{"id": "COMP-001", "smiles": "CC(=O)Oc1ccccc1C(=O)O", "name": "aspirin"},
{"id": "COMP-002", "smiles": "CC(C)Cc1ccc(cc1)C(C)C(=O)O", "name": "ibuprofen"},
{"id": "COMP-003", "smiles": "c1ccc(c(c1)C(=O)Nc2ccc(cc2)O)O", "name": "candidate-A"},
{"id": "COMP-004", "smiles": "O=C(O)c1ccc(-c2ccc(F)cc2)cc1", "name": "candidate-B"},
{"id": "COMP-005", "smiles": "CC1=CC=C(C=C1)C2=CC(=NN2C3=CC=C(C=C3)S(=O)(=O)N)C(F)(F)F", "name": "celecoxib"},
# ... add hundreds more compounds
]
# Screen in batches and collect results
results = []
for compound in library:
try:
admet = client.chemistry.admet(smiles=compound["smiles"])
props = client.chemistry.properties(smiles=compound["smiles"])
results.append({
"id": compound["id"],
"name": compound["name"],
"smiles": compound["smiles"],
"mw": props.molecular_weight,
"logp": admet.logp,
"lipinski_violations": admet.lipinski_violations,
"caco2_class": admet.caco2_class,
"bbb": admet.bbb_penetration,
"cyp3a4_inhibitor": admet.cyp3a4_inhibitor,
"herg": admet.herg_inhibitor,
"ames": admet.ames_mutagenic,
"hepatotox": admet.hepatotoxicity,
})
except Exception as e:
print(f"Failed on {compound['id']}: {e}")
# Convert to DataFrame for analysis
df = pd.DataFrame(results)
# Apply filters: no hERG, no AMES, <= 1 Lipinski violation
clean = df[
(df["herg"] == False) &
(df["ames"] == False) &
(df["hepatotox"] == False) &
(df["lipinski_violations"] <= 1)
]
print(f"Screened: {len(df)} compounds")
print(f"Passed ADMET filters: {len(clean)} compounds")
print(f"Attrition rate: {(1 - len(clean)/len(df))*100:.1f}%")
# Export clean hits for downstream analysis
clean.to_csv("admet_passed_compounds.csv", index=False)
print("\nClean compounds saved to admet_passed_compounds.csv")This pattern scales to thousands of compounds. The API rate limit on the free tier is 5,000 calls per month, which means you can screen approximately 2,500 compounds (each requiring an ADMET call and a properties call). Pro-tier users get 100,000 calls per month, supporting library-scale screening.
Integrating ADMET Into an Automated Pipeline
The real power of API-accessible ADMET prediction is integration into automated workflows. In a modern drug discovery pipeline, ADMET screening should happen at multiple stages: after virtual screening (to filter docking hits), after generative chemistry (to filter AI-designed molecules), and after lead optimization (to confirm that modifications did not introduce new liabilities).
import scirouter
client = scirouter.SciRouter(api_key="sk-sci-YOUR_KEY")
def admet_gate(smiles: str) -> dict:
"""Run ADMET screen and return pass/fail with reasons."""
admet = client.chemistry.admet(smiles=smiles)
flags = []
if admet.herg_inhibitor:
flags.append("hERG inhibitor (cardiac risk)")
if admet.ames_mutagenic:
flags.append("AMES positive (mutagenicity)")
if admet.hepatotoxicity:
flags.append("Hepatotoxicity risk")
if admet.lipinski_violations >= 2:
flags.append(f"Lipinski violations: {admet.lipinski_violations}")
if admet.logp > 5.0:
flags.append(f"LogP too high: {admet.logp:.1f}")
return {
"smiles": smiles,
"passed": len(flags) == 0,
"flags": flags,
"logp": admet.logp,
"caco2": admet.caco2_class,
"bbb": admet.bbb_penetration,
}
# Example: filter hits from a virtual screen
docking_hits = [
"CC(=O)Oc1ccccc1C(=O)O",
"OC(CCN(C1CC1)C2CC2)(c3ccccc3)c4ccc(C(C)(C)C)cc4",
"CC(C)Cc1ccc(cc1)C(C)C(=O)O",
]
for smiles in docking_hits:
result = admet_gate(smiles)
status = "PASS" if result["passed"] else "FAIL"
print(f"[{status}] {smiles[:40]}...")
if result["flags"]:
for flag in result["flags"]:
print(f" - {flag}")This admet_gate function can be dropped into any pipeline. Use it after DiffDock to filter docking results, after REINVENT4 to validate generated molecules, or as a pre-synthesis check before committing to expensive compound synthesis. The structured JSON output makes it trivial to integrate with pandas, databases, or downstream analysis tools.
Common ADMET Pitfalls and How to Avoid Them
Pitfall 1: Treating Predictions as Absolute Truth
ADMET models have accuracy in the 0.80–0.93 AUC-ROC range, which means 7–20% of predictions will be wrong. Use ADMET as a ranking and triage tool, not as a definitive answer. Compounds that pass computational ADMET should still go through experimental validation. Compounds that fail should be deprioritized, not necessarily abandoned – especially if the failure is marginal (e.g., hERG confidence score of 0.52).
Pitfall 2: Ignoring the Applicability Domain
ADMET models are trained on known drug-like chemical space. If your compound is structurally very different from the training set – novel scaffolds, unusual functional groups, macrocycles – the predictions may be unreliable. Always check whether your compound falls within the model's applicability domain. SciRouter returns confidence scores that help assess this: low confidence on multiple endpoints suggests the compound is outside the training distribution.
Pitfall 3: Screening Too Late
The biggest mistake in drug discovery is running ADMET screens after lead optimization is complete. By that point, you have invested months optimizing potency and selectivity, and discovering a fatal ADMET liability means starting over. Screen early and screen often: at hit identification, at hit-to-lead, and at every round of lead optimization. Computational ADMET costs essentially nothing compared to the cost of late-stage failure.
Pitfall 4: Optimizing One Property at the Expense of Others
Medicinal chemistry is a multi-objective optimization problem. Reducing LogP to improve solubility may decrease membrane permeability. Removing a basic nitrogen to avoid hERG may reduce target binding. Always look at the full ADMET profile holistically. The SciRouter API makes this easy by returning all endpoints in a single response, so you can see the complete picture before making design decisions.
When to Use Each ADMET Tool
The right tool depends on your workflow. Here is a practical decision framework:
- Quick check on 1–3 compounds – SwissADME (free web tool, great BOILED-Egg visualization)
- Medium screen of 50–500 compounds via file upload – ADMETlab 3.0 (broadest endpoint coverage, CSV export)
- Automated pipeline integration – SciRouter (only option with API + SDK)
- AI agent workflows (MCP, function calling) – SciRouter (MCP server with ADMET tools)
- Generative chemistry post-processing – SciRouter (screen REINVENT4 output programmatically)
- Teaching and exploration – SwissADME (intuitive UI, no account needed)
Many researchers use a combination: SwissADME for quick exploration during SAR analysis, ADMETlab for detailed reports to share with collaborators, and SciRouter for automated screening in production pipelines.
Try It Now: Screen Your Own Compounds
You can screen compounds for ADMET liabilities right now using the ADME/Tox Quick Check free tool – no account or API key required. Paste a SMILES string and get instant predictions for LogP, drug-likeness, CYP inhibition, hERG risk, and more.
For batch screening and API access, create a free SciRouter account at scirouter.ai/signup. The free tier includes 5,000 API calls per month – enough to screen approximately 2,500 compounds through the full ADMET panel. For larger libraries, the Pro tier at $29/month provides 100,000 calls.
ADMET prediction has gone from an afterthought to a frontline tool in drug discovery. The compounds that fail ADMET will fail eventually – the only question is whether you catch them at the computational stage or the clinical stage. Early screening is not optional; it is the single highest-ROI activity in modern drug development.