Loading tutorials…
Loading tutorials…
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.
Who this is forOps leads and founders configuring Freshsales modules for the first time, or anyone inheriting a portal where the same account appears 4 times and nobody knows which contacts are real. If 'duplicate management' is on your monthly to-do list, this tutorial is for you.
What you'll need
Step 1
Contact = a person. Account = an organization. Deal = a sales opportunity. Lead = an unqualified prospect (optional, Growth+). Confuse them and your reports will be wrong for years.
Contact records hold person-level data: name, email, phone, job title, lifecycle stage. One human, one Contact record. Always.
Account records hold organization-level data: website, industry, annual revenue, employee count. One organization, one Account — even if 5 contacts work there.
Deal records hold opportunity-level data: amount, stage, expected close date, pipeline. Multiple deals can exist per account (new business + upsell + renewal).
Lead records (Growth+) are a separate module for unqualified prospects. Most modern Freshsales teams disable Leads and use Contacts with a "Lifecycle Stage = Lead" instead — simpler, cleaner reporting. Decide upfront whether to keep Leads on. Admin Settings → CRM Customization → Modules → Leads → toggle.
Rule: never put person-level data on an Account record, and never put account-level data on a Contact. 'Industry' lives on Account. 'Job Title' lives on Contact. Mixing them up makes segmentation impossible later.
Step 2
Admin Settings → CRM Customization → Modules → each module → Layouts. This sets the default Highlight Panel and Left/Right Panel layout for every user.
Open Admin Settings → CRM Customization → Modules → Contacts → Layouts.
Drag the most-used fields to the Highlight Panel (the always-visible header): Lifecycle Stage, Lead Score, Owner, Last Contacted, Phone, Email.
For the Left Panel, set About this contact, Open Deals, Recent Conversations, Upcoming Tasks, Linked Accounts, Subscriptions. Default order should match how reps actually work — usually Open Deals first for AEs, Open Tasks first for SDRs.
Repeat for Accounts (Industry, Annual Revenue, # Employees, Owner, Lifecycle Stage in Highlight; Open Deals, Contacts, Recent Activity in Left Panel) and Deals (Amount, Close Date, Stage, Probability, Owner in Highlight).
Save layout per role. Reps can personalize on top, but the default is what new hires see and what trainings reference.
Step 3
Freshsales ships with ~80 default Contact fields, ~50 default Account fields, ~30 default Deal fields. Most of what you need already exists.
Admin Settings → CRM Customization → Modules → pick module → Fields. Filter by Group → "Basic Information" or "Sales Information" or whatever applies. Read through the defaults.
For each "I need a field for X" idea, search the existing list. Common ones owners re-create unnecessarily: Lifecycle Stage, Lead Score, Lead Source, Industry, Annual Revenue, # Employees, Expected Close Date.
When you must create custom: click "Create Field" → pick field type carefully (Text, Number, Dropdown, Multi-select, Date, Checkbox, Formula, Lookup). Field type is permanent in practice (change it and you lose data).
Group custom fields into custom field groups by team or workflow purpose (Sales Qualification, Customer Success, Billing, Marketing Attribution). Never use the default "Other" as a permanent home.
Write a description on every custom field. Future-you in 18 months will not remember why "qualification_score_v3" exists. Mark fields Required only when truly needed — over-required fields kill rep adoption.
Step 4
Lifecycle Stage drives funnel reports, Freddy AI scoring, and automation triggers. Get the values right or every downstream metric is wrong.
Admin Settings → CRM Customization → Modules → Contacts → Fields → find "Lifecycle Stage" (default dropdown field) → Edit.
Standard B2B values: New (raw inbound) → Marketing Qualified Lead → Sales Qualified Lead → Opportunity → Customer → Evangelist. Or simpler: Lead → MQL → SQL → Customer → Churned.
Decide who can change Lifecycle Stage. Marketing usually owns New → MQL. Sales owns SQL → Opportunity → Customer. Document this in writing — most marketing/sales friction in Freshsales traces back to ambiguous Lifecycle Stage ownership.
Build a workflow (Admin Settings → Automations → Workflows) that auto-stamps "Became MQL Date," "Became SQL Date," "Became Customer Date" timestamp fields whenever Lifecycle Stage changes. These timestamps drive every velocity report you will ever build.
Mirror Lifecycle Stage on the Account record (Account Lifecycle Stage) so ABM reports work. A contact can be SQL while their account is still MQL — both views matter.
Step 5
Freshsales dedupes Contacts by email and Accounts by website domain. Anything else (phone, name) requires manual merge. Set the rules now or live with duplicates forever.
Admin Settings → CRM Customization → Modules → Contacts → Duplicate Settings. Choose which fields trigger a duplicate warning on create (Email is default; add Phone and Mobile if relevant).
Admin Settings → CRM Customization → Modules → Accounts → Duplicate Settings. Default is Website (root domain match). Add Name if your industry has lots of website-less accounts.
For Contacts: Freshsales auto-prompts on email match during manual create. During import, it dedupes on email if you enable "Update existing records." If a contact has no email, every import creates a new record — the #1 source of contact duplicates.
For Accounts: Freshsales matches on root domain (acme.com matches both acme.com and www.acme.com but NOT acme.io or acme.co.uk).
Run the Duplicate Manager weekly: Contacts/Accounts list view → Settings (⚙) → Find Duplicates. Freshsales suggests merges; review before accepting. Mass merge with extreme care — once merged, you cannot undo.
Step 6
Admin Settings → Imports → Import. Always Accounts first, then Contacts, then Deals. Otherwise associations break.
Always import Accounts first. CSV with one row per account. Include the Website column — Freshsales uses it for dedup and auto-association.
Import Contacts second. Include the Account Website (or Account Name) column on every row — Freshsales auto-links the contact to the matching account.
Import Deals third. Use the "Associate with existing Accounts/Contacts" toggle and map by Account Website (for accounts) or Email (for contacts).
For each import, run on a sample first: take 20 rows, import as a test, verify everything looks right in the records, THEN run the full import. Catching a field-mapping error in 20 rows is 5 minutes; catching it in 20,000 rows is a 2-day cleanup.
After import, spot-check 10 random records. Are fields populated? Are associations correct? Did dedup work? Anything weird now is going to be weird forever — fix at import time.
Common mistakes
Putting account data on contact records
What goes wrong: Industry, Annual Revenue, # Employees end up duplicated on every contact record. When you change an account's industry, you'd need to update 12 contact records. Reports double-count. Segmentation breaks. Cost: 2-day cleanup project, often $300-500 in specialist time.
How to avoid: Move account-level fields to the Accounts module (Admin Settings → CRM Customization → Modules → Accounts → Fields). Reference them via association — a contact's industry is "their account's industry."
Skipping Lifecycle Stage timestamps
What goes wrong: You set up Lifecycle Stage but no "Became MQL Date" / "Became SQL Date" timestamps. Six months in, leadership asks for MQL → SQL velocity and you cannot answer it. You spend a weekend backfilling from activity history — and the data is still wrong.
How to avoid: Build a workflow that stamps timestamps on every Lifecycle Stage change. Do it before importing any data. Backfilling later is a $400-800 specialist job.
Keeping Leads module on AND using Contact Lifecycle Stage
What goes wrong: You import some prospects as Leads and some as Contacts. Two parallel funnels. Marketing reports show 12,000 leads but sales says they only have 4,000 contacts. Nobody agrees on the real number. Cost: 30+ hours of meetings to reconcile.
How to avoid: Pick ONE: Leads module OR Contacts with Lifecycle Stage. Most modern teams disable Leads (Admin Settings → CRM Customization → Modules → Leads → toggle off) and use Contacts only. Simpler, cleaner reporting.
Importing data without deduping the CSV first
What goes wrong: Your 12,000-row CSV has 800 within-file duplicates (same person, slightly different email casing). Freshsales does not catch within-file dupes during import. You end up with 12,000 records, 7% of which are dupes. Cleanup is a 2-day project, ~$400 in specialist time.
How to avoid: Before any import: open the CSV in Excel / Sheets, use Conditional Formatting or =COUNTIF to find duplicate emails / domains, deduplicate, THEN import.
Letting reps create new accounts manually instead of linking to existing
What goes wrong: Reps see 'Acme Inc' is not in the account dropdown and create a new one — when 'Acme, Inc.' (with the comma) already exists. Same account, three records. Pipeline reports show three different revenue numbers. ABM campaigns hit the same buyer three times.
How to avoid: Train reps to search before creating. Restrict account-creation permissions for SDRs (only AEs / managers can create new accounts). Run weekly dedup audits via Find Duplicates.
Building deals before standing up Accounts cleanly
What goes wrong: Deals get associated to the wrong account (or no account). Account-level revenue rollup is wrong. ABM reporting is meaningless. Customer-success cannot see expansion-deal history per account. CS hands over $200K renewal to the wrong AE.
How to avoid: Import / build Accounts first. Make Account a required field at deal creation (Admin Settings → CRM Customization → Modules → Deals → Fields → Primary Account → Required).
Recap
Done — what's next
How to set up a Freshsales account without painting yourself into a corner
Read the next tutorial
Hand it off
Module architecture decisions compound. A specialist who has built 50+ Freshsales portals knows which fields to make custom, which to standardize on defaults, and how to dedupe import data so cleanup is not a quarterly job. EverestX Freshsales specialists handle this end-to-end at $14-16/hr — typically $300-600 for the initial structure work.
See specialist rates
Custom Modules (Pro+) are for genuinely new object types — Subscriptions, Properties (real estate), Vehicles (automotive), Projects. Do not use them to add fields you could just add to Contact / Account / Deal. Default modules + custom fields cover 90%+ of B2B needs. See the [HubSpot custom objects discussion](/tutorials/crm-sales/hubspot-crm/set-up-hubspot-contact-company-deal-records) for parallel guidance.
Two patterns: (1) One Account record with a 'Division' custom field on associated Contacts and Deals — simpler, works for most. (2) Parent/child account relationships (Admin Settings → CRM Customization → Modules → Accounts → enable hierarchical relationship). Use parent/child when divisions have meaningfully different motions and you need separate ABM reporting per unit.
Contact = someone in your CRM (a lead, customer, prospect). User = someone who logs into Freshsales (a teammate, paid seat). They are completely separate objects. A User can also be a Contact if you sell to your own team, but generally the two never overlap operationally.
Yes. From any list view (Contacts / Accounts / Deals): select rows → top toolbar → Bulk Update → pick field, set value. Or use a workflow with criteria + 'Update Field' action. For large updates (1,000+ records), export to CSV, modify, re-import with 'Update existing records' enabled — Freshsales updates by record ID or email/website match.
Admin Settings → Data Privacy → GDPR. You can permanently delete a contact (and all associated activities) via the contact record → ⋮ → Forget. Freshsales honors the deletion across activity history, lists, sequences, and associated data. Set up a documented process before you get your first request — DIY-ing a GDPR delete under pressure leads to mistakes.
Freshsales
Freshsales is fast to spin up and easy to break in the first month. Most owners skip the account-level defaults, invite users with the wrong roles, and end up rebuilding 60 days in once Freddy AI starts producing garbage scores. Here is the setup sequence that holds up.
Freshsales
A Freshsales pipeline is the single most-referenced screen in the CRM. Set up wrong, the forecast number is fiction and reps stop trusting it. Set up right, your VP Sales walks into Monday with a real number. Here is the discipline that holds up.
HubSpot CRM
Contacts, Companies, and Deals are the three records every HubSpot 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 companies and orphaned deals. Here is the discipline.
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.