A BD team I know spent three weeks evaluating a "novel" oral asset.
It wasn't novel.
It was a molecule they'd already passed on 18 months earlier — filed under a different code name, a different sponsor (post-spinout), and a different target synonym. Nobody caught it, because no database connected the dots. The pipeline tracker listed it one way. The patent filing named it another. The clinical registry used a third. The Chinese licensor's deck used a fourth.
Five surface strings. One molecule. Zero systems that knew they were the same thing.
Why one molecule has a dozen identifiers
This isn't sloppiness — it's how drug naming actually works. A single approved molecule legitimately fragments across a dozen-plus identifiers. Take osimertinib: it resolves to the research code AZD9291, the brand Tagrisso, DrugBank DB09330, ChEMBL CHEMBL3353410, CAS 1421373-65-0, UNII 3C06JJ0Z2O, and KEGG D10766 — and its mesylate salt carries a separate ChEMBL ID and CAS again. [1] Every layer is a real, "correct" name. None of them matches the others as a string.
Now add the thing BD teams actually get burned by: the code name moves. As one ISMP analysis of investigational-drug naming puts it, a compound is coded "much like a vehicle's license plate (e.g., BMS-562247)… it is possible for the code name to change if the sponsor is part of a merger or if the company or product is sold." [2] Tapentadol carried at least three company code names across four sponsors — BN-200/CG-5503 at Grünenthal, R-331333 after a J&J license, then sold to Depomed for $1 billion and licensed onward — surfacing under the brands Nucynta, Palexia, Yantil, and Aspadol. [3] Trastuzumab deruxtecan spans the codes DS-8201/DS-8201a plus AstraZeneca's AZD4552 across one co-development deal, marketed as Enhertu. [4]
The target is just as bad. The HER2 gene (ERBB2) carries 13 official aliases in NCBI Gene — NEU, HER2, CD340, c-erbB-2, HER-2/neu, and more. [5] PD-1 (PDCD1) carries nine, and is constantly confused with the entirely separate gene PD-L1 (CD274). [6] So "competitors against the same target" can be hiding behind half a dozen gene synonyms.
The China wave just made it worse
If you think this is a manageable edge case, look at where deal flow is going. Chinese drugmakers signed a record 157 out-licensing deals worth $135.7 billion in 2025, up from 94 deals worth $51.9 billion in 2024. [7] Through October 2025, 38% of large-pharma in-licensing deals with ≥$50M upfront originated from Chinese partners. [8] And the "NewCo" model spins Chinese-originated assets into Western-domiciled companies — Hengrui's GLP-1 assets becoming Kailera Therapeutics with a $400M Series A is the template [9] — which means every one of those molecules now carries a Chinese sponsor name, a Western NewCo name, and a code name on top of its INN. The renaming surface is exploding precisely where the most interesting assets are.
Why this is an entity-resolution problem, not a search problem
Entity resolution is the task of deciding which records — across systems, vocabularies, and owners — refer to the same real-world thing: the same molecule, the same device, the same patient, the same product. It sounds like deduplication. It isn't. Deduplication assumes the duplicates are obvious. Entity resolution is the hard version, where the "same thing" wears a different name, code, and owner in every system it touches, and nothing in your data records that they're connected.
Two properties make it genuinely hard. First, it's quadratic: to know whether any record is a duplicate, you in principle have to compare it against every other record. As Papadakis and colleagues put it in the VLDB literature, entity resolution "typically scales to large volumes of data through blocking… each entity has to be compared with all others in order to find its matches." [ER-1] A thousand records is half a million comparisons; a million records is half a trillion. Double the data and you roughly quadruple the work.
Second, the right answer for one record depends on all the others — entity resolution needs global consistency. Whether record A and record B are the same can hinge on what C, D, and E say. This is exactly where throwing a bigger language model at it disappoints: large models reason locally, one context window at a time. They will confidently link two records that, seen against the whole dataset, obviously shouldn't be — and miss links that only become clear once you hold the full graph in view. The semantic layer that makes messy data usable isn't built by a model guessing one row at a time. It's built by deciding, consistently and across the whole set, that these N records are one thing.
This is a graph problem, and the experts say so
The active global pipeline holds roughly 22,940 drugs, with thousands added and dropped every year. [10] The hard part was never "find assets" — databases are full of assets. The hard part is knowing which entries are the same asset, which targets are actually related, and which "competitors" are the same compound wearing different clothes. Clarivate, which builds this for a living, says it plainly: connecting an asset across its history "requires more than keyword matching — it requires an entity resolution framework… as a drug moves from an academic lab through a startup, an acquirer and a global pharma company, it accumulates identifiers at every stage." [11] An analyst searching "JCAR017" and one searching "Breyanzi" are looking at the same asset and don't know it.
That's why a keyword search — or a generic LLM — falls apart here. The truth requires seeing the whole graph at once: resolving drug identifiers, company names, and ownership timelines simultaneously, because a missed match at any layer misattributes a program or erases competitive history. [11] A model reasoning over one deck at a time can't do that.
The teams that out-source-deal everyone else aren't reading more decks. They just have a cleaner map of what's actually out there.
How many times has your team diligenced the same asset twice without realizing it?