Entity linking and entity resolution APIs, compared

Every entity linking service answers the same question: which real-world thing does this name refer to? They differ in what they return, what they do when unsure, and whether they can use your own knowledge graph. This page compares six options on VoxEL, a public news benchmark none of them was tuned on, and on our own development sets, including where resolve() loses.

At a glance

resolve() Wikidata search (first hit) Entity-Fishing Dandelion Google Cloud NL Azure Entity Linking
Returns Wikidata QID, or your own ID Wikidata QID Wikidata QID Wikipedia and DBpedia links Wikipedia URL and Knowledge Graph MID Wikipedia URL
Reads the context Yes No, name match only Yes Yes Yes Yes
When unsure unresolved with one of four reasons Always returns the top hit Confidence score min_confidence threshold Leaves the entity unlinked Confidence score
Your own entities WordLift graph, or 5,000 inline No Not documented Not documented No No
Your own mention spans Yes You send the name Yes, partially annotated text No No No
Languages en, it, fr, de, es, pt; ja and zh at a lower level Labels in many languages 15 7 See Google docs 2: English, Spanish
How you run it Hosted API Wikimedia API Self-hosted (Java, 3 GB RAM minimum) Hosted API Hosted API Hosted API
Open source Pipeline, clients, contract and gold sets (Apache-2.0); engine closed n/a Apache-2.0 No No No
Status Public beta Stable Active Active Active Retiring 1 September 2028

Sources: Entity-Fishing overview, Dandelion datatxt-nex reference, Azure Entity Linking quickstart, resolve() developer guide, Google Cloud Natural Language analyzeEntities reference, Entity-Fishing on GitHub, Wikidata search API (wbsearchentities). Checked 17 October 2026.

Live test on VoxEL, 19 October 2026

On VoxEL, 1,005 mentions in news articles in five languages, resolve() linked 884 names correctly when given the mentions, against 838 for Google, 784 for Dandelion and 695 for Entity-Fishing, also given the mentions. Finding the mentions itself, as Google and Dandelion do, resolve() linked 793: ahead of Dandelion, behind Google.

On VoxEL, resolve() links 884 of 1,005 mentions correctly when given themresolve() · mentions given: 884 right, 37 wrong, 84 no answer; Google Cloud NL · found: 838 right, 21 wrong, 146 no answer; resolve() · found: 793 right, 26 wrong, 186 no answer; Dandelion · found: 784 right, 40 wrong, 181 no answer; Entity-Fishing · given: 695 right, 88 wrong, 222 no answer; Wikidata first hit · name only: 753 right, 238 wrong, 14 no answerOn VoxEL, resolve() links 884 of 1,005 mentions correctly when given themOutcome for every mention in five languages; Google finds more names on its ownrightwrong linkno answerresolve() · mentions givenresolve() · mentions given: 884 right of 1005resolve() · mentions given: 37 wrong linksresolve() · mentions given: 84 no answer884 right · 37 wrongGoogle Cloud NL · foundGoogle Cloud NL · found: 838 right of 1005Google Cloud NL · found: 21 wrong linksGoogle Cloud NL · found: 146 no answer838 right · 21 wrongresolve() · foundresolve() · found: 793 right of 1005resolve() · found: 26 wrong linksresolve() · found: 186 no answer793 right · 26 wrongDandelion · foundDandelion · found: 784 right of 1005Dandelion · found: 40 wrong linksDandelion · found: 181 no answer784 right · 40 wrongEntity-Fishing · givenEntity-Fishing · given: 695 right of 1005Entity-Fishing · given: 88 wrong linksEntity-Fishing · given: 222 no answer695 right · 88 wrongWikidata first hit · name onlyWikidata first hit · name only: 753 right of 1005Wikidata first hit · name only: 238 wrong linksWikidata first hit · name only: 14 no answer753 right · 238 wrongGiven = the service receives the gold mention spans; found = it detects the names itself.
VoxEL strict, 1,005 mentions. WordLift run of 19 October 2026.
System Mentions Precision Recall F1 Correct Wrong No answer
resolve() given 96.0 88.0 91.8 884 37 84
Google Cloud Natural Language found by the service 97.6 83.4 89.9 838 21 146
resolve() found by the service 96.8 78.9 87.0 793 26 186
Dandelion found by the service 95.1 78.0 85.7 784 40 181
Entity-Fishing given 88.8 69.2 77.7 695 88 222
Wikidata search, first hit the name alone 76.0 74.9 75.5 753 238 14

Azure Entity Linking is not in the test: it retires on 1 September 2028. For moving off it, see the migration guide.

VoxEL F1 by language: resolve() leads in four of five, Google in GermanEnglish: resolve(), given 93.1, Google Cloud NL 92.7, resolve(), found 87.7, Dandelion 81.5, Entity-Fishing 80.7, Wikidata first hit 60.7; Italian: resolve(), given 92.6, Google Cloud NL 85.8, resolve(), found 87.3, Dandelion 88.9, Entity-Fishing 57.1, Wikidata first hit 84.8; French: resolve(), given 91.1, Google Cloud NL 88.2, resolve(), found 86.6, Dandelion 86.5, Entity-Fishing 69.0, Wikidata first hit 70.3; German: resolve(), given 87.0, Google Cloud NL 90.1, resolve(), found 82.5, Dandelion 81.0, Entity-Fishing 87.9, Wikidata first hit 76.3; Spanish: resolve(), given 94.9, Google Cloud NL 92.5, resolve(), found 90.4, Dandelion 90.2, Entity-Fishing 89.0, Wikidata first hit 85.2VoxEL F1 by language: resolve() leads in four of five, Google in GermanF1 in percent, one dot per system; the axis starts at 50resolve(), givenGoogle Cloud NLresolve(), foundDandelion, Entity-Fishing, Wikidata first hit5060708090100EnglishEnglish, resolve(), given: F1 93.1English, Google Cloud NL: F1 92.7English, resolve(), found: F1 87.7English, Dandelion: F1 81.5English, Entity-Fishing: F1 80.7English, Wikidata first hit: F1 60.7resolve() 93.1ItalianItalian, resolve(), given: F1 92.6Italian, Google Cloud NL: F1 85.8Italian, resolve(), found: F1 87.3Italian, Dandelion: F1 88.9Italian, Entity-Fishing: F1 57.1Italian, Wikidata first hit: F1 84.8resolve() 92.6FrenchFrench, resolve(), given: F1 91.1French, Google Cloud NL: F1 88.2French, resolve(), found: F1 86.6French, Dandelion: F1 86.5French, Entity-Fishing: F1 69.0French, Wikidata first hit: F1 70.3resolve() 91.1GermanGerman, resolve(), given: F1 87.0German, Google Cloud NL: F1 90.1German, resolve(), found: F1 82.5German, Dandelion: F1 81.0German, Entity-Fishing: F1 87.9German, Wikidata first hit: F1 76.3Google 90.1 · resolve() 87.0SpanishSpanish, resolve(), given: F1 94.9Spanish, Google Cloud NL: F1 92.5Spanish, resolve(), found: F1 90.4Spanish, Dandelion: F1 90.2Spanish, Entity-Fishing: F1 89.0Spanish, Wikidata first hit: F1 85.2resolve() 94.9Given = the system receives the gold mention spans; found = it detects the names itself.
VoxEL strict, 201 mentions per language. WordLift run of 19 October 2026.

F1 by language on VoxEL:

System English Italian French German Spanish
resolve(), mentions given 93.1 92.6 91.1 87.0 94.9
Google Cloud Natural Language 92.7 85.8 88.2 90.1 92.5
resolve(), mentions found 87.7 87.3 86.6 82.5 90.4
Dandelion 81.5 88.9 86.5 81.0 90.2
Entity-Fishing 80.7 57.1 69.0 87.9 89.0
Wikidata search, first hit 60.7 84.8 70.3 76.3 85.2

Where resolve() wins. Given the mentions, it leads in four of the five languages and makes 37 wrong links where the first search hit makes 238. Finding its own mentions it is still ahead of Dandelion: on 114 mentions only resolve() was right, on 105 only Dandelion.

Where it loses. Google finds more of the mentions. End to end, on 134 mentions only Google was right and on 89 only resolve(); 125 of those 134 are names resolve() did not detect. Most are short second references in news style, such as “Trump” after “Donald Trump” and “Union” after “European Union”, and newspaper names such as Bild and the Times. Google also leads in German.

Our development sets

Our six development sets are 126 short sentences in six languages, built around ambiguous names (351 mentions). We develop resolve() on them, so they favour it. Given the mentions, resolve() was right 321 times, Dandelion 312, Google 294 and Wikidata’s first search hit 288. Google made the fewest wrong links (12), then Dandelion (15), resolve() (23) and the first hit (61).

Development sets: resolve() gets the most right, Google makes the fewest wrong linksresolve(), given: 321 right, 23 wrong; Dandelion: 312 right, 15 wrong; resolve(), found: 312 right, 16 wrong; Google Cloud NL: 294 right, 12 wrong; Wikidata first hit: 288 right, 61 wrong; Entity-Fishing, given: 251 right, 25 wrongDevelopment sets: resolve() gets the most right, Google makes the fewest wrong links351 mentions in six languages; better is up and to the left. These sets favour resolve(), which is developed on them.240260280300320right010203040506070wrong links →resolve(), given: 321 right, 23 wrong of 351resolve(), given · 321 / 23Dandelion: 312 right, 15 wrong of 351Dandelion · 312 / 15resolve(), found: 312 right, 16 wrong of 351resolve(), found · 312 / 16Google Cloud NL: 294 right, 12 wrong of 351Google Cloud NL · 294 / 12Wikidata first hit: 288 right, 61 wrong of 351Wikidata first hit · 288 / 61Entity-Fishing, given: 251 right, 25 wrong of 351Entity-Fishing, given · 251 / 25
resolve() development sets, 126 sentences, 351 mentions. WordLift run of 19 October 2026.
System Mentions Precision Recall F1 Correct Wrong No answer
resolve() given 93.3 91.5 92.4 321 23 7
Dandelion found by the service 95.4 88.9 92.0 312 15 24
resolve() found by the service 95.1 88.9 91.9 312 16 23
Google Cloud Natural Language found by the service 96.1 83.8 89.5 294 12 45
Wikidata search, first hit the name alone 82.5 82.1 82.3 288 61 2
Entity-Fishing given 90.9 71.5 80.1 251 25 75

F1 by language:

System English Italian French German Spanish Portuguese
resolve(), mentions given 93.5 88.6 91.4 94.4 90.5 93.3
Dandelion 92.6 89.7 93.0 90.9 95.1 91.2
resolve(), mentions found 94.9 90.7 85.3 95.5 88.9 91.2
Google Cloud Natural Language 87.6 92.9 86.6 94.1 85.7 90.6
Wikidata search, first hit 81.4 81.8 70.3 89.9 83.3 84.3
Entity-Fishing 85.4 54.5 40.0 92.9 82.2 89.0

Where resolve() wins. It got 39 of the first hit’s 61 wrong answers right, nearly all names whose most popular meaning is wrong for the sentence: Liverpool the club, not the city; Java the island, not the language; Mercury, Venus and the Sun as planets and a star, not a car brand, a goddess and Sun Microsystems.

Where it loses. On 8 mentions the first hit was right and resolve() was not: 6 wrong answers and 2 refusals (“Monaco” and “the Guardian”). The wrong answers are mostly places one level off: “Torino” read as the football club, “Trentino” as Trentino-Alto Adige, “Distrito Federal” as Mexico City, and “England” in “north west of England” as the United Kingdom. 22 mentions defeated both, among them “Jordan” with the Chicago Bulls and “Mozart” in German.

Against Dandelion. Given the mentions, resolve() is ahead, 92.4 to 92.0: on 30 mentions only resolve() was right, on 21 only Dandelion. Dandelion still makes fewer wrong links (15 to 23). resolve()’s remaining losses are people named by surname (Mozart twice, Darwin, Velázquez, Jordan) and clubs named by their city (Barcelona twice, Roma, Benfica). Finding its own mentions, resolve() is level with Dandelion: 91.9 to 92.0.

Against Google. resolve() is ahead, 92.4 to 89.5: on 47 mentions only resolve() was right, on 20 only Google. Google makes the fewest wrong links (12 against 23).

Method

Two suites. VoxEL (Rosales-Méndez, Hogan and Poblete, ISWC 2018; CC BY 4.0) annotates the same 15 VoxEurop articles in German, English, Spanish, French and Italian; we use the strict version, 201 mentions per language once the three per language with no Wikipedia article are left out. Our development sets are the six gold sets in the resolve() repository.

An answer counts only if its Wikidata ID equals the gold ID; Wikipedia answers, and VoxEL’s own Wikipedia labels, are mapped to Wikidata. Precision is correct out of answered; recall is correct out of all mentions. “Given” means the system receives the gold mention spans; the first-hit lookup gets the name alone, as an agent calling search would. A system that finds its own mentions gets the benefit of the doubt: a link on the gold span counts right or wrong, a link on an overlapping span counts only when it is right, and a mention it skips is no answer.

Every service ran with its defaults (Dandelion’s confidence threshold, 0.6; resolve()’s detection threshold, 0.5). resolve() ran through the API on 19 October 2026, build 8df08b7 (Google, Dandelion and the first hit on 18 October; Entity-Fishing 0.0.6 on 19 October, run locally on its February 2025 Wikipedia and Wikidata data, given the mentions); on the development sets the open demo gave the same 351 answers. A few VoxEL labels follow Wikipedia’s 2018 articles rather than today’s Wikidata items, for example for Britain and Twitter; we score them as written. The development sets are small, so differences under about five points within one language are noise; one of their labels was corrected (“Illy” pointed to a disambiguation page).

Which one to pick

  • You need Wikidata IDs an agent can act on, and a clear “no” when unsure: resolve().
  • You resolve against your own catalogue or knowledge graph: resolve(), with your graph first and Wikidata second.
  • You want to self-host and own the model: Entity-Fishing.
  • You only need Wikipedia links for tagging in seven European languages: Dandelion.
  • You need the most names found in news text and will not supply the mentions: Google Cloud Natural Language, ahead end to end on VoxEL; it returns Wikipedia URLs, not Wikidata IDs.
  • You are already on Azure Entity Linking: plan the move before 1 September 2028. Migration guide.

Run the comparison yourself

The gold sets, the matching rule and the harness are open: github.com/wordlift/content-analysis. tools/voxel.py downloads VoxEL and converts it; tools/compare.py runs every service you have keys for on the same documents and skips the rest.

The run on this page, with how each service ran, is in benchmarks/2026-10-19.

The post Entity linking and entity resolution APIs, compared appeared first on WordLift Blog.

Testimonials
Get updates

Stay in touch and up to date with your industry news… Always be a step ahead with BBK Services… 

join newsletter now ⤵

Subscribe to get the monthly report to stay on top of your market and have a 15% discount on us with your 1st order.