Loading tutorials…
Loading tutorials…
Salesforce data quality decays silently. Duplicates compound, validation gaps widen, sync drift accumulates. By the time leadership notices, reports are 30% wrong and rep adoption has tanked. Here is the systematic diagnosis + fix sequence.
Who this is forRevOps owners, Salesforce admins, and sales managers running an org that has been live for 12+ months. If your Account list has 'Acme Inc,' 'Acme, Inc.,' and 'Acme Incorporated' as three separate records, or if your reports show a 30% revenue gap from real numbers, this tutorial is for you.
What you'll need
Step 1
Reports → New Report → quantify the damage before fixing. Number of duplicates, % of Opportunities missing Amount/Close Date, stale records.
Build "Account Duplicate Audit": Reports → Accounts → group by Account Name (with normalization). Look for Account Names appearing 2+ times. Salesforce ships a Standard Report Type "Accounts" — use it.
Build "Contact Duplicate Audit": same approach but on Contact Email.
Build "Opportunity Data Quality": filter Open Opportunities, count those missing Amount, Close Date, Lead Source, Type. Surface as % of total Open pipeline.
Build "Stale Records": Accounts with no activity (no Task, no Event, no related Opportunity update) in 12+ months. These are decaying data that misleads reports.
Pin all four reports to a "Data Quality Dashboard." Share with the leadership team. This becomes the baseline — measure improvement against these numbers.
Step 2
Setup → Duplicate Management → Matching Rules + Duplicate Rules. Native dedup against Standard fields (Account.Name, Contact.Email, Lead.Email).
Setup → Quick Find → "Matching Rules" → New Matching Rule. For Account: rule = "Match Account Name and Website domain" (Account.Name fuzzy match + Account.Website exact domain match).
For Contact: Match on Email (Exact) and FirstName (Fuzzy). For Lead: Match on Email (Exact).
Activate the Matching Rule. Then Setup → Duplicate Rules → New Duplicate Rule → choose the object → pick the Matching Rule → set Action on Create + Edit: "Allow with alert" (rep sees a banner) or "Block" (rep cannot save). Allow with alert is usually the right default.
Set "Alert Text" to be helpful: "A potential duplicate exists. Click View Duplicates to confirm before saving."
Activate the Duplicate Rule. From now on, every Account/Contact/Lead creation will be checked. Existing duplicates are NOT auto-merged — only new ones are blocked.
Step 3
Setup → Duplicate Jobs → New Job (Enterprise+). Salesforce scans all existing records and produces a Duplicate Record Set list for review and merge.
Setup → Quick Find → "Duplicate Jobs" → New Job → choose object (Account, Contact, or Lead) → pick a Matching Rule.
Run the job. Salesforce scans every record on that object against the Matching Rule and creates "Duplicate Record Sets."
Reports → New Report → Duplicate Record Sets. Group by Object, sort by Record Count descending. The Record Sets with the most duplicates are the worst offenders.
For each Record Set: click the link → review the duplicate records side-by-side → choose Master → Merge. Salesforce merges, preserving the chosen Master and rolling up child records (Opportunities, Activities, Cases) under it.
Plan for 30 seconds to 5 minutes per merge depending on complexity. A 1,000-duplicate cleanup is a 1-2 day project. Tools like DemandTools / Cloudingo accelerate this 10-50x.
Step 4
Setup → Object Manager → object → Validation Rules. Block saves where critical fields are missing or malformed.
Setup → Object Manager → Opportunity → Validation Rules → New. Formula: AND(ISPICKVAL(StageName, "Closed Won"), ISBLANK(Amount)) → Error Message: "Closed Won Opportunities must have an Amount."
Add validation for Close Date: AND(NOT(IsClosed), Close_Date__c < TODAY()) → Error: "Open Opportunities cannot have a past Close Date. Update the Close Date before saving."
For Account: REGEX(Website, "^https?://.+") → Error: "Website must be a valid URL." Or NOT(REGEX(Phone, "^[0-9+\-()\s]+$")) → Error: "Phone must be digits, spaces, and dashes only."
For Lead: AND(ISBLANK(Email), ISBLANK(Phone)) → Error: "Lead must have Email or Phone."
Test each validation rule with a real record before activating. Bad rules block ALL saves on that object — including legitimate ones. Most admins build rules in a sandbox first.
Step 5
Build Schedule-Triggered Flows that flag stale records, normalize bad data, and run weekly hygiene.
Setup → Flows → New Flow → Schedule-Triggered Flow. Schedule: weekly, Sunday 2 AM. Object: Account. Filter: Last Activity Date < 12 months ago AND Type = "Customer."
Action: set a custom field 'Hygiene Flag' = 'Stale Customer.' Send email to the Account Owner: 'This Customer Account has had no activity in 12+ months. Review and update or close.'
Build another Flow for Contact normalization: Schedule-Triggered, daily. Filter: Email contains uppercase letters. Action: Update Records → set Email = LOWER(Email). Salesforce stores Email case-sensitively, which creates near-duplicates ("john@acme.com" vs "John@Acme.com" treated as different).
Build another for Phone normalization: Daily, Phone contains characters other than digits and standard separators. Action: clean to E.164 format via a formula.
Each Flow has fault paths logging failures to a custom Log object or emailing the admin.
Step 6
Account-level data (industry, annual revenue, employee count) decays fast. Data.com Clean (now Lightning Data) or external tools (ZoomInfo, Clearbit) keep it fresh.
Setup → Feature Settings → Sales → Data.com → Configure. (Lightning Data, Clearbit, ZoomInfo all available on AppExchange — Data.com itself is being sunset; check current options.)
Map enrichment fields to Salesforce: Industry → Account.Industry, Employee Count → Account.NumberOfEmployees, Annual Revenue → Account.AnnualRevenue, Tech Stack → custom field.
Schedule the enrichment to run weekly. Watch credit consumption (Lightning Data, ZoomInfo, Clearbit all bill per enrichment call).
Override only stale data. Configure the integration to NOT overwrite fields edited within the last 30 days — preserves manually-entered data when reps have already validated it.
Monitor enrichment success rate. <80% match rate usually means your Account Name and Website data is dirty — the enrichment tool cannot find matches. Fix that first.
Step 7
Pin the audit reports from Step 1 to a leadership dashboard. Review weekly. Trend the numbers down over quarters.
Dashboards → New Dashboard → 'Data Quality — Weekly.' Pin: Duplicate Count by Object, % Open Opps Missing Amount, % Open Opps with Past Close Date, Stale Customer Accounts, Sync Errors Last 7 Days.
Subscribe RevOps Manager and VP Sales weekly. Numbers should trend down month-over-month.
In the weekly review: any metric that ticks up gets an owner and a fix-by date. Treat data quality like security — measurable, owned, weekly cadence.
Quarterly: rerun the full Duplicate Job. Compare to last quarter. Goal: <2% duplicate rate on Accounts, <5% on Contacts, <1% on Leads.
Adoption signal: when leadership stops opening shadow spreadsheets and references Salesforce dashboards in board reviews, data quality work is paying off.
Common mistakes
No Duplicate Rules at all
What goes wrong: Reps create 'Acme Inc' when 'Acme, Inc.' (with comma) already exists. Within a year, the Account list has 40% duplicates. ABM reporting is meaningless. Pipeline reports show three different revenue numbers for the same customer. Reports show a 30% revenue gap from duplicate-induced double-counting.
How to avoid: Setup → Duplicate Management → Matching Rule + Duplicate Rule on Account (Name + Website), Contact (Email), Lead (Email). Action: Allow with alert. Activate today.
Validation rules that block legitimate saves
What goes wrong: Admin builds validation: 'Opportunity Close Date must be future.' Reps editing closed-historical Opportunities cannot save them. Reports go stale. Reps work around in Excel. Rep adoption drops to 20% after 90 days because the system fights them on every save.
How to avoid: Always wrap validation rules in IsNew() or NOT(IsClosed) conditions. Test in sandbox with multiple record states (new, in-progress, closed). Use clear error messages.
Letting enrichment overwrite manually-cleaned data
What goes wrong: RevOps manually validates 200 strategic Account records. Next week, the enrichment tool runs and overwrites half of them with stale Clearbit/ZoomInfo data. RevOps redoes the cleanup. Resentment builds.
How to avoid: Configure enrichment with "Only overwrite if Salesforce field is blank" or "Skip records modified in last 30 days." Most enrichment tools support this in their settings.
Never auditing stale Accounts
What goes wrong: Org accumulates 8,000 Accounts with no activity in 18+ months. Marketing emails go to dead addresses. Bounce rates climb. ESP reputation drops. Sales reports include long-defunct customers in TAM calculations. Reports show a 30% revenue gap from working stale lists.
How to avoid: Quarterly stale-record audit: Last Activity Date > 12 months → flag, review, mark Inactive or delete. Build a Schedule-Triggered Flow that flags weekly.
Merging duplicates manually one-by-one
What goes wrong: Admin merges 5 duplicates per day. Org has 2,000 duplicates. At 5/day, that is 400 days of work. Three years before the queue is empty. Meanwhile new duplicates are created daily.
How to avoid: Use a tool: DemandTools, Cloudingo, or Salesforce Duplicate Jobs in bulk. Spend $500-2,000 on a tool that does what would take a human 6 months in a single weekend.
Tracking data quality without leadership accountability
What goes wrong: RevOps builds the data quality dashboard. Nobody else looks at it. Numbers degrade. RevOps fights the same fires every quarter. Eventually data quality work is dropped because 'nobody cares.'
How to avoid: Subscribe VP Sales, CRO, and CFO to the weekly Data Quality dashboard email. Tie data quality KPIs to RevOps OKRs. Make it a leadership-level metric.
Recap
Done — what's next
How to set up Salesforce Leads, Contacts, and Opportunities without confusing your reps
Read the next tutorial
Hand it off
Data quality work is the un-glamorous foundation of every healthy Salesforce org. A specialist who has cleaned 30+ orgs knows which tools save 90% of the time (DemandTools, Cloudingo) and which validation rule patterns work without blocking legitimate work. EverestX Salesforce-capable specialists run $400-1,200/mo at $14-16/hr — or $400-800 for a one-shot data hygiene engagement.
See specialist rates
Matching Rules define HOW Salesforce identifies a potential duplicate (e.g., 'Account Name fuzzy match AND Website exact match'). Duplicate Rules define WHEN to check and WHAT to do (e.g., 'on Create + Edit, alert the user'). You need both: a Matching Rule to define the logic, a Duplicate Rule to enforce it.
For new-record dedup (block at creation): Salesforce native is fine and free. For bulk cleanup of existing duplicates: DemandTools ($300-1,500/mo) and Cloudingo ($1,000-3,000/mo) are 10-50x faster than native. Calculate: if you have 500+ existing duplicates, the tool pays for itself in saved admin time within one cleanup.
Salesforce stores Email case-sensitively, which creates near-duplicates. Fix with a Schedule-Triggered Flow: filter Contacts/Leads where Email contains uppercase letters, set Email = LOWER(Email) via Update Records. Run daily. This single fix typically catches 5-15% of false dedup non-matches.
Industry benchmark: <2% duplicate rate on Accounts, <5% on Contacts, <1% on Leads. Above these, reports become unreliable. Most orgs that have never run dedup hit 15-30% duplicate rates by month 18. Establishing the baseline (running a Duplicate Job and counting) is step one.
Configurable per field. Most tools support modes: 'Always overwrite,' 'Overwrite if Salesforce is blank,' 'Append to a custom enrichment field (never overwrite original).' Set deliberately per field — Industry and Annual Revenue are usually safe to overwrite with enrichment; manually-edited fields like Account Owner or custom strategic flags should NEVER be overwritten.
Salesforce
The Lead-Contact-Opportunity distinction is the single most-confused concept in Salesforce. Get it wrong and your reports double-count revenue, your reps work duplicate records, and Marketing keeps emailing people who already closed. Here is the discipline that holds up at scale.
Salesforce
Salesforce automation has had three eras: Workflow Rules, Process Builder, and now Flow Builder. As of 2026, Workflow Rules and Process Builder are being retired — Flow Builder is the only path forward. Most owners are still building Process Builders that will break in 12 months. Here is the discipline.
Salesforce
Salesforce ships 200+ stock reports nobody opens. The reports leadership actually trusts are built deliberately — right Report Type, right filters, right summary formulas, right dashboard layout. Here is the discipline that gets reports onto the CRO's Monday review.
Salesforce
Marketing Cloud Account Engagement (the tool Salesforce renamed from Pardot in 2022) is the marketing automation layer for B2B Salesforce orgs. The Salesforce-Pardot connector is the most-broken piece of integration in the Salesforce ecosystem. Here is the setup discipline that holds up.
Salesforce
DIY Salesforce admin is a great idea — until it is not. This is the honest framework: when the cost of self-managing exceeds the cost of hiring, and how to tell which side you are on.