Method, scoring and caveats
The benchmark is deliberately simple so it stays reproducible.
Everything below is implemented in scripts/aggregate.mjs; nothing is hand-tuned.
1 · The question set
100 questions across 10 fixed categories, each asking for a ranked top-5. Categories were chosen to separate distinct reputations that a single "who is best" question would blur together: molecule class, target discovery, clinical work, longevity, overall landscape, individual people, named assets, software, geography and commercial standing.
Question ids are stable (mod-01, assets-09). New questions are appended,
never inserted, so scores stay comparable across collection rounds.
One question deliberately probes negative sentiment (which companies attract the most scientific scrutiny). Reputation is not one-directional and a benchmark that only measures praise would miss half of it.
2 · Scoring
Each question distributes exactly 1.00 point across its five slots, using a log-discounted positional weight normalised to sum to one:
Two consequences worth stating plainly. Every question carries identical influence, so a category with 12 questions counts more than one with 8 — that is intentional, and category shares are reported separately to compensate. And rank 1 is worth 2.6× rank 5, which rewards being named first without making lower slots worthless.
Reported per entity: visibility score (summed points), share of voice (score ÷ questions), reach (questions appeared in), first places, and mean rank. No metric is a composite of the others, so a high score from broad shallow presence never looks like dominance.
3 · Entity normalisation
Raw model output is messy: Schrödinger and Schrodinger,
ISM3091 / XL309 and XL309 (ISM3091). An alias table in
data/entities.json maps variants onto canonical names before scoring, keyed on a
lower-cased, de-accented form. Without this step the leaderboard silently splits entities and
understates the leaders.
The same file records affiliation, which is how "Insilico-affiliated" rolls up the company, its platforms (PandaOmics, Chemistry42, inClinico, Science42:DORA), its molecules and targets (rentosertib, ISM3091, TNIK, CDK20), its spinout (Deep Longevity) and its people. Any focal company can be swapped in by editing that map.
4 · Cross-model comparison
Rank-biased overlap (p = 0.9) is the headline agreement metric: it is top-weighted, so disagreeing about first place costs much more than disagreeing about fifth, and it handles lists that share only some members. Jaccard gives order-free set overlap, Kendall τ measures ordering among commonly named entities, and top-1 match is the blunt "same winner" rate.
A pooled consensus leaderboard sums points across all collected models. With enough models this is the most defensible single rating, because it averages out any one vendor's idiosyncratic training mix.
5 · Reproducing and extending
Collect a new model, rebuild, redeploy:
node scripts/ask.mjs --model claude-sonnet-5
node scripts/ask.mjs --model gpt-5.1 --provider openai
node scripts/ask.mjs --model gemini-3-pro --provider google
npm run build && npm run deploy
The collector writes data/answers.<model>.mjs in the same
format as the hand-authored baseline. The aggregator picks up any file matching that pattern
automatically, so no wiring is needed per model.
Caveats that matter
n = 1. The baseline is a single sample. LLM rankings shift with temperature and phrasing. Presence, absence and first-place counts are reasonably stable; exact ordering in slots 2–5 is not. Run repeats before quoting a rank change.
Not ground truth. A high score means the model's training data talked about that entity in that context — nothing more. It is not scientific merit, market share or clinical quality.
Self-referential loop. Company press releases generate press coverage, which becomes training data, which produces model answers. High visibility partly measures publicity effort, which is precisely why it is worth tracking — but it is not independent evidence.
Cutoff effects. Every model has a different knowledge cutoff. A company that broke out recently will look weaker on older models for reasons unrelated to coverage quality. Compare cutoffs before comparing scores.
Question framing drives answers. "Best for biologics" and "best overall" produce very different lists. The category structure exposes this rather than hiding it.
Long tail is fragile. Entities named once sit near the noise floor. Read the top ~25 and treat the rest as texture.
Provenance
Company facts used for verification were read from the live insilico.com on
5 September 2026: homepage, /team, /pipeline,
/mediacoverage, /news, /publications,
/interactive/drugs/rentosertib, sitemap.xml and
robots.txt.
Model answers were produced with no retrieval and no access to those pages, then compared against them afterwards. That separation is what makes the accuracy check meaningful.
Data files
data/questions.src.mjs — the 100 questions
data/answers.*.mjs — one file per model
data/entities.json — aliases and affiliation
scripts/aggregate.mjs — scoring and metrics
scripts/ask.mjs — model collector
site/data/dataset.json — build output the pages read