Every number on this site,
with its method.
If you cannot check a ranking, you should not trust it. Coverage numbers, calibration curves, how the benchmark was built, how fast we ingest, and every outage since 2023. All of it, at the resolution you would need to argue with it.
SPOT-Bench, scored against the register
250,000 records drawn from real CRM exports, invoice OCR and web forms, labelled by two annotators with a third adjudicating disagreements. Published with the harness.
| Input class | Share | Top-1 | Top-5 | Auto-accept precision |
|---|---|---|---|---|
| Clean legal name | 31% | 99.4% | 99.8% | 99.9% |
| Name + city, no legal form | 24% | 98.1% | 99.3% | 99.6% |
| Domain only | 14% | 96.8% | 98.4% | 99.4% |
| Identifier (VAT/LEI/register) | 11% | 99.9% | 99.9% | 100.0% |
| Trade name / brand alias | 9% | 94.2% | 97.6% | 98.8% |
| OCR-corrupted line | 7% | 91.7% | 96.1% | 98.1% |
| Former name, ≥3 years stale | 4% | 88.4% | 94.9% | 97.7% |
| Weighted total | 100% | 97.3% | 98.9% | 99.4% |
Run it yourself
The harness, the corruption generators and the label schema are public. The labelled set is available under a research agreement so it does not end up in a training corpus.
Calibration
Predicted confidence against observed precision on the held-out split. On the diagonal the number means what it says.
July run: predicted 0.925 across the 0.90–0.95 band, observed 0.928.
Where it degrades
Former names older than three years are our weakest class at 88.4%. Sole traders in jurisdictions without a public register are excluded from the benchmark entirely — we cannot resolve what nobody publishes, and averaging them in would flatter the number.
How the score is fitted
Per jurisdiction, on a held-out 40,000-record split, refitted monthly. A score is a probability, not a similarity: 0.90 has to be right nine times in ten or the fit is wrong and we say so in the changelog.
192 jurisdictions, three tiers
Financial depth is a separate axis from tier: it tracks what a jurisdiction obliges companies to file, which is why Swiss AGs sit at 22% and stay Tier 1.
Ingested from the primary register, with the full event history behind every field.
Assembled from official sources that publish identity but not a full filing stream.
Identity only, from official aggregates and international registers.
| Jurisdiction | Legal entities | Branches | Primary source | Filed financials | Median freshness | Tier |
|---|---|---|---|---|---|---|
| United States | 41,209,774 | 1,884,013 | 50 SoS registries · SEC EDGAR | 27 h | Tier 2 | |
| Germany | 6,412,880 | 318,204 | Handelsregister · Bundesanzeiger | 3.1 h | Tier 1 | |
| United Kingdom | 5,704,119 | 41,806 | Companies House | 1.4 h | Tier 1 | |
| France | 4,988,301 | 602,447 | INPI RNE · INSEE SIRENE | 6.8 h | Tier 1 | |
| Italy | 3,146,902 | 271,509 | Registro Imprese | 9.4 h | Tier 1 | |
| Poland | 2,905,441 | 88,120 | KRS · CEIDG | 11 h | Tier 2 | |
| Netherlands | 2,381,660 | 96,338 | KVK Handelsregister | 5.0 h | Tier 1 | |
| Switzerland | 762,455 | 54,912 | Zefix · SHAB | 2.2 h | Tier 1 |
1,340 sources, and how often each is read
Grouped by jurisdiction and by class. Cadence is the polling interval, not an average of how quickly a record happens to change.
A feed that falls behind its cadence raises an alert against the expected volume for that source on that day, so a court holiday reads as a court holiday rather than an outage. Live lag per jurisdiction is on the status panel, and every ingest change is in the changelog.
Three things that live on their own pages
Kept apart because they change on different clocks: guides when an endpoint moves, the changelog on every release, the blog when somebody finishes writing.
Status
Availability is probed from four networks we do not run. Incidents get a public postmortem within five business days.
Security & compliance
We hold registry facts, your query logs and your entity mappings — no payment data, no end-customer PII, no credentials to your systems.
| SOC 2 Type II | Audited annually; report on request |
| ISO 27001 | Certified · scope covers ingest, API and support |
| GDPR | DPA with SCCs, sub-processor list, 30-day deletion |
| EU residency | EU-only processing and log retention, no egress on failover |
| Penetration testing | Independent test twice a year, summary on request |
| Access | SSO/SAML, SCIM, scoped keys, full audit log |
| SOC 2 Type II report | Under NDA, current period |
| Security questionnaire | CAIQ and SIG Lite pre-filled |
| Sub-processor list | With 30 days notice of changes |
All of it from trust.spotit.ai.
Start with a key and a curl.
That is the whole quickstart. If it does not work inside five minutes, tell us and we will fix the docs rather than explain the error.
$ export SPOTIT_KEY=spk_test_8f2c... $ curl -s https://api.spotit.ai/v1/resolve \ -H "Authorization: Bearer $SPOTIT_KEY" \ -H "Content-Type: application/json" \ -d '{"q":"nordwind logistik hamburg"}' \ | jq '{id: .match.entity_id, conf: .match.confidence, name: .entity.name}' { "id": "ent_01JR8K3F5T2QW9", "conf": 0.987, "name": "Nordwind Logistik GmbH" }