Definitive guide
Salesforce Lead Scoring Template: Custom Fields + Flow Builder
Fit_Score__c, Intent_Score__c, Total_Lead_Score__c, Lead_Tier__c, Last_Score_Update__c, Score_Decay_Pause__c, OwnerId, Last_High_Intent_Action__c) and four Flow Builder flows (Fit calculation, Intent calculation, daily recalc plus decay, tier assignment). Total Lead Score is a formula field, not a Number, so Salesforce sums it natively instead of a flow writing it back. The point values and tier cutoffs below are an illustrative starting model, not measured outcomes. The fastest path is the Lead Scoring agent, built with you inside Claude.The eight custom fields and four Flow Builder flows below are the field-and-flow pattern we commonly stand up across the B2B SaaS engagements we have worked on. It is the same data model as the HubSpot version of this template, ported to Salesforce-native automation. The full framework behind the model lives in the lead scoring pillar guide. The point values and tier cutoffs here are an illustrative starting model, not benchmarked outcomes, so tune them against your own closed-won data.
Step 1: Create the 8 custom fields
Setup, Object Manager, Lead, Fields and Relationships, New. Apply the same fields to Contact (with conversion mapping) so post-conversion records keep their score history. Field names and types are the checkable substance here; only the downstream point math is illustrative.
| Label | API name | Type | Notes |
|---|---|---|---|
| Fit Score | Fit_Score__c | Number(3, 0) | 0 to 50, sum of firmographic point values |
| Intent Score | Intent_Score__c | Number(3, 0) | 0 to 50, sum of behavioral point values, decays |
| Total Lead Score | Total_Lead_Score__c | Formula (Number) | Fit_Score__c + Intent_Score__c |
| Lead Tier | Lead_Tier__c | Picklist | Hot / Warm / Cold / Disqualified |
| Last Score Update | Last_Score_Update__c | DateTime | Updated on every Flow run |
| Score Decay Pause | Score_Decay_Pause__c | Checkbox | Manual override to freeze decay |
| Routing Owner | OwnerId (standard) | Lookup (User) | Assigned via Assignment Rule on tier |
| Last High-Intent Action | Last_High_Intent_Action__c | Text(80) | Audit trail for tier change |
Step 2: Flow #1, Fit Score on firmographic change
Flow type
Record-Triggered Flow on Lead. Trigger: Updated. Entry condition: ISCHANGED(Industry) OR ISCHANGED(NumberOfEmployees) OR ISCHANGED(AnnualRevenue) OR ISCHANGED(Tech_Stack__c).
Action sequence (illustrative point allocations)
Treat the point values below as an example allocation to calibrate, not a measured formula:
- Industry in {SaaS, FinTech, HealthTech}, add 12 points.
- NumberOfEmployees 50 to 500, add 10; 200 to 2000, add 12.
- AnnualRevenue $5M to $50M, add 10.
- Tech_Stack__c contains a core tool (HubSpot, Salesforce, Outreach, Attention), add 8.
- Country in {US, CA, UK, AU}, add 5; EMEA non-UK, add 3.
Sum points into Fit_Score__c. Cap at 50. Use a Decision element with a Min function or an explicit IF(sum > 50, 50, sum).
Step 3: Flow #2, Intent Score on behavior
Flow type
Record-Triggered Flow on Task (or your Behavior_Event__c custom object if marketing automation pushes there). Trigger: Created. Entry condition: WhatId or WhoId matches a Lead.
Decision branches (illustrative point allocations)
- Subject contains "Demo Request", add 15 and set
Last_High_Intent_Action__cto "demo_request". - Subject contains "Pricing Page" AND Description count 3 or more, add 12 and set "pricing_revisit".
- Subject contains "Case Study Download", add 10.
- Subject contains "ROI Calculator", add 10.
- Subject contains "Webinar Attended", add 8.
- Type is "Email Open" AND count in last 7 days 5 or more, add 6.
- Subject contains "Unsubscribe", set
Intent_Score__cto 0 andLead_Tier__cto "Disqualified".
Use the Update Records element with Intent_Score__c = Intent_Score__c + N rather than overwriting, so concurrent events stack.
Step 4: Flow #3, Daily recalc plus decay
Flow type
Scheduled Flow. Frequency: Daily. Time: 02:00 UTC. Object: Lead.
Filter
Score_Decay_Pause__c = false AND Last_High_Intent_Action_Date__c < TODAY() - 7.
Action (illustrative decay model)
Intent_Score__c = ROUND(Intent_Score__c × 0.9, 0). After 60 days of no high-intent action, set Intent_Score__c to 0 and re-fire tier assignment. The 0.9 multiplier and the 60-day cliff are an example decay curve, not a measured constant; pick the half-life that matches your sales cycle. Update Last_Score_Update__c to NOW().
Why intent expires covers the math behind an illustrative 0.9 multiplier and the 60-day cliff.
Step 5: Flow #4, Tier assignment plus Assignment Rule
Flow type
Record-Triggered Flow on Lead. Trigger: ISCHANGED(Total_Lead_Score__c).
Branches (illustrative tier cutoffs)
- 80 or higher: Lead_Tier__c is "Hot", Status is "SQL", trigger Assignment Rule "Hot Lead Round-Robin to AE", post Slack alert.
- 60 to 79: Lead_Tier__c is "Warm", Status is "Working", assign to BDR queue, enroll in a 24h cadence.
- 40 to 59: Lead_Tier__c is "Cold", Status is "Open", marketing nurture.
- Under 40: Lead_Tier__c is "Disqualified", Status is "Closed - Not Converted", suppress outreach.
Salesforce Assignment Rules have to fire from the Flow's Reassign Lead Owner action; they do not auto-fire on field updates by default. Once tiers are set, BDR queue routing from lead scores covers how to turn the Warm tier into an actual worked queue.
The Slack alert payload should include the lead name and email, company, score breakdown, the triggering action (Last_High_Intent_Action__c), and a deep link to the Lead record. Without context, AEs ignore the alert.
Common mistakes
- Forgetting Lead-to-Contact field mapping. When MQLs convert, scores reset unless you map
Fit_Score__c,Intent_Score__c, andLead_Tier__cin the Lead Conversion field mapping. - Decay in workflow rules instead of Scheduled Flow. Workflow rules fire on save, not on a schedule. Decay needs Scheduled Flow.
- Routing via Assignment Rules without the explicit Reassign Lead Owner action. Assignment Rules do not fire automatically on field changes from Flow; you have to call them.
- Letting Einstein and the rule-based score race. Pick one for routing. Einstein in a separate field for sanity-checking, the rule-based score in
Total_Lead_Score__cfor action.
Frequently asked questions
Do I need Salesforce Sales Cloud Enterprise for this template?
Can I run this on Lead and Contact objects, or just one?
How does this interact with Einstein Lead Scoring?
What is the right way to handle decay in Salesforce?
How do I keep this in sync with marketing automation?
Run this play in your own stack
Read the guide, then install the engine.
The Artemis AI GTM Engineer prices this leak in dollars before it recommends anything, then builds the fix with you inside your own Claude. See how an agent installs and buys, or start with the free audit that prices all seven leaks.