Salesforce Lead Scoring Formula for an ICP Fit Score
A simple Salesforce lead scoring formula that weights firmographics, intent and responsiveness so AI qualification results become a usable score.

A workable Salesforce lead scoring formula is one formula field on Lead that adds three weighted parts to a total of 100: firmographic fit (up to 50 points), buying intent from the AI qualification (up to 30) and responsiveness (up to 20). Keep each weifht in a plain CASE or IF statement, let the AI write the inputs back as typed fields, and route on score bands.
Build your lead capture form free
Why a formula and not a free-text verdict
An AI qualification step usually returns a sentence: "Good fit, wants a demo this quarter." That reads well and sorts badly. Salesforce can't build a list view, a report or an assignment rule on it. The fix is to make the AI return typed values (a picklist for intent, a picklist for timeline, a checkbox for replied) and let a formula field turn them into a number. The model reasons about the conversation. Your formula decides what the reasoning is worth.
That split also keeps the score auditable. When a rep asks why a lead got 62, you read the formula instead of guessing at a prompt.
The weights
These are starting weights for a B2B SMB with an ICP of 10 to 100 staff in four English-speaking markets. Change them to match your closed-won data once you have a few months of leads.
| Part | Input field on Lead | Rule | Max points |
|---|---|---|---|
| Fit: size | NumberOfEmployees | 10 to 100 = 25, over 100 = 15, 5 to 9 = 10 | 25 |
| Fit: industry | Industry | Your target industries = 15 | 15 |
| Fit: market | Country | US, UK, Canada, Australia = 10 | 10 |
| Intent: stated interest | AI_Intent__c | High = 20, Medium = 10 | 20 |
| Intent: timeline | AI_Timeline__c | This month = 10, This quarter = 5 | 10 |
| Responsiveness: replied | Replied_Within_24h__c | Checked = 10 | 10 |
| Responsiveness: meeting | Meeting_Booked__c | Checked = 10 | 10 |
Fit is weighted highest because it is the one part a lead can't talk its way into. A very enthusiastic five-person shop in a market you don't serve should not outrank a quiet 40-person firm that matches your ICP.
Create the fields
On the Lead object, create these before you write the formula:
AI_Intent__c: picklist with High, Medium, LowAI_Timeline__c: picklits with This month, This quarter, Later, UnknownAI_Summary__c: long text, for the one-to-two-sentence summary reps readReplied_Within_24h__candMeeting_Booked__c: checkboxesICP_Score__c: formula, number, 0 decimalsICP_Grade__c: formula, text (A, B or C)
Use picklists with fixed values, not text. If the AI can write "high-ish" into a text field, your CASE statement quietly scores it zero.
The formula
Create ICP_Score__c as a Formula (Number) field on Lead:
/* ICP_Score__c, max 100 */
MIN(100,
/* Fit, max 50 */
IF(AND(NumberOfEmployees >= 10, NumberOfEmployees <= 100), 25,
IF(NumberOfEmployees > 100, 15,
IF(NumberOfEmployees >= 5, 10, 0)))
+ CASE(TEXT(Industry), "Technology", 15, "Consulting", 15, "Finance", 15, 0)
+ CASE(Country, "United States", 10, "United Kingdom", 10, "Canada", 10, "Australia", 10, 0)
/* Intent, max 30 */
+ CASE(TEXT(AI_Intent__c), "High", 20, "Medium", 10, 0)
+ CASE(TEXT(AI_Timeline__c), "This month", 10, "This quarter", 5, 0)
/* Responsiveness, max 20 */
+ IF(Replied_Within_24h__c, 10, 0)
+ IF(Meeting_Booked__c, 10, 0)
)
Then ICP_Grade__c:
IF(ICP_Score__c >= 70, "A", IF(ICP_Score__c >= 50, "B", "C"))
Two details matter here. The MIN(100, ...) wrapper protects you when you add a bonus rule later and forget to rebalance. And the Country values must match what is stored in your org, which may be "US" or "United States" depending on whether state and country picklists are on. Check a few real records before you trust the CASE.
Step by step setup
- Create the typed fields above and add them to the Lead page layout, so reps see the summary and the score together.
- Save the two formula fields. Open a few existing leads and check the score by hand against the table.
- Decide the bands. A reasonable start: 70 and up goes straight to a rep with a meeting request, 50 to 69 sgays in automated follow-up, below 50 gets no rep time.
- Map the AI qualification output to the fields. Each lead update should write the picklists, the checkboxes and the summary, as in the payload below.
- Build a list view sorted by
ICP_Score__cdescending, and a report grouped byICP_Grade__cand lead source. - Review after 30 days agzinst actual outcomes, then move weights.
The write-back is a standard REST update on the Lead record:
PATCH /services/data/v60.0/sobjects/Lead/00Q5g00000AbCdE
{
"AI_Intent__c": "High",
"AI_Timeline__c": "This quarter",
"AI_Summary__c": "Ops lead at a 35-person agency, wants lead follow-up under a minute, asked for pricing.",
"Replied_Within_24h__c": true,
"Meeting_Booked__c": false
}
Where the form and the AI SDR sit
The score is only as good as the first fields on the lead. In our Inbound AI SDR system, the web form is step one: a submission triggers the SDR to reply within 60 seconds, qualify the lead against your ICP, enrich it, try to book a meeting and log everything to the CRM. The form's job is to capture the few inputs that the formula cannot get any other way, and to pass them along cleanly.
That means a work email (so enrichment can find the company), a company size dropdown, a country, and a timeline question. Make the size and timeline dropdowns match your picklist values exactly, so nothing needs translating later. Use hidden fields for UTM source and campaign, so lead source reporting works on day one.
We build Qwenvo, a free form builder, and it covers this step without a paid tier: webhooks to any URL, hidden fields, conditional logic, partial submissions (so an abandoned form stikl leaves a row with an email), a custom domain such as forms.yourbusiness.com and no badge. Its AI triage can also add category, priority and a suggested reply to each submission, which is a useful second opinion next to the SDR's qualification. For a longer look at scoring at the form level, see how to score lead form responses. One honest limit: Qwenvo has no one-click Salesforce connection today, so the submission reaches Salesforce through a webhook into the SDR system or middleware. If you only need a basic capture form and already live in Salesforce, Web-to-Lead works too, with less control over layout.
Start from the demo request form
Failure cases to plan for
- Blank employee count. A lead with no size scores zero on 25 points of fit, which punishes leads that were simply not enriched. Enrich befoore you grade, or hold the lead in a "scoring pending" state until the field is filled.
- Formula fields don't fire flows. A record-triggered Flow won't start because
ICP_Score__cchanged, since formula values aren't stored. Trigger on the input fields (the AI picklists and checkboxes) and recalculate the same logic in the Flow, or have the SDR write a plain number field next to the formula for automation to read. - Responsiveness lags. At minute one,
Replied_Within_24h__cis unchecked, so the score starts low and climbs as the lead engages. For first-minute routing, use fit plus intent only, and let the full score drive reporting and rep priority later. - Weight changes rewrite history. Editing formula rescores every existing lead instantly, which moves leads between grades. That is handy for testing and confusing in the middle of a quarter, so change weights on a schedule.
- Picklist drift. If someone adds "Very high" to the intent picklist, the CASE returns 0 for it. Lock picklist edits to admins.
What to measure
Track conversion from grade to meeting booked, and from meeting to opportunity, per grade and per lead source. If grade B converts as well as grade A, your fit weights are too strict or your cutoffs are too high. If grade A leads stall, the intent inputs may be too generous. Also track time to first reply, since the whole system assumes it stays under a minute.
Questions teams ask
Should I use Einstein or a formula?
Use the formula first. It needs no training data, it is readable, and it works with a few hundred leads. Predictive scoring needs enough closed-won history to learn from, and a formula gives you a baseline to compare it against later.
Can I score leads that arrive by chat, email or WhatsApp, not a form?
Yes. The formula reads Lead fields, not the channel. As long as the AI writes the same picklists and checkboxes back, a WhatsApp lead scores the same way as a web form lead.
How many fields should the form ask for?
Only the ones the score uses and enrichment can't supply. Email, company size, country and timeline cover most of the formula. Everything else the SDR can ask in conversation.
Do I need Lead, or should this live on Contact and Opportunity too?
Start on Lead, since that is where inbound qualification happens. After conversion, carry the final score and grade over with field mapping so reporting on opportunities can still group by original lead grade.
Next step
Create the six fields and the two formula fields in a sandbox, then score ten real past leads by hand and compare them with what the formula returns. If the numbers match your gut on the extremes, you are ready to connect the AI write-back.
Inbound AI SDR
Third-party platform and model usage billed to you directly. No lock-in. Live in 10 days.