How to Build a Lead Scoring System in Salesforce Using Flows and Custom Fields (No AppExchange Required)
Most sales teams treat their lead queue like a flat list — first in, first out, or whoever shouts loudest gets the rep's attention. The result? High-value prospects go cold while reps burn time on leads that were never going to close. A well-designed lead scoring system inside Salesforce fixes this by surfacing the right leads automatically, without requiring a third-party tool or a six-figure marketing automation contract.
This guide walks you through building a functional, field-based lead scoring model directly in Salesforce using custom fields, a Record-Triggered Flow, and a simple scoring formula. You'll have something deployable in an afternoon — and something your reps will actually use.
Step 1: Define Your Scoring Criteria Before You Touch Salesforce
The most common mistake admins make is jumping straight into Flow Builder without a scoring model written down. Spend 30 minutes with your sales manager or RevOps lead first and answer these two questions:
Demographic/firmographic fit: What does a good lead look like on paper? Think job title, industry, company size, and geographic region.
Behavioral signals: What actions indicate buying intent? Think form fills, content downloads, webinar attendance, or direct inquiry type.
A simple starting model might look like this:
+20 points — Title contains "VP," "Director," or "C-Level"
+15 points — Industry is "Technology" or "Financial Services"
+10 points — Number of Employees is greater than 200
+25 points — Lead Source is "Demo Request" or "Contact Us"
+10 points — Lead Source is "Webinar" or "Content Download"
−10 points — Email domain is a personal domain (gmail.com, yahoo.com, etc.)
Write this down as a table. You'll reference it in every step that follows.
Step 2: Create the Custom Fields on the Lead Object
You need two custom fields on the Lead object: one to store the numeric score and one to store the grade/tier for reps to see at a glance.
Field 1: Lead Score (Number)
Object: Lead
Field Type: Number
Field Name: Lead_Score__c
Length: 3, Decimal Places: 0
Default Value: 0
Field 2: Lead Grade (Text or Picklist)
Object: Lead
Field Type: Picklist
Field Name: Lead_Grade__c
Values: Hot, Warm, Cold
Once both fields are created, add them to your lead page layout so reps can see the score and grade without running a report. Place them near the top of the layout — treat them like a priority flag, not a footnote.
Step 3: Build the Scoring Logic in a Record-Triggered Flow
Navigate to Setup → Flow Builder → New Flow → Record-Triggered Flow. Configure the trigger as follows:
Object: Lead
Trigger: A record is created or updated
Optimize for: Actions and Related Records
Entry conditions: Run when a record is created or updated (set to "Every time" so rescoring happens when key fields change)
Now build your scoring logic using Assignment elements — not formulas, not decision branches for every rule. Here's the pattern that scales cleanly:
Add an Assignment element called "Reset Score." Set Lead_Score__c to 0. This ensures rescoring starts fresh every time the Flow runs, preventing score inflation.
Add a Decision element called "Check Title." Add outcome conditions: if {!$Record.Title} contains "VP" OR contains "Director" OR contains "CEO" OR contains "CTO," take the "Yes" path.
On the "Yes" path, add an Assignment element called "Add Title Score." Set Lead_Score__c to Lead_Score__c + 20.
Repeat the Decision + Assignment pattern for each scoring rule: Industry, Number of Employees, Lead Source, and Email domain check.
For the personal email domain check, use a formula resource. Create a Formula type variable called IsPersonalEmail with the formula:
OR(CONTAINS({!$Record.Email}, "@gmail."), CONTAINS({!$Record.Email}, "@yahoo."), CONTAINS({!$Record.Email}, "@hotmail."))
Reference this in your Decision element to subtract 10 points when the result is true.
After all scoring rules are applied, add a final Decision element called "Assign Grade" with three outcomes:
Hot: Lead_Score__c >= 50
Warm: Lead_Score__c >= 25
Cold: Everything else
Each path sets Lead_Grade__c via an Assignment element. Finish with an Update Records element to save both fields on the current record. Save and activate.
Step 4: Build a Lead Queue Report to Prioritize by Score
A scoring system is only useful if reps can act on it. Build a report that surfaces the leads your Flow just scored.
Go to Reports → New Report → Leads and configure it as follows:
Report Type: Leads
Filters: Lead Status = "Open - Not Contacted" AND Lead Grade = "Hot" OR "Warm"
Columns: Lead Name, Company, Title, Lead Source, Lead Score, Lead Grade, Created Date, Lead Owner
Sort: Lead Score — Descending
Save this as "Priority Lead Queue" and add it to your sales rep's Lightning Home Page dashboard. Create a separate dashboard component filtered by Lead Owner so each rep sees only their own prioritized leads. This removes the friction of decision-making — the rep opens Salesforce and the highest-value leads are already surfaced at the top.
Step 5: Maintain and Tune the Model Over Time
Lead scoring isn't a set-it-and-forget-it system. Plan a quarterly review using this process:
Pull a Converted Leads report. Filter on Leads converted in the last 90 days. Add