Loading tutorials…
Loading tutorials…
Freshsales data quality problems are quiet killers. They do not break the CRM — they just make every report wrong, every Freddy score garbage, and every campaign target the wrong people. Here is how to diagnose what is broken and fix it without making it worse.
Who this is forRevOps leads, sales managers, and founders staring at a Freshsales portal where the reports do not match reality. If you have ever said 'I know we have more deals than that' or 'why does the same company appear three times,' this tutorial is for you.
What you'll need
Step 1
Before fixing anything, measure. Build saved filter views for each known data-quality issue category.
Audit #1 — Contacts with missing email: Contacts list → filter "Email is empty" → count. If >5% of contacts, you have a major dedup problem (email is the dedup key).
Audit #2 — Contacts without Account: Contacts list → filter "Account is empty AND Lifecycle Stage is not New." If >10%, contacts are orphaned and ABM reports are broken.
Audit #3 — Deals without primary contact: Deals list → filter "Primary Contact is empty." If any deals are orphaned, no follow-up can happen automatically.
Audit #4 — Stale records: Contacts list → filter "Last Activity Date > 180 days ago AND Lifecycle Stage in MQL/SQL." These are dead leads polluting your funnel reports.
Audit #5 — Missing Lifecycle Stage timestamps: filter "Lifecycle Stage = MQL AND Became MQL Date is empty." If many rows return, velocity reports are broken.
Save each filter as a list view. Track the counts weekly — health improves when you can measure it.
Step 2
Freshsales has a built-in Find Duplicates tool. Run it monthly and merge carefully.
Contacts list → top toolbar → Actions (⚙) → Find Duplicates → choose match criteria: Email (default), Phone, Mobile, or First+Last+Account.
Freshsales surfaces suspected duplicate groups. Review each before merging. Common false positives: two people named "John Smith" at different companies; same person with different email aliases (work + personal).
For each true duplicate group: pick the Master record (most complete data, most recent activity, correct owner) → Merge. The losing records collapse into the master. Activities + notes + deals migrate.
CRITICAL: merge is irreversible. Test on one group of 2-3 dupes before mass-merging. If you make a mistake, the only fix is a full data restore (Admin Settings → Data Backup → Restore — Enterprise only).
Repeat for Accounts: Accounts list → Actions → Find Duplicates → match by Website (default) or Name. Account merge cascades: associated contacts and deals all reassociate to the master.
Step 3
Merging duplicates without fixing the source is shoveling sand against the tide. Find what is creating them.
For each duplicate group you fixed, ask: how did this duplicate get created? Look at the Created Date + Created By fields on each record.
Common sources: (1) Web form submissions where someone retypes their email with a typo — fix by adding email validation on the form; (2) CSV imports that did not enable "Update existing records" — fix by always toggling that option on; (3) Integration sources (Zapier, HubSpot sync) that lack dedup logic — fix at the integration layer; (4) Manual rep creation without searching first — fix with training + restrict create permissions for SDRs.
Audit Admin Settings → CRM Customization → Modules → Contacts → Duplicate Settings. Confirm dedup is enabled on Email at minimum.
Add Phone and Mobile to dedup criteria if your industry has lots of email-less contacts (e.g., field sales, retail).
For integration-created dupes: audit Admin Settings → Apps → [integration] → Settings. Many integrations have a "Match existing records" toggle that is OFF by default — turn it ON.
Step 4
Lifecycle Stage drives every funnel report. If 30% of contacts have wrong or missing values, every report is wrong.
Audit: Contacts list → filter "Lifecycle Stage is empty." Bulk-update to the appropriate default (usually "New" or "Lead" depending on your taxonomy).
Audit: filter "Lifecycle Stage = MQL AND Became MQL Date is empty." These contacts were stamped MQL without the timestamp — fix by building a workflow that stamps timestamps going forward, and backfill timestamps from activity history where possible.
For backfill: export the filtered list to CSV, add a "Became MQL Date" column populated with First Marketing Activity Date (from activity history), re-import with "Update existing records" enabled.
Build a workflow (Admin Settings → Automations → Workflows) that prevents future blanks: trigger = "When Lifecycle Stage changes to MQL" → action = "Update Became MQL Date = Today." Repeat for each stage transition.
Document the Lifecycle Stage ownership: who is allowed to change which transitions? Most marketing/sales friction in Freshsales traces back to ambiguous Lifecycle Stage ownership.
Step 5
Contacts without accounts, deals without contacts, activities without records. Each one breaks a report.
Orphaned contacts: filter "Account is empty AND Lifecycle Stage is not New." For each, look at Email Domain — if it matches an existing account website, manually associate via the contact record → Associations → Add Account.
For bulk fix: export orphaned contacts to CSV with Email + Email Domain columns. In a spreadsheet, look up Email Domain against your Accounts list (via VLOOKUP or sheets formulas). Add Account Website column. Re-import with "Update existing" — Freshsales auto-associates by domain match.
Orphaned deals: filter "Primary Contact is empty." For each, identify the deal owner and the originating activity. Manually associate via the deal record → Contacts → Add Contact.
Orphaned activities: harder. Go to Reports → Activity Reports → "Activities by Record" → filter "Record is empty." Manually re-associate or accept the loss.
Build prevention: make Account required on Contact create (Admin Settings → CRM Customization → Modules → Contacts → Fields → Account → Required). Make Primary Contact required on Deal create.
Step 6
Records that have not been touched in 180+ days clog your reports and waste Freddy AI training cycles.
Filter: Contacts where "Last Activity Date > 180 days ago AND Lifecycle Stage in (New, MQL, SQL)" — these are dead leads.
Decision: archive (set Lifecycle Stage to "Archived" or "Stale") vs. delete. Archive preserves history (useful if they come back); delete removes from Freddy training data.
For archives, build a workflow: trigger = "Time-based daily at 9am" + condition = "Last Activity Date > 180 days AND Lifecycle Stage in MQL/SQL" → action = "Update Lifecycle Stage to Archived" + "Send notification to Owner."
For deals: filter "Stage is not Won/Lost AND Last Activity > 90 days AND Expected Close Date < today." These are ghost pipeline. Auto-close to Lost with reason "Stalled — no buyer urgency" via workflow.
Re-runs: schedule the stale-record audit monthly. Once data is clean, the workflow handles maintenance automatically.
Step 7
Data quality decays without monitoring. Build a dashboard you check monthly to catch new problems before they compound.
Build a "Data Health" dashboard (Reports → Dashboards → New): widgets for Contacts with missing Email, Contacts without Account, Deals without Primary Contact, Contacts with missing Lifecycle Stage, Duplicate count (suspected).
Pin the dashboard to your Sales Ops daily review.
Set scheduled exports: weekly PDF to the RevOps lead + monthly to the CEO. Visibility creates accountability.
Track week-over-week changes. Increases mean a new upstream source broke; investigate within 7 days.
Most teams find a 60-90 day cleanup cycle is enough to permanently reduce data-quality issues by 80%+.
Common mistakes
Bulk-merging duplicates without reviewing each pair
What goes wrong: You click 'merge all 200 suggested duplicates.' 30 of them are false positives (different people with same name). You just merged 30 unrelated contacts. Their deal histories, activities, and notes are now combined. Cost: $500-1,500 to restore from backup (Enterprise only) or permanent data loss (Pro and below).
How to avoid: Review every merge pair manually for the first 50 merges. Develop intuition for false positives. After that, mass-merge only on Email matches (strongest dedup signal).
Merging without fixing the upstream source
What goes wrong: You merge 200 duplicates in week 1. Week 5, there are 180 new duplicates from the same broken web form. Week 10, 160 more. You spend 2 hours/week merging forever. Cost: 100+ hours/year of busywork.
How to avoid: For every duplicate you fix, investigate how it was created. Fix at the source layer (form validation, integration dedup, import settings, rep training).
Backfilling Lifecycle Stage timestamps manually one by one
What goes wrong: 5,000 contacts need Became MQL Date backfilled. You update them one-by-one through the UI. Takes 40+ hours. Halfway through you give up. The reports are still broken. Cost: 40 hr of wasted time, ~$800 in opportunity cost.
How to avoid: Export to CSV with First Marketing Activity Date as a calculated column. Re-import with "Update existing records" enabled. 5,000 contacts updated in 10 minutes.
Deleting stale records instead of archiving
What goes wrong: You delete 3,000 stale contacts to 'clean up.' Two months later, 200 of them re-engage (a competitor pinged them, they came back). You have lost all their history. Freddy AI loses 3,000 negative training examples. Cost: $5-10K in lost re-engagement pipeline, degraded Freddy accuracy.
How to avoid: Archive (status field change) instead of delete. Archived records can be filtered out of active reports but preserved for re-engagement and Freddy training.
No data-quality monitoring
What goes wrong: You spend a weekend cleaning data. Six months later it is just as bad as before because you never built a feedback loop to catch new issues. Cost: cleanup cycle every 6 months, $400-800 each time.
How to avoid: Build a Data Health dashboard and schedule weekly review. Track key counts (missing email, orphaned contacts, duplicate suspects) week-over-week. Catches issues at week 1 instead of month 6.
Treating Freshsales data quality as a one-time project
What goes wrong: Founder says 'we just need to clean this up once and we are good.' Six months later same problems. CRO loses trust in CRM data. Major decisions get made on gut instead of data. Cost: bad strategic decisions, hard to quantify but typically $50K+.
How to avoid: Data quality is ongoing ops. Budget 2-4 hours/month for RevOps to review the Data Health dashboard, run duplicate audits, and tune workflows.
Recap
Done — what's next
How to set up Freshsales contacts and accounts without making a mess
Read the next tutorial
Hand it off
Data quality is the foundation under every Freshsales feature — Freddy AI, reports, sequences, workflows. A specialist who has cleaned 50+ portals knows where the typical leaks are, which fixes are reversible, and how to set up monitoring so cleanup is not a quarterly job. EverestX Freshsales specialists run data-quality engagements at $14-16/hr — typically $400-800 for a full audit + fix.
See specialist rates
Monthly is the right cadence for most teams. Run it on Contacts and Accounts separately. If you have heavy inbound traffic (1,000+ contacts/month), bump to weekly. Track the duplicate suspect count week-over-week — increases mean an upstream source broke.
Not natively. Merges are irreversible at the record level. Enterprise tier has Data Backup + Restore which can roll back the entire portal to a snapshot (typically nightly). Pro and below: no rollback. Always test merges on a small batch before scaling.
Archiving = setting a status field (e.g., Lifecycle Stage = Archived) so the record is filtered out of active views but preserved in the database. Deleting = removing the record entirely from Freshsales (recoverable for 30 days in Recycle Bin, then permanent). Archive is almost always the right choice — deletes lose history that Freddy AI needs.
Build a workflow validation: trigger = 'When Lifecycle Stage is updated' + condition = 'New stage is earlier in funnel than previous stage' + action = 'Send error notification to user' or 'Revert update' (Pro+). Or use field-level validation on the Lifecycle Stage field (Admin Settings → CRM Customization → Modules → Contacts → Fields → Lifecycle Stage → Validation Rules).
All CRMs have data-quality challenges (dedup, missing fields, broken associations). Freshsales has decent native tools (Find Duplicates, Duplicate Settings, field validation) but lacks the advanced data-management features of HubSpot Operations Hub or Salesforce Data.com. For teams with heavy data hygiene needs, plan to either upgrade integrations or use third-party tools like Insycle or DemandTools. See our [HubSpot CRM setup tutorials](/tutorials/crm-sales/hubspot-crm) and [Pipedrive tutorials](/tutorials/crm-sales/pipedrive) for parallel patterns.
Freshsales
Contacts and Accounts are the two modules every Freshsales motion runs on. Get the relationship between them right and your reports are clean for years. Get it wrong and you spend Saturdays untangling duplicate accounts and orphaned contacts. Here is the discipline.
Freshsales
Workflows are the Freshsales feature that scales sales ops from 'manual' to 'systematic.' They are also the feature most teams over-automate — creating loops, duplicate tasks, and stage flicker that destroys data trust. Here is the discipline that keeps automation a force-multiplier.
Freshsales
Freddy AI is the headline feature on Freshsales Pro+ — and the one most teams turn on, get garbage scores, and quietly stop checking. Get the data hygiene + training inputs right and Freddy becomes the highest-leverage feature in the portal. Here is the discipline that earns rep trust.
Freshsales
DIY Freshsales is a great idea — until it isn't. This is the honest framework for when the cost of self-managing exceeds the cost of hiring help, and how to tell which side you are on.