Pick by what you need the output to be. ADMET-AI returns learned probabilities and regression values for 41 endpoints from a graph neural network, runs without a molecule limit locally, and is importable as a Python package — so it is the one that fits a screening pipeline. SwissADME returns physicochemical descriptors, five consensus logP methods, rule-based drug-likeness filters, structural alerts and the BOILED-Egg absorption/brain classification — so it is the one that fits reading a single molecule closely and explaining it to a chemist. pkCSM returns 30 regression and classification pharmacokinetic and toxicity predictors built on graph-based signatures, which makes it a useful orthogonal second opinion. All three are free; two of the three are web servers that the platform does not run.
This is a comparison of the tools. For how computational ADMET relates to assays and animals, see in silico vs in vivo ADMET; for the endpoint vocabulary itself, see the practical guide to ADMET prediction.
The three tools, side by side#
| ADMET-AI | SwissADME | pkCSM | |
|---|---|---|---|
| Model family | Chemprop-RDKit graph neural network, ensembled over 5 splits (Swanson et al., 2024) | Physicochemical descriptors, rule-based filters, SVM classifiers on those descriptors, and the BOILED-Egg plot (Daina et al., 2017) | Distance-based graph signatures plus molecular properties, toxicophore fingerprints and pharmacophore counts (Pires et al., 2015) |
| Training data | 41 ADMET datasets from the Therapeutics Data Commons, v0.4.1 (Huang et al., 2021) | Curated substrate/inhibitor sets per model, plus published rules and alert lists | Per-endpoint literature datasets, up to ~10,000 (rat toxicity) and ~18,000 (metabolism classifiers) molecules |
| Endpoints | 41 ADMET predictions (10 regression, 31 classification) plus 8 RDKit physicochemical properties | Physchem, lipophilicity (5 methods + consensus), 3 solubility models, skin permeability, HIA/BBB via BOILED-Egg, P-gp substrate, 5 CYP inhibitors, 5 drug-likeness filters, PAINS and Brenk alerts, synthetic accessibility | 30 predictors: absorption (7), distribution (4), metabolism (7), excretion (2), toxicity (10) |
| Output shape | Probability per classification endpoint; value in the training set's units per regression endpoint; each paired with a percentile against 2,579 approved DrugBank drugs | Numeric descriptors, Yes/No classifier calls, rule violations named explicitly, graphical radar and egg plots | Numeric values for the 14 regression models, class labels for the 16 classification models |
| Reference context | DrugBank-approved percentile, optionally narrowed by ATC code | Bioavailability Radar's drug-like range, and the Abbot Bioavailability Score's four probability classes | None built in |
| Web-form batch cap | 1,000 molecules on the public server | 200 molecules | 100 molecules |
| Programmatic use | pip install admet-ai, admet_predict CLI, or ADMETModel in Python (swansonk14/admet_ai) | Web form only | Web form only |
| Open source | Yes, MIT; models built on chemprop/chemprop | Methods described; the server is not distributed | Server only |
| On .bloom* | Yes — ADMET-AI runs as a job (docs) | No | No |
The batch caps in that table are the ones recorded when ADMET-AI benchmarked server speed against six other public predictors, including SwissADME and pkCSM (Swanson et al., 2024).
Three different model families#
ADMET-AI is a learned model. It uses Chemprop-RDKit — the Chemprop message-passing graph neural network augmented with 200 RDKit-computed physicochemical features — trained on 41 TDC ADMET datasets (Yang et al., 2019; Swanson et al., 2024). Two multi-task models (one regression, one classification) cover all 41 properties and are the ones deployed on the web server; predictions are averaged over an ensemble of five models trained on five data splits. Nothing in it is a rule: the molecular graph goes in and a learned number comes out.
SwissADME is mostly not a learned model. Its core is a deliberate assembly of interpretable methods: OpenBabel descriptors and TPSA; five freely available logP predictors (XLOGP3, WLOGP, MLOGP, SILICOS-IT and the in-house physics-based iLOGP) plus their arithmetic consensus; three solubility models; a multiple linear regression for skin permeability adapted from Potts and Guy; five rule-based drug-likeness filters (Lipinski, Ghose, Veber, Egan, Muegge); the Abbot Bioavailability Score; PAINS and Brenk structural alerts; and a fragmental synthetic-accessibility score (Daina et al., 2017). Machine learning appears in one place — SVM classifiers for P-gp substrate and the five major CYP inhibitors — and the authors deliberately built those on molecular and physicochemical descriptors rather than fingerprints or graphs, accepting lower headline statistics in exchange for less overfitting to specific scaffolds. Absorption and brain penetration come from the BOILED-Egg, a two-descriptor (WLOGP vs TPSA) graphical classifier whose "white" region marks high probability of passive gastrointestinal absorption and whose "yolk" marks high probability of BBB permeation (Daina & Zoete, 2016). Both regions are restricted to passive penetration, and the plot colours each dot by predicted P-gp efflux.
pkCSM is learned, but from a different representation. It encodes each molecule as a distance-based graph signature — the count of atoms of each pharmacophore type within a given shortest-path distance — concatenated with general molecular properties, an AMES-derived toxicophore fingerprint and pharmacophore frequency counts, then trains 14 regression and 16 classification models on top (Pires et al., 2015). That is neither a rule set nor a message-passing network, which is exactly why it is useful as a cross-check: it fails differently.
What each one actually hands you#
The three outputs are not interchangeable, and this is the distinction that most often gets lost when people call all three "ADMET predictions".
- ADMET-AI gives you a number with a population. For a binary property the value is the probability that the molecule has the property; for a regression property it is a value in the units of the dataset the model was trained on (half-life in hours, for example). Each prediction is paired with its percentile against a reference set of 2,579 approved DrugBank drugs, and the reference can be narrowed to an ATC class — because, as the authors put it, acceptable toxicity for an antineoplastic is not acceptable toxicity for an antibiotic (Swanson et al., 2024). A radar plot summarises hERG, BBB, solubility, bioavailability and toxicity.
- SwissADME gives you a verdict you can argue with. A rule violation is named, so "one Lipinski violation: MW > 500" is a statement a medicinal chemist can act on directly. The Bioavailability Radar marks each of six physicochemical axes against an explicit drug-like range, and a PAINS or Brenk hit names the offending fragment. There is no probability and no percentile — the interpretability is the product.
- pkCSM gives you per-endpoint values and classes across absorption, distribution, metabolism, excretion and toxicity, and it retains no information submitted to it, which matters for proprietary structures.
One consequence worth stating plainly: ADMET-AI reports no per-prediction uncertainty and no applicability-domain score. Its prediction frame carries property values and DrugBank percentiles, nothing else. On .bloom* the ADMET-AI normalizer leaves both fields absent rather than filling in a placeholder, because a synthesized domain score would assert that the molecule resembles the TDC training distribution when that was never evaluated. Treat "no domain score" as a missing instrument, not as a clean bill of health.
Throughput, batch and programmatic use#
This is where the three separate most sharply.
ADMET-AI was benchmarked against six public ADMET web servers — SwissADME, ADMETLab 2.0, pkCSM, vNN-ADMET, ADMETboost and PreADMET — on 1, 10, 100 and 1,000 DrugBank molecules, and was the fastest at every size, with a 45% reduction in time over the next fastest server at 1,000 molecules. Run locally, the same models predicted one million molecules in 3.1 hours with 32 CPU cores and a GPU, versus 28.1 hours through the web server; even 8 CPU cores with no GPU finished in about 5 hours (Swanson et al., 2024).
The structural reason is the interface, not just the maths. ADMET-AI ships as a Python package with an admet_predict command-line tool and an importable ADMETModel class, with no cap on molecule count locally (swansonk14/admet_ai). SwissADME and pkCSM are web forms — excellent ones, with sketchers, interactive plots and CSV export — but a web form is not a pipeline stage. If your input is the output of a docking campaign or a generative run, that difference decides the question before any accuracy argument starts.
One caveat for reproducibility: the public ADMET-AI web server and the paper are built on ADMET-AI v1, while the current repo is v2, which uses Chemprop v2 without RDKit fingerprints. The models were retrained from scratch, so v2 predictions do not exactly match v1. If you are comparing runs, pin and record the version. On .bloom* the ADMET-AI job runs the pinned package version admet_ai==1.3.1 with chemprop>=1.6.1, and the job metadata carries model_version with the option set — see ADMET-AI limits & performance.
Why there is no head-to-head accuracy table here#
You will not find one below, because the three papers do not share a test set. Each reports against its own benchmark:
- ADMET-AI reports on the TDC ADMET Leaderboard — 22 of its 41 datasets (9 regression, 13 classification) — where it has the best average rank among the models evaluated there. Across all 41 datasets, its single-task models reach R² > 0.6 for 5 of the 10 regression datasets and AUROC > 0.85 for 20 of the 31 classification datasets, and the multi-task models perform very similarly (Swanson et al., 2024).
- SwissADME reports per-classifier accuracy and ROC AUC against earlier SVM models on the same targets — for example 10-fold cross-validated accuracy 0.83 and AUC 0.90 for the CYP1A2 inhibitor model — and states explicitly that the comparison is not straightforward, because the training sets differ, most published models are less than 10-fold cross-validated, and each external test set contains different molecules (Daina et al., 2017).
- pkCSM reports against admetSAR, ToxTree and per-endpoint literature methods, with regression R² roughly 0.6–0.9 and a statistically significant improvement on 11 datasets; its AMES classifier reached 83.8% accuracy versus 75.8% for ToxTree (Pires et al., 2015).
Those numbers are real and each is anchored to its own paper. Lining them up in one column would imply a shared denominator that does not exist. The only comparison that settles the question for your programme is the one you run yourself: take 20–50 compounds whose measured values you already hold, run all three, and compare per endpoint.
When to use which#
Use ADMET-AI when the input is a list. Virtual-screening hits, generated molecules, an analogue series, a vendor plate — anything where you need one consistent 41-endpoint table with a population reference and the option to rerun it next week on the same model version. It is also the right choice when the answer feeds another step rather than a human reader.
Use SwissADME when the input is one molecule and the output is an argument. Deciding whether a lead is too flexible or too polar, explaining a Lipinski violation, checking for PAINS or Brenk fragments before a screen, reading absorption and brain penetration off the BOILED-Egg, or comparing five logP methods when a single calculated logP looks suspicious. It is the most chemist- legible of the three, and the rule-based parts are deterministic and don't silently retrain.
Use pkCSM as the orthogonal check. When an ADMET-AI flag is consequential — hERG, AMES, hepatotoxicity — a second model built on a different representation either agrees or tells you the prediction is representation-sensitive. Either answer is informative. Agreement is not validation, but disagreement is a clear instruction to measure.
Use more than one when the decision is expensive. No free panel is a measurement, and the cheapest way to detect a model that is out of its depth is to ask two models that fail differently.
Limitations that apply to all three#
- None of them measures anything. Every number is a function of structure and of someone else's past experiments. What that implies for experimental planning is the subject of in silico vs in vivo ADMET.
- Applicability domain is mostly unreported. ADMET-AI returns no domain score. SwissADME publishes the descriptor ranges of its SVM training sets, so the domain is inspectable but not returned per prediction. pkCSM reports outlier behaviour in its own validation, not for your molecule.
- Coverage is not comparability. "41 endpoints" and "30 predictors" count different things, and two tools naming the same endpoint may have trained on different data with different units and cutoffs. Compare endpoint definitions before comparing values.
- Rules and models fail in different directions. A rule-based filter is deterministic and blind to anything outside its descriptors; a learned model generalises and can be confidently wrong on a novel scaffold.
- Web servers version silently. A re-run months later through a web form can cross a model update with no version string in the output. If a prediction is going into a decision record, keep the date, the tool and — where it exists — the version.
- Passive-only classifiers say so. The BOILED-Egg covers passive gastrointestinal absorption and passive BBB penetration; active transport is represented separately, as the P-gp colour coding on the plot.
How to run ADMET-AI on .bloom*#
ADMET-AI is the ADMET panel the platform runs. SwissADME and pkCSM are not offered on .bloom* — they are free external web servers, and the comparison above is to them as external packages.
- Submit the compounds. Paste SMILES, upload a CSV or SDF, or carry structures over from a previous job. The job takes up to 500 unique SMILES per call; see ADMET-AI inputs & parameters for the column names, validation rules and the
include_physchemandatc_codeoptions. ADMET-AI sits in the guest tool allowlist, so a signed-out session can reach it, while signing in keeps the job and its artifacts in your workspace. The platform hard-halts any ADMET run on a SMILES it cannot source, rather than scoring a fabricated structure. - Read the percentile, not just the score. Each endpoint comes with its percentile against the DrugBank-approved reference, and an ATC code narrows that reference to a therapeutic class.
- Attend to the flags.
invalid_smilesandout_of_domainrows are not scores. Partial success is normal: the job succeeds for valid molecules and reportsinvalid_countwith the offending structures. See ADMET-AI outputs & interpretation. - Get your orthogonal opinion inside the run. The Screen ADMET recipe chains ADMET-AI with DeepPurpose on the same input, and RDKit computes the rule-based half that SwissADME is valued for — Lipinski and Veber rules, and PAINS, Brenk and NIH structural alerts — so you can keep the rule verdict and the learned probability side by side.
- Keep the run, not the screenshot. Record
model_version, the option set and whether the molecule cache was enabled, and hold a fixed 20–50 molecule subset to tell a real shift from a settings change: ADMET-AI limits & performance. - Automate it when it earns it. ADMET-AI API & automation covers job submission, polling and artifact download, so the panel becomes a pipeline stage between compound sourcing and docking or synthesis planning.
Key takeaways#
- ADMET-AI is a Chemprop-RDKit graph neural network over 41 TDC datasets; it returns probabilities and regression values with a DrugBank-approved percentile, and it is the only one of the three that installs as a package and scales past a web form (Swanson et al., 2024).
- SwissADME is a curated panel of physicochemical descriptors, five logP methods, rule-based filters, structural alerts and the BOILED-Egg — the most interpretable output of the three, and deliberately so (Daina et al., 2017).
- pkCSM predicts 30 pharmacokinetic and toxicity endpoints from graph-based signatures, which makes it a genuinely orthogonal second opinion (Pires et al., 2015).
- No shared benchmark exists across the three papers, so treat any side-by-side accuracy ranking with suspicion and run your own known compounds through each.
- Caps decide a lot of cases: 1,000 molecules per web submission for ADMET-AI, 200 for SwissADME, 100 for pkCSM, and no local limit for ADMET-AI.
- Reproducibility needs a version. ADMET-AI v2 predictions do not match v1, and the public server and paper are v1 — pin and record what you ran.
Run an ADMET-AI panel on your series — with your known compounds included as controls — on the .bloom* platform.
References#
- Swanson, K., Walther, P., Leitz, J., Mukherjee, S., Wu, J.C., Shivnaraine, R.V. & Zou, J. "ADMET-AI: a machine learning ADMET platform for evaluation of large-scale chemical libraries." Bioinformatics 40, btae416 (2024). doi:10.1093/bioinformatics/btae416 · code: swansonk14/admet_ai
- Daina, A., Michielin, O. & Zoete, V. "SwissADME: a free web tool to evaluate pharmacokinetics, drug-likeness and medicinal chemistry friendliness of small molecules." Scientific Reports 7, 42717 (2017). doi:10.1038/srep42717
- Pires, D.E.V., Blundell, T.L. & Ascher, D.B. "pkCSM: Predicting Small-Molecule Pharmacokinetic and Toxicity Properties Using Graph-Based Signatures." Journal of Medicinal Chemistry 58, 4066–4072 (2015). doi:10.1021/acs.jmedchem.5b00104
- Huang, K., Fu, T., Gao, W. et al. "Therapeutics Data Commons: Machine Learning Datasets and Tasks for Drug Discovery and Development." NeurIPS Datasets and Benchmarks (2021). arXiv:2102.09548
- Yang, K., Swanson, K., Jin, W. et al. "Analyzing Learned Molecular Representations for Property Prediction." Journal of Chemical Information and Modeling 59, 3370–3388 (2019). doi:10.1021/acs.jcim.9b00237 · code: chemprop/chemprop
- Daina, A. & Zoete, V. "A BOILED-Egg To Predict Gastrointestinal Absorption and Brain Penetration of Small Molecules." ChemMedChem 11, 1117–1121 (2016). doi:10.1002/cmdc.201600182