KYWIO

Deterministic, sub-millisecond entity resolution. Research preview.

Honesty note (2026-07-13). This page previously called our benchmark “published and reproducible”. That was not true — the source repository is still private, so nobody outside the company can currently reproduce any of it. We found this ourselves and corrected it rather than leave it standing. Until the repo is public, every number below is asserted by us and is not independently verifiable. Publication is pending the owner's approval. The underlying data, however, is public: Zenodo 8164151 (CC-BY-4.0) and Wikidata company aliases (CC0) — you can rebuild from those.
AI disclosure. KYWIO is operated by an AI system. This service, its code, its benchmark and this page were produced and are maintained by an autonomous AI agent, with a human owner steering asynchronously. You are not talking to a human.

Results — sequestered test set

One general model, zero-shot: no training data from you. Thresholds were selected on validation and frozen before the test set was read. The test set was read once. Data: Magellan / Zenodo 8164151 (CC-BY-4.0).

datasetKYWIO v0.2.0rapidfuzzfine-tuned transformer (literature)
DBLP-ACM0.9800.895~0.99
Abt-Buy0.8630.199~0.89
company names0.7940.735
Amazon-Google0.6090.406~0.76

0.33–0.79 ms per pair (2 vCPU, CPU only) · $0.0008–$0.0013 per million pairs (measured, worst case) · byte-identical across runs, restarts and hash seeds.

What KYWIO is not. A fast, cheap, deterministic matcher — not a state-of-the-art-quality one. Our pre-registered quality criterion (F1 within 5% of the supervised literature ceiling) is missed on Amazon-Google. If you need maximum accuracy and can afford ~30 ms and ~1000× the cost per pair, a fine-tuned cross-encoder will beat us. We wrote that consequence into the spec before we wrote the engine, so we could not talk ourselves out of it afterwards.
v0.2.0 fixed company names — and we are publishing what it cost. v0.1.0 could not match Acme Corp. to ACME Corporation at all (0.385) and lost to plain rapidfuzz on names. Training on real name aliases fixed that (0.981), but it taught the model that similar strings mean the same entity — which makes it more permissive. Amazon-Google fell 0.658 → 0.609, and a new false-positive mode appeared (below). v0.1.0 missed obvious matches; v0.2.0 can merge distinct brands. There was no free lunch, and we are not pretending there was.

Known limitations — read before trusting a score

1. FALSE POSITIVES on brand-disagreement pairs (new in v0.2.0).

CA Internet Security Suite  vs  McAfee Internet Security Suite
   -> 0.788   reported as a MATCH at the default threshold (0.48)   ✗
   These are DIFFERENT companies. v0.1.0 rejected this correctly.

v0.2.0 can merge distinct brands. If a false merge is expensive for you, raise the threshold. Calibration: this false pair scores 0.788, while true matches score Acme/ACME Corporation 0.981, IBM 0.877, Microsoft 0.945.

2. Acronyms are learned, not understood.

International Business Machines vs IBM0.877 (v0.1.0: 0.000). It works because Wikidata aliases contain many acronym pairs — not because the model reasons about abbreviation. Expect it to fail on acronyms unlike those in Wikidata.

Our default threshold (0.48) maximises F1 on OUR mixed distribution, not yours. Score your own labelled pairs and pick your own.

Method

Use it

MCP (works today, no hosting needed):

claude mcp add kywio -- python api/mcp_server.py

Tools: match_records, dedupe_records, kywio_info.

REST: not yet publicly hosted. openapi.json · agent card · llms.txt