Loading tutorials…
Loading tutorials…
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.
Who this is forRevOps owners, sales managers, and founders configuring their Salesforce data model for the first time — or anyone inheriting an org where the same buyer exists as both a Lead AND a Contact AND has 3 open Opportunities. If 'lead dedup' is on your monthly to-do list, this tutorial is for you.
What you'll need
Step 1
Lead = an unqualified prospect. Account = an organization. Contact = a person at an Account. Opportunity = a sales deal. Mix them and your data is wrong forever.
A Lead is an unqualified prospect — typically a marketing-sourced inquiry, a form fill, a list buy. It has its own object with its own fields (Lead Source, Lead Status, Rating). It is intentionally separate from Account/Contact until it qualifies.
An Account is an organization (B2B) or a household (B2C). One organization = one Account. Even if 8 of your contacts work there.
A Contact is a person tied to an Account. Contacts cannot exist without an Account in standard B2B Salesforce. Each Contact is one human.
An Opportunity is a sales deal tied to an Account. One open deal = one Opportunity. Multiple deals can exist per Account (net-new, upsell, renewal) as separate Opportunity records.
Rule: Marketing works Leads. Sales works Contacts + Opportunities. The Convert button is the official handoff. Confusing the boundary is the single biggest source of data chaos.
Step 2
Some B2B teams skip Leads entirely and create Contacts + Accounts directly from form fills. That is the 'Account-first' or 'Contact-first' model. Both are valid — but pick one.
The Lead model (default Salesforce): every inbound goes to Lead. Marketing nurtures. SDR qualifies. Lead gets Converted to Contact + Account + Opportunity. Best for high-volume top-of-funnel motions (consumer SaaS, mid-market inbound).
The Account-first model: every inbound creates a Contact + Account directly (often via Marketing automation or Lead-to-Account matching tools like LeanData). The Lead object goes unused. Best for ABM motions and enterprise sales where every record matters.
The hybrid model: Leads only for unmatched inbound (no existing Account). Matched inbound goes directly to Contact on the existing Account. Best for teams that do both inbound + ABM.
Pick one model and document it. Switching mid-stream creates duplicate records that take months to clean. Most B2B orgs under 50 reps run the Lead model; ABM-heavy orgs run Account-first.
Step 3
Setup → Object Manager → Lead → Fields & Relationships → Lead Status. The default values are generic; replace with stages that match your motion.
Open Setup → Object Manager → Lead → Fields & Relationships → Lead Status → click the field name → Edit picklist values.
Default Lead Statuses: Open - Not Contacted, Working - Contacted, Closed - Converted, Closed - Not Converted. These are too vague for most sales motions.
Replace with stages that match your SDR workflow: New, Attempting Contact, Working — Connected, Working — Nurture, MQL — Disqualified, SQL — Convert to Opp, Closed — Not Interested, Closed — Bad Fit.
Mark exactly ONE status as "Converted" — typically your "SQL — Convert to Opp" status. This is the status that gets set automatically when a Lead is converted.
Configure Lead Status Triggers (Setup → Sales → Sales Productivity → Lead Settings) if you want certain statuses to auto-create Tasks or set follow-up dates.
Step 4
When a Lead converts, fields map to Contact, Account, and Opportunity. Setup → Object Manager → Lead → Lead Fields → Map Lead Fields. Misconfiguring this loses data forever.
Open Setup → Object Manager → Lead → Fields & Relationships → click "Map Lead Fields" button at the top of the field list.
For each custom Lead field, choose: does this map to a Contact field, an Account field, an Opportunity field, or all three? Custom fields do not map automatically.
Standard fields like Email, Phone, Company Name, Industry already map by default. Verify they map to the correct targets (Email → Contact.Email, Company → Account.Name, Industry → Account.Industry).
Common failure mode: a custom Lead field called "Annual Revenue" should map to Account.AnnualRevenue. If you forget, the data lives only on the Lead and disappears after conversion.
Test conversion with a real Lead record before going live. Setup → Object Manager → Lead → click any test Lead → click Convert → walk through the wizard → verify all expected data made it to Contact + Account + Opportunity.
Step 5
A Contact belongs to ONE Account by default. But "Contacts to Multiple Accounts" lets a Contact be associated with several Accounts (board members, consultants, vendor-partner overlap).
Setup → Feature Settings → Sales → Account Settings → Enable Contacts to Multiple Accounts (off by default in older orgs).
With this on: a Contact has one Primary Account (the Account they "belong to") plus zero or more secondary Accounts via the AccountContactRelation junction object.
When to enable: board members across multiple companies, advisors, agencies that work with multiple clients, supplier relationships. Common in PE-backed orgs and partner ecosystems.
When NOT to enable: pure direct B2B SaaS with no advisor/agency complexity. The extra object adds reporting complexity nobody needs.
Once enabled, edit Page Layouts to expose the 'Related Contacts' section and 'Related Accounts' section so reps can see and manage the relationships.
Step 6
Setup → Object Manager → object → Validation Rules. Force reps to fill key data at creation. Without validation, every report has gaps.
For Lead: require Lead Source, Phone OR Email (using a formula validation rule), and Country. Without Lead Source, attribution reports are useless.
For Account: require Industry, Type (Customer/Prospect/Partner/Vendor), and Annual Revenue (or 'Size' bucket).
For Contact: require Email (or document why blank), Phone, and Job Title. 'Job Title' drives buyer-persona reporting.
For Opportunity: require Close Date, Amount, Type (New Business/Expansion/Renewal), Lead Source, and Stage. These are the fields every revenue report depends on.
Build validation rules in Setup → Object Manager → object → Validation Rules → New. Use the formula editor — Salesforce shows live syntax validation.
Test validation rules before activating: create a test record, leave the required field blank, verify the save fails with your error message. Then activate.
Step 7
The Account record should show all related Opportunities (open, closed, lost) and their total value. This is the single most-used view for AEs.
Setup → Object Manager → Account → Page Layouts → Account Layout → drag the Opportunities related list onto the page.
Configure the related list: show Opportunity Name, Stage, Close Date, Amount, Owner. Sort by Close Date descending.
Setup → Object Manager → Account → Fields & Relationships → New Roll-Up Summary Field → 'Total Open Opportunity Amount' (Sum of Opportunity.Amount where IsClosed = FALSE).
Add another roll-up: 'Total Closed Won Amount' (Sum of Opportunity.Amount where StageName = 'Closed Won'). This becomes your lifetime account value.
Add the roll-up fields to the Account page layout. Reps now see at a glance: what is open, what has closed, what was lost. ABM reporting becomes trivial.
Common mistakes
Creating Contacts before converting the Lead
What goes wrong: SDRs see a Lead in the queue, decide it is qualified, and manually create a Contact + Account from scratch — leaving the original Lead orphaned. The same human now exists on two records. Marketing keeps emailing the Lead while Sales works the Contact. Reports double-count revenue attribution by 30%+.
How to avoid: Train SDRs to always use the Convert button on the Lead record. Setup → Sales → Lead Settings → enable 'Enforce validation and triggers from Lead Convert' so conversion is the only path.
Skipping the Map Lead Fields step
What goes wrong: You build 12 custom Lead fields tracking marketing attribution (UTM Source, UTM Campaign, Form Name, etc.). None are mapped to Contact/Account/Opportunity. Lead converts → all 12 fields disappear. Marketing attribution reports show 0% conversion from any campaign because the source data was destroyed at conversion.
How to avoid: Setup → Object Manager → Lead → Map Lead Fields → map every custom field to its target object. Re-map any field you add in the future.
Treating a Lead and Contact as the same thing
What goes wrong: Reps and ops admins use 'Lead' and 'Contact' interchangeably in conversations and reports. Half the team creates Leads directly; the other half creates Contacts. Within 6 months, the same buyer exists on both record types with inconsistent data. Reps see a 30% revenue gap on dashboards because reports filter by one object type but data lives across both.
How to avoid: Document the model: Marketing creates and qualifies Leads. SDRs convert Leads to Contacts + Opportunities. Sales works Contacts + Opportunities. Reports filter consistently.
Letting reps create Accounts without dedup discipline
What goes wrong: Rep sees 'Acme Inc' is not in the picker (because the existing record is 'Acme, Inc.' with the comma) and creates a new Account. Same company, three Accounts. Pipeline reports show three different revenue numbers. ABM reporting is meaningless.
How to avoid: Install Salesforce's standard Duplicate Management (Setup → Duplicate Rules). Enforce a Matching Rule on Account.Name + Account.Website. Train reps to search before creating; restrict Account-creation to AEs and Managers.
No required fields on Opportunity at creation
What goes wrong: Reps create Opportunities with no Amount, no Close Date, no Lead Source. Forecast reports return 'NULL' for half the open pipeline. The CRO walks into the board with a forecast that shows $4.2M committed but only $1.8M has Amount populated. Trust in the data collapses.
How to avoid: Validation rules on Opportunity: require Amount, Close Date, Stage, Type, Lead Source at creation. Use formula rules so the error message is helpful ("Please enter the expected Close Date").
Enabling Contacts to Multiple Accounts without needing it
What goes wrong: You enable Contacts to Multiple Accounts because 'we have one advisor who works at two companies.' Now every Contact record has a secondary Accounts section. Reports become more complex. Reps get confused. Many DIY admins disable it later — which orphans existing relationships.
How to avoid: Leave Contacts to Multiple Accounts OFF unless you genuinely have 100+ contacts with multi-account relationships. Enable on demand, not preemptively.
Recap
Done — what's next
How to set up Salesforce from scratch without painting yourself into a corner
Read the next tutorial
Hand it off
Data-model decisions compound forever. A specialist who has built 30+ Salesforce orgs knows when to use Leads vs Contacts-only, how to configure conversion mapping, and which validation rules cause adoption drops. EverestX Salesforce-capable specialists run $400-1,200/mo at $14-16/hr — typically $300-600 for the initial data model work.
See specialist rates
Depends on motion. High-volume inbound (consumer SaaS, mid-market) — keep Leads as your unqualified holding tank, convert when qualified. ABM / enterprise sales — go Account-first, skip Leads, every record matters. The decision is mostly about volume: under ~200 inbound/month, Account-first works. Over that, Leads are valuable as a buffer.
The Lead record is preserved (read-only) and linked to the resulting Contact, Account, and Opportunity. You can still report on it. Marketing attribution data lives on the Lead AND (if you mapped fields correctly) on the resulting records. The Lead does not get deleted — it gets marked Converted and locked.
By default, no — in B2B Salesforce, Contacts must belong to an Account. If you need orphan Contacts (Person Accounts model for B2C, or special use cases), you can enable Person Accounts (Setup → Feature Settings → Account Settings → Allow Person Accounts) — but this is permanent and changes your data model significantly. Most B2B orgs leave it off.
Setup → Duplicate Management → Matching Rules → create a rule on Lead.Email. Then Setup → Duplicate Rules → enable the Lead duplicate rule with action 'Block' or 'Allow with alert.' Most teams use 'Allow with alert' so reps can decide. For high-volume form fills, also configure Web-to-Lead with email-match logic in Apex or via a marketing automation tool that handles dedup upstream.
Stage is where the deal is in the buying process (Prospecting, Qualification, Proposal, Negotiation, Closed Won). Probability is the historical close rate from that stage (e.g., Proposal = 60% historical close). Setup → Object Manager → Opportunity → Stages — Salesforce auto-fills a default Probability per stage. Override with your actual historical rate, or your forecasts will be off by 30%+.
Salesforce
Salesforce is the most powerful CRM on the market and the easiest to misconfigure in week one. Most owners blow past the org-wide sharing settings, hand out System Administrator profiles like candy, and end up rebuilding 90 days in. Here is the setup sequence that holds up.
Salesforce
A Salesforce pipeline is the most-referenced screen in the entire platform. Set up wrong, the forecast is fiction and reps stop trusting it. Set up right, the CRO walks into Monday with a real number. Here is the discipline that holds up.
Salesforce
Lead routing is where most Salesforce orgs leak revenue silently. A Lead lands at 2 PM, sits unassigned until Wednesday, and the prospect has booked a call with your competitor by Thursday. Here is the routing discipline that turns leads into meetings within 5 minutes.
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.
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.