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.
Duplicate company records corrupt everything downstream
A tier-2 supplier appears across multiple data sources under different name forms. Your system treats each as a different company:
Every source record for a company resolves into a single canonical cluster — before any intelligence runs on top:
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.
An entity layer your intelligence stack builds on
Connect company registries, shipping databases, customs feeds, trade reference data, and internal supplier records into a single Tilores instance via GraphQL.
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.
As new records arrive, the entity graph updates continuously. Kafka-compatible event streams propagate cluster changes to your downstream systems automatically.
Risk scoring, due diligence, sanctions screening, and supply chain mapping all run against a clean, de-duplicated company graph — not raw, unresolved source data.
Built for the complexity of real supply chain data
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.
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.
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.
Handles Chinese business name structures, diacritics, script variants, and transliterations across languages — so entity resolution works across every geography in your supply chain.
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.
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.
Resolving the world's companies at scale
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.
"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
Designed for enterprise data infrastructure
Available on AWS Marketplace. Integrates with existing Spark, Kafka, and data warehouse infrastructure without rebuilding dependent systems.
GraphQL API for record ingestion and entity search. Event streaming for cluster updates propagated downstream.
<100ms search across hundreds of millions of records — suitable for real-time due diligence, analyst tooling, and transactional lookups.
Handles 110M+ records with cluster sizes up to 6,000 records. Clique-based graph compression handles the largest clusters without performance degradation.
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.
SOC 2 certified. Explainable matching — every resolution decision returns matched attributes, source records, and the rules that triggered the match.
query ResolveCompany($name: String!, $country: String!) {
search(input: {
parameters: {
companyName: $name
country: $country
}
}) {
entities {
id
score
hitScore
records {
id
companyName
registrationNumber
country
vatId
sourceType
}
}
}
} 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.