πŸ’» Tilores Studio is now available. Run entity resolution locally on your machine.Download free

← Back to Blog
AI Agents July 10, 2026 Β· 9 min read

How AI Agents Resolve the Same Customer Across Scattered Data Sources (2026)

Steven Renwick
Steven Renwick
CEO, Tilores
How AI Agents Resolve the Same Customer Across Scattered Data Sources (2026)

TL;DR: A customer’s identity fragments across a CRM, a billing system, a support desk, and product logs, each holding a different email, ID, or spelling of the same name. When an AI agent needs to act on that customer, it should call Tilores at query time to retrieve the current resolved entity, then hand that unified context to the LLM, instead of asking the model to guess which records belong together.

Book a demo to give your AI agents one resolved customer across every source, or get the evaluation build to try it locally. Explore Tilores IdentityRAG for the retrieval pattern.

This piece is about resolving which scattered records are the same customer. For the related problem of keeping that resolved context current so agents never act on stale data, see stopping AI agents using stale, fragmented customer data.

What makes customer identity hard for an AI agent across CRM, billing, and support?

A single customer usually exists in four or more separate systems before an AI agent ever gets involved. The CRM holds an account record under a work email. Billing holds a customer ID and a phone number that may not match what support has on file. Support holds a ticket queue keyed to whatever email the customer typed that day. Product logs hold a device ID that was never meant to be human readable. None of these identifiers were designed to line up, and the same person often looks different in each system: a work email here, a personal email there, a maiden name on one billing account and a married name on another. An agent that only reads what is sitting in the prompt sees several unconnected fragments, not one customer.

Closing that gap takes two techniques working together. Deterministic matching handles identifiers that are genuinely stable, such as an account number, a verified email, or a source record ID. Probabilistic or fuzzy matching handles everything that varies in spelling or format, including names, addresses, and phone numbers. Deterministic rules alone miss the customer who changed their email last year, and fuzzy matching alone risks merging two different people who happen to share a common name.

How does an AI agent resolve identity in real time instead of guessing?

The reliable pattern keeps identity resolution out of the model and out of the prompt entirely. Records are resolved and assembled into entities at ingestion, using both deterministic and probabilistic or fuzzy rules, so by the time an agent needs to act, that work is already done. What is left at query time is a fast retrieval of the current entity, not a live matching decision made by the LLM.

The flow is the same regardless of which system triggered the request. The agent receives a query, a support ticket, a chat message, or an internal workflow step, and pulls whatever identifier it already has: an email, a phone number, an account number, or a ticket reference. It calls Tilores to resolve and unify the records tied to that identifier into the current entity, then feeds that resolved, compact context back to the LLM, so the model reasons over one customer instead of several disconnected records.

This matters because asking an LLM to infer identity from raw, unjoined fragments in a prompt is brittle. Confusingly similar names, near duplicate emails, and stale contact details are exactly the kind of ambiguity a language model handles inconsistently, and it has no durable memory of which records were already confirmed to belong together. We cover that gap in whether LLMs can be used for entity resolution: a model reasons well once identity is settled, but it should not decide whether two records are the same person.

What does a consistent customer view across touchpoints actually look like?

A consistent view means the agent retrieves the same resolved entity no matter which system it started from, and no matter how the customer identified themselves in that moment.

TouchpointTypical identifier that system holds aloneWhat that identifier alone cannot tell an agent
CRMAccount record, often a work emailWhether recent billing or support activity belongs to the same person
BillingCustomer ID, invoice history, phone numberWhether the person emailing support today is that same billing customer
SupportTicket queue keyed to a submitted emailWhether the account has other emails, phone numbers, or a linked business relationship
Product or appDevice ID or internal user IDWhether that usage maps to the same person the other systems already track

Tilores builds the resolved entity from the records each source system submits, and can return the records, their connections, and match evidence in the same query. The agent selects only the fields it needs for the task, rather than pulling raw records from four systems and hoping the model reconciles them.

Consistency also has to hold up over time. A customer who updates a phone number today should not be a stale hit in the CRM tomorrow. We cover that recency requirement, and why identity work does not stop after a single onboarding check, in perpetual KYC and why identity resolution is never really finished. The same discipline that keeps a compliance profile current keeps an agent’s customer view current.

Concrete example: a support agent disambiguating two similar customers

Consider a support agent handling an inbound ticket from j.smith@example.com about a billing dispute. The CRM has a record for John Smith under a different, older email address. Billing has an account under J. Smith with a phone number on file. The support system also has a separate, unrelated customer named Jonathan Smith, a similar sounding name with no relationship to the first. If the agent only reads the ticket text, it has one email address and a complaint. If it searches loosely for anything containing β€œSmith,” it risks surfacing the wrong account, or missing that the ticket’s email belongs to the same customer as the older CRM record.

Instead, the agent calls Tilores with the identifier it has: the ticket email. Tilores returns the resolved entity for that email, including the CRM record linked by a verified account number, the billing record linked by a probabilistic match on name and phone, and a confidence score for each connection. Jonathan Smith does not appear, because nothing in his records matches on either the deterministic identifiers or the fuzzy attributes. The agent hands the LLM one resolved profile with its match evidence, and the response addresses the correct customer’s billing history, not a guess stitched together from a partial match.

What does the identity resolution call actually look like?

In practice, the agent’s identity resolution step is a single API call wired in as a tool the agent invokes before it answers. A minimal version, using the resolved email from the ticket, looks like this:

query {
  search(input: {
    parameters: {
      email: "j.smith@example.com"
    }
  }) {
    entities {
      id
      score
      hitScore
      records {
        firstName
        lastName
        email
        phoneNumber
        sourceSystem
      }
    }
  }
}

The response gives the agent an entity ID, the score and hitScore match confidence fields, and the underlying records with their source systems, enough to build a compact, auditable context packet instead of forwarding raw records from four systems into the prompt.

Our MCP server is a separate, build time tool for engineers designing this integration: public, stateless, read only, no API key required, useful for schema design, query recipes, and validating a rule configuration, but not where production customer data should be sent. The runtime call that resolves a real customer, like the query above, goes through the authorized Tilores API, which returns the current resolved entity for that customer.

How does a customer-aware agent stay in sync with CRM, billing, and support without manual stitching?

Keeping this current does not mean the agent, or its engineering team, has to write and maintain merge logic by hand. CRM, billing, support, and product systems submit records into Tilores as they change, and Tilores maintains the resolved entity graph continuously, applying deterministic rules where an identifier is stable and fuzzy matching where names, addresses, and contact details vary. The agent’s job stays simple: ask for the current entity, do not try to reconstruct it. A new billing platform submits records the same way the existing systems do, and the resolved entity grows without changing how the agent calls it. If you are evaluating which platform should own this layer, we cover the tradeoffs in how to evaluate identity resolution platforms in 2026.

Where does this sit next to the CRM, MDM, and existing systems?

None of this replaces the CRM, the billing platform, or the support desk. Each still owns its own operational data, workflows, and reporting. What an agent needs is a resolved entity layer it can call at query time, sitting next to those systems rather than duplicating them. The same logic applies next to a master data management program: identity resolution and MDM solve related but different problems, and we walk through where each fits in entity resolution technology for master data management.

What is the implementation takeaway?

A customer-aware agent is not a bigger prompt. It is a better handoff from the identity layer. Resolve records as they arrive from CRM, billing, support, and product systems, retrieve the current entity when the agent needs it, and keep that retrieval as a discrete, auditable tool call rather than folding it into the model’s reasoning. That gives the agent one customer to talk about, and gives the engineering team a place to inspect why two records were, or were not, linked.

FAQ

What techniques does an AI agent use to resolve customer identity across multiple data sources?

Deterministic matching on stable identifiers, such as account numbers and verified emails, combined with probabilistic or fuzzy matching on attributes that vary across systems, such as names, phone numbers, and addresses. Both run at ingestion, so the agent retrieves an already resolved entity instead of matching records itself.

How does identity resolution fit into an agentic AI workflow that includes a CRM?

The agent calls the identity resolution layer at query time with whatever identifier it already has, gets back the current resolved entity that includes the CRM record and any linked records, and passes that unified context to the LLM before it responds or acts.

How does an AI agent keep a consistent customer view across touchpoints?

By retrieving the same resolved entity regardless of which touchpoint, CRM, billing, support, or product, triggered the query, and by checking that entity at query time rather than relying on a cached or one time match from earlier.

How do you build a customer-aware AI agent across CRM, support, and billing?

Wire the agent to call an identity resolution API as a tool before it answers, so it retrieves one resolved entity assembled from CRM, billing, and support records, rather than asking the model to reconcile raw records itself.

Should the LLM decide whether two records are the same customer?

No. That decision belongs in the data layer, which applies deterministic and fuzzy matching consistently and keeps an auditable record of why records were linked. The model should reason over the result, not produce it.

What is the difference between the Tilores MCP server and the API an agent calls at runtime?

The MCP server is a public, stateless, build time tool for designing and validating a Tilores integration. Production identity resolution calls, the ones returning a real customer’s resolved entity, go through the authorized Tilores GraphQL API.

Does resolving identity for an agent replace the CRM or an MDM program?

No. The resolved entity layer sits next to those systems. The CRM, billing platform, and MDM program keep their existing roles, and the agent calls the identity layer only for a current, unified view before it acts.

What happens when two customers have very similar names?

The resolution layer returns confidence scores and match evidence with each entity, so the agent surfaces the customer whose deterministic and fuzzy attributes actually match the query context, rather than merging or guessing between two similarly named people.

See what resolved entity data does for your business β€” and your AI.