💻 Tilores Studio is now available. Run entity resolution locally on your machine.Download free

← All Use Cases
Use Case

You can't map a supply chain
if you can't identify the companies

Supply chain intelligence depends on knowing precisely which companies you're tracking. When the same manufacturer appears under a dozen name variants across your sources, everything built on top — risk scoring, due diligence, compliance checks — inherits that ambiguity. Tilores resolves company records into a single, reliable entity graph before your intelligence layer ever runs.


The Problem

Duplicate company records corrupt everything downstream

Without Tilores

A tier-2 supplier appears across multiple data sources under different name forms. Your system treats each as a different company:

"Jiangsu Bright Mfg Co" and "JIANGSU BRIGHT MFG." are two separate entities — risk is split across both
Shipping record with embedded address fragment ("APPLE ELECTRONICS SHENZHEN GUANGDONG") doesn't match the registry entry
A sanctioned subsidiary looks unconnected to a key supplier because the name differs by transliteration
Due diligence runs on duplicates — analysts review the same company multiple times without knowing it
With Tilores

Every source record for a company resolves into a single canonical cluster — before any intelligence runs on top:

Token-weighted matching handles variable shipping names, transliterations, and embedded address fragments
Company records from 16+ source types resolve into one entity — registries, shipping data, customs, reference data
Risk and due diligence run against the full entity, not a single fragmented source record
New records ingest continuously — the entity graph updates in real time, not overnight batch

The Hard Part

Company matching is harder
than person matching

Two people named John Smith in the same city are relatively distinguishable. Two companies called Ideal Industries Inc. registered in the same state may be genuinely different organisations with no reliable discriminating attribute available.

Global shipping and customs data compounds this further. Records are captured from handwritten port documents, scanned forms, and OCR systems operating across dozens of languages and scripts. Company names carry embedded address fragments, extraneous tokens, transliteration variants, and missing attributes.

Standard fuzzy matching and exact name search can't resolve records like these. Tilores uses token-weighted matching that down-weights common terms ("industry", "solutions", "international"), handles diacritics and script variants, and applies consistency rules to prevent over-clustering — even when records from a dozen sources all describe the same company in different ways.

Same company — 6 ways it appears in your data
Company registry
Bright Precision Manufacturing Ltd.
US customs manifest
BRIGHT PRECISION MFG LTD SHENZHEN GUANGDONG
Shipping database
Bright Precision Mfg.
Trade reference data
Bright Precision Manufacturing Limited
Supplier portal
BPM Ltd
Invoicing system
Bright Precison Mfg Ltd
→ Tilores resolves all six to one canonical cluster

How It Works

An entity layer your intelligence stack builds on

1
Ingest All Sources

Connect company registries, shipping databases, customs feeds, trade reference data, and internal supplier records into a single Tilores instance via GraphQL.

2
Resolve the Entity

Tilores applies token-weighted matching, geo-distance rules, ID-based matching, and consistency checks to cluster all records for the same company — regardless of name variant or data quality.

3
Stream Cluster Events

As new records arrive, the entity graph updates continuously. Kafka-compatible event streams propagate cluster changes to your downstream systems automatically.

4
Build Intelligence On Top

Risk scoring, due diligence, sanctions screening, and supply chain mapping all run against a clean, de-duplicated company graph — not raw, unresolved source data.


Capabilities

Built for the complexity of real supply chain data

Token-Weighted Name Matching

Down-weights generic tokens ("industry", "solutions", "international") that cause false matches, while surfacing high-signal name fragments — even when embedded in OCR noise or address strings.

🔄
Continuous Ingestion

New records resolve in real time as they arrive from source pipelines. Your entity graph is always current — no nightly batch runs, no stale clusters, no delayed risk signals.

🛡
Consistency Rules

Even when matching rules fire, a designated field (VAT ID, tax number, company registration) can veto a cluster assignment — preventing over-clustering even in high-noise datasets.

🌐
Global Name Coverage

Handles Chinese business name structures, diacritics, script variants, and transliterations across languages — so entity resolution works across every geography in your supply chain.

📍
Geographic Distance Matching

Geo-coordinate-based rules let you match records that share a location within configurable distance thresholds — useful when address strings differ but physical location is consistent.

Sub-100ms Query Latency

Search and resolve across hundreds of millions of records in under 100 milliseconds — fast enough for real-time lookups, due diligence workflows, and transactional risk checks.


Customer Story

Resolving the world's companies at scale

110M+
Source records
ingested and resolved
60M
Canonical clusters
resolved company entities
<24h
Full load time
110M records clustered
30pts
F1 improvement
vs. in-house baseline

The challenge

Exiger is a market leader in due diligence and supply chain risk intelligence, recognised as a Leader in the 2025 Gartner Magic Quadrant for Supplier Risk Management. To deliver accurate supply chain maps and risk profiles, Exiger first needed to solve a foundational problem: which companies are actually in the chain?

Exiger ingests data from more than 16 distinct sources — company registries, curated legal entity reference data, and global shipping and customs data — and needed to resolve all of those records into a single, reliable entity graph. The scale: 110 million source records resolving to 60 million canonical company clusters, with 5.5 billion underlying shipment records.

Their previous in-house rule-based system had been tuned for high precision — but at the cost of recall. Under-clustering meant duplicates accumulated throughout the database, making supply chain maps unreliable and due diligence searches difficult for end customers.

"The names can be very challenging to work with — extraneous tokens, transliteration variants, and sometimes parts of the address embedded in the company name itself. A normal fuzzy name search, or any kind of exact name search, is just not going to match those records together."

John Willcox, Data Scientist, Exiger

Why Tilores won the evaluation

Exiger ran a two-month structured evaluation across multiple solutions, measuring precision, recall, F1 score, and cluster purity on an annotated ground truth dataset drawn from their own sources. Competing solutions were strong on clean, address-rich data — but for much of Exiger's shipping and customs data there is often no usable address, and company names are highly variable in how they're captured.

Token-weighted matching proved decisive. Two further factors confirmed the decision: the ability to inspect and modify matching rules (rather than a black-box system), and an architecture that sat cleanly as an entity layer inside Exiger's existing AWS infrastructure — without requiring dependent systems to be rebuilt around it.

"Not all products do this. Some of them are very black-boxy — you have to carve out some sort of sandbox for them and it's quite difficult to integrate without other things becoming dependent on them. This was one of those architectural solutions that I genuinely liked. It's quite nice."

Simon Baker, SVP of AI Products & Supply Chain Intelligence, Exiger

The implementation

Exiger's Spark pipelines route records into Tilores via its GraphQL API. A Kafka event stream propagates cluster events from Tilores into Exiger's downstream data warehouse and product APIs — continuously and automatically. The full initial load of 110 million records completes in under 24 hours; searches against 60 million clusters return in under 100 milliseconds.

The matching configuration — reached through nine months of iterative collaboration — comprises 23 distinct clustering rules: token-weighted name matching, geo-distance rules, ID-based matching, Chinese business name rules, diacritics handling, fuzzy search, and Tilores's consistency rule type, which rejects records from clusters even when matching rules fire, if a designated field (such as a VAT ID) conflicts with existing cluster members.

23
Clustering rules configured jointly
16+
Data source types integrated
100ms
Query latency across 60M clusters

"This is a very fundamental piece of data that will have downstream effects. We have AI models all over the place, and if you start off with bad initial input, you could end up with garbage in, garbage out. A lot of models will benefit from a good entity system early in the pipeline."

Simon Baker

SVP of AI Products & Supply Chain Intelligence, Exiger


Technical Fit

Designed for enterprise data infrastructure

Cloud

Available on AWS Marketplace. Integrates with existing Spark, Kafka, and data warehouse infrastructure without rebuilding dependent systems.

API

GraphQL API for record ingestion and entity search. Event streaming for cluster updates propagated downstream.

Latency

<100ms search across hundreds of millions of records — suitable for real-time due diligence, analyst tooling, and transactional lookups.

Scale

Handles 110M+ records with cluster sizes up to 6,000 records. Clique-based graph compression handles the largest clusters without performance degradation.

Ingestion

Continuous ingestion — new records resolve into the entity graph in real time, not overnight batch. Full initial loads of 110M records complete in under 24 hours.

Compliance

SOC 2 certified. Explainable matching — every resolution decision returns matched attributes, source records, and the rules that triggered the match.

Example — resolve company entity from shipping record
query ResolveCompany($name: String!, $country: String!) {
  search(input: {
    parameters: {
      companyName: $name
      country: $country
    }
  }) {
    entities {
      id
      score
      hitScore
      records {
        id
        companyName
        registrationNumber
        country
        vatId
        sourceType
      }
    }
  }
}

Explore

Related use cases


Start from accurate company identity —
build better intelligence on top

See how Tilores resolves company records at scale. Available on AWS Marketplace.