A support agent we audited last year had a 94% accuracy score in staging and a furious enterprise customer in production. The cause was not the model, the prompt, or the retrieval pipeline. The customer existed twice in the CRM: once as "Acme Corp" with an active $180K contract, once as "ACME Corporation" with a churned status from 2023. The agent pulled the churned record, told the customer their account was closed, and offered them a win-back discount on a product they were already paying for.
A human rep would have noticed the two records, muttered something unprintable, and checked the billing system. The agent did what agents do: it took the context it was given and acted on it, confidently, in under four seconds.
This is the pattern behind a large share of AI workflow failures that get misdiagnosed as model problems. The model is fine. The context is contaminated. And duplicate context - two fields, two records, or two documents that disagree about the same fact - is the most common contamination there is.
Why Agents Fail Faster on Dirty Data Than Humans Do
Humans have been working around messy CRMs for decades. Sales reps know which fields are junk. Support teams know the wiki page from 2022 is wrong and the Slack pin is right. This tribal knowledge is invisible, unwritten, and completely unavailable to an AI agent.
That gap matters more than most data quality discussions admit, because agents change the failure economics in three ways:
- Silent conflict resolution. Given two conflicting values, an agent picks one. It does not flag the conflict unless you built it to. Retrieval order, embedding similarity, or token position decides which "truth" wins, which means the choice is effectively random from a business standpoint.
- Scale without suspicion. A human making 40 account updates a day catches oddities by pattern recognition. An agent making 4,000 updates propagates a bad merge into every one of them before anyone reviews a sample.
- Compounding writes. Agents do not just read dirty data - they write on top of it. An agent that enriches records keyed on the wrong duplicate creates a third version of the truth. Now your cleanup job is bigger than before you automated.
The cost baseline was already bad before agents arrived. Gartner has estimated that poor data quality costs organizations an average of $12.9 million per year, and Thomas Redman's analysis in Harvard Business Review put the aggregate U.S. cost of bad data at $3 trillion annually. Those figures predate agentic automation. Agents do not create the problem; they remove the human buffer that was absorbing it.
There is a version of this at the portfolio level too. PE operating partners rolling out AI across mid-market companies keep hitting the same wall: the diligence deck said "CRM with 40,000 accounts," and the reality is 40,000 rows describing maybe 26,000 companies. AI-assisted diligence workflows are getting faster - Third Bridge's 2026 guide covers how much of the research grind agents now absorb - but post-close value creation plans that assume automatable data are where the write-downs happen.
Key takeaway: an agent inherits your data debt with none of the tribal knowledge your people use to route around it. Budget for that gap explicitly.
The Three Layers of Duplicate Context
"Duplicate data" gets used as one bucket, but the fixes differ by layer. Untangle them or you will buy a dedupe tool to solve a document problem.
Layer 1: Duplicate and conflicting fields
Same record, multiple fields claiming the same fact. annual_revenue, revenue_2025, and arr_estimate all populated, all different. owner and account_manager pointing at two employees, one of whom left in March. This happens because every integration and every admin over the years added fields rather than fighting over existing ones.
The fix is a canonical field map: for each fact the agent needs, name exactly one field as authoritative, and treat the rest as deprecated. This is a spreadsheet exercise, not an engineering project. For a typical mid-market CRM workflow it covers 10 to 30 fields and takes an afternoon of arguments between sales ops and finance. Have the arguments. The agent cannot have them for you.
Layer 2: Duplicate records
Two or more rows describing one real-world entity. Classic causes: form fills creating new leads instead of matching existing ones, list imports without match rules, subsidiaries entered as separate accounts, M&A on the customer's side. Industry practice puts CRM duplicate rates anywhere from 10% to 30% in systems without enforced matching, and the CRM hygiene playbooks for AI readiness now treat deduplication as a precondition for agent deployment, not a nice-to-have.
Here is the part most teams get backwards: deduplication is a policy problem before it is a matching problem. Fuzzy matching finds the pairs. It cannot tell you what to do with them. Which record survives? Which field values win the merge? What happens to activity history and open opportunities on the loser? Teams that buy matching tools before writing merge policy end up with a queue of 8,000 flagged pairs and no one authorized to resolve them.
Layer 3: Duplicate and stale documents
The knowledge-base version of the same disease. The 2024 pricing PDF and the 2026 rate card both live in the retrieval index. The old refund policy was never deleted, just superseded by a page that links to it. Retrieval ranks by semantic relevance, not recency, so the stale document wins whenever it happens to match the query phrasing better.
This is the layer that burns RAG deployments. The agent is not hallucinating; it is faithfully citing a document you forgot existed. Fixes live in the pipeline: effective-date and supersedes metadata on every indexed document, an archive tier excluded from retrieval, and recency weighting in ranking. Tooling like Great Expectations handles assertion-based checks on structured data; for documents, the equivalent discipline is an ownership and expiry review, which is less glamorous and more necessary.
Source Precedence: Deciding Which System Wins
Once you look across systems instead of within one, conflicts stop being errors and start being ambiguity. The CRM says the contract is $180K. The billing system says $195K after a mid-term upsell. Neither is "wrong" - they answer subtly different questions. Your staff resolves this instinctively: everyone knows billing is the truth for money. The agent knows no such thing.
So write it down. A source precedence table ranks systems per fact domain:
| Fact domain | Wins | Loses | Tiebreaker |
|---|---|---|---|
| Contract value, invoices | Billing system | CRM, spreadsheets | Most recent invoice |
| Contact ownership, deal stage | CRM | Email threads, spreadsheets | Last human edit |
| Product entitlements | Provisioning database | CRM, sales decks | None - provisioning is absolute |
| Policy and pricing terms | Current published docs | Archived docs, Slack | Effective date |
| Org structure, headcount | HRIS | CRM notes, LinkedIn enrichment | HRIS always |
Then encode it. In practice that means the agent's tools fetch from the winning source directly for high-stakes facts, rather than trusting whatever landed in the context window. For lower-stakes facts, a reconciliation step compares sources and either auto-resolves by precedence or escalates conflicts above a threshold to a human queue.
Two rules that save real money:
- Financial actions read from financial systems. If the agent quotes, credits, or bills, the number comes from billing at execution time. Never from CRM, never from an embedding.
- When precedence cannot resolve it, the agent must say so. "I found conflicting contract values ($180K in CRM, $195K in billing) - flagging for review" is a feature, not a failure. Silent resolution is the failure. This connects directly to the marketing-workflow warning that SmartBrief raised for 2026: AI layered on broken processes does not fix them, it masks them until they surface as customer-facing errors.
Key takeaway: agents cannot infer your organization's trust hierarchy. A one-page precedence table encoded into tool design prevents more incidents than a better model does.
Scoping the Cleanup Without Boiling the Ocean
The reflexive response to all of the above is "we need a data quality initiative first." That instinct kills more agent projects than bad data ever did, because enterprise-wide master data management is a multi-year program and the agent business case dies waiting for it.
The counter-intuitive move: your agent does not need clean data. It needs consistent data along the paths it actually reads and writes. That is a dramatically smaller surface.
The scoping method we use:
- Trace the workflow's data touchpoints. List every field the agent reads, every field it writes, and every document collection it retrieves from. For a renewal-outreach agent this is maybe 20 fields across two systems and one folder of contract docs. Not the whole CRM.
- Profile only that surface. Duplicate rate on the accounts in scope, null and conflict rates on the 20 fields, staleness distribution on the documents. Modern AI-assisted data prep tools make profiling fast; the judgment about what "clean enough" means is still yours.
- Fix in priority order: canonical field map first (days), merge policy plus dedupe on in-scope records second (weeks), document expiry and precedence encoding third (concurrent). Everything outside the workflow's surface goes on the backlog, guilt-free.
- Put a fence around the clean zone. Match rules on the forms and imports that feed these records, validation on the canonical fields, an expiry owner for the document set. Cleanup without prevention is a subscription you pay quarterly.
For a mid-market company, this scoped version is typically two to five weeks of combined ops and engineering effort per workflow. Each additional workflow gets cheaper because surfaces overlap. Three workflows in, you have organically built the high-value core of a master data program - by shipping, not by planning.
Treat Data Quality as an Eval, Not a Project
Cleanup decays. Context drift is not an event; it is a rate. New duplicates enter through every form fill, docs go stale every quarter, and the precedence table rots when someone swaps the billing system. So the last piece is measurement, and it belongs inside the same evaluation harness you use for the agent itself.
Hamel Husain's argument that your AI product needs evals built on error analysis applies directly here: when you categorize your agent's production failures, tag the ones caused by data conflicts separately from model or prompt failures. In our audits, data-conflict failures routinely outnumber genuine model failures once the prompt is stable - which means retraining or model upgrades were never going to fix them.
Concretely, track three numbers per workflow:
- Conflict encounter rate: how often the agent's retrieved context contains disagreeing values for the same fact. Instrument the reconciliation step to log every conflict, resolved or escalated.
- Escalation precision: of the conflicts flagged to humans, how many were real. Too low and you are spamming your team; near-perfect and your threshold is too loose and silent errors are slipping through.
- Staleness at retrieval: the age distribution of documents the agent actually cites, checked against their effective dates.
When conflict encounter rate trends up, that is your early warning - weeks before it shows up as customer-facing errors. This is the same instinct behind Airbnb's Midas certification process: treat data quality as an owned, certified, continuously verified property of the assets that matter, not a one-time scrub.
How OpenNash Can Help
Most of our agent engagements start with someone else's stalled deployment, and the pattern above - contaminated context misdiagnosed as a model problem - is the single most common thing we find in the audit.
Our process maps onto this article directly. The audit traces your target workflow's data surface and profiles duplicate, conflict, and staleness rates so you know the real precondition work before committing to a build. Design produces the canonical field map, merge policy, and source precedence table as reviewed artifacts your team owns, along with the escalation rules for conflicts the agent should not resolve alone. The build encodes precedence into tool design (financial facts from financial systems, recency-aware retrieval, logged reconciliation), and deployment hands over the conflict-rate dashboards and eval harness with full ownership - our CRM hygiene automation work often continues as the fence that keeps the clean zone clean.
If you are a PE operating team or a mid-market operator with an agent project that keeps stalling on "we should clean the data first," the scoped approach here usually unblocks it in weeks. Book a call and we will map your workflow's actual data surface, which is almost always smaller than the ocean you have been told to boil.
The honest guidance: if your workflow lives entirely inside one well-governed platform, that platform's native dedupe and AI features may be enough, and you should use them. Custom work earns its cost when the workflow spans systems that disagree - which, for most companies past their first acquisition or their second CRM admin, is exactly where the valuable workflows live.