Lead scoring

How to set up lead scoring in Salesforce, step by step

How to set up lead scoring in Salesforce with custom fields, copy-paste formulas, and an AI score that writes its reason back to the Lead.

Photo of Utku Zihnioglu

By

ยท CEO & co-founder

Updated Oct 16, 2026

ยท 13 min read

Einstein and scoring-category claims trimmed to what Salesforce Help supports; step 6 matches the page

Free plan: 200 credits a month, 3 integrations, no card

Guide cover: Salesforce lead scoring, minus Einstein, beside the Salesforce, Stripe, and Zendesk logos

Knowing how to set up lead scoring in Salesforce comes down to four pieces: a Number field for the score, a Text Area field for its reason, the inputs the score reads, and a record-triggered flow that acts on it. The fields take minutes to create. Inputs are where most setups go wrong, because a Lead holds a title, a company, and an industry, while the signals that predict a sale sit in billing, support, and your product.

This guide fills those signals in, scores the list with AI or a formula, and writes the result back to the Lead.

To follow along on your own org, connect Salesforce to a free workspace and pull a few Leads in.

The native tooling is still worth understanding, because you will probably keep part of it running alongside.

What Salesforce lead scoring offers out of the box

Three native options come up when you search for this.

Einstein Lead Scoring trains on your historical conversions and predicts which open Leads will convert. When the inputs are rich, it finds real patterns. It comes with Sales Cloud Einstein, which costs extra on Enterprise Edition, and it can only learn from what is already on the record. The edition, history, and setup it needs are in the Salesforce AI lead scoring guide.

Account Engagement scoring and grading applies if your marketing team runs it (it used to be called Pardot). Each prospect gets a score that adds points for activity, such as form fills and page views, and a letter grade for how well the profile matches your target. Both sync to the Lead, so they can feed your own score like any other field.

Formula fields are the workhorse. Create a number field with a weighted formula and Salesforce recalculates it on every record read. No batch job, no schedule.

Einstein and formula fields read fields on the Lead, Contact, or Account object, and Account Engagement adds web and email activity on top. None of them sees billing, support tickets, or product usage. That constraint is the reason most Salesforce lead scoring models disappoint. The model is rarely the problem. The inputs are.

How to set up lead scoring in Salesforce for fit and timing

A score answers two different questions, and it helps to keep them apart. Fit asks whether this company and this person look like your best customers. Timing asks whether they are doing something right now.

Salesforce's own Trailhead module on lead qualification makes the same split: a score puts points on a prospect's activities, and a grade says how well their information fits your ideal customer.

By default a Lead record holds a title, a company, an industry, and whatever your marketing automation stamped on it. Those inputs predict conversion weakly for a SaaS business. The inputs that predict it well, on both the fit side and the timing side, live in systems Salesforce never reads:

Signal

Where it lives

Example weight

Active paid subscription

Stripe

+30

Enterprise plan tier

Stripe

+20

Logged in within 7 days

Product database

+15

3 or more features activated

Product analytics

+10

Open support ticket

Zendesk or Intercom

+5

Canceled subscription

Stripe

-25

No login in 30 days

Product database

-15

The subscription and plan rows are fit. The login, feature, and ticket rows are timing, and they go stale within weeks.

None of these land on a Salesforce Lead by default. Train Einstein on a record without them and it will diligently learn that job titles predict revenue, because job titles are most of what it has.

A tangent while we are here: scores without reasons are probably on their way out across the whole category. A bare number nobody can explain gets ignored, and in a few years an unexplained score in a CRM may read the way an unsourced statistic does today. Anyway.

How to set up lead scoring in Salesforce with fields, AI, and a flow

The build runs in Oneprofile. For the concepts behind the weights, our guide to lead scoring models covers the taxonomy. Everything below is mechanics.

1. Connect Salesforce and pull your leads in. Authenticate via OAuth and pull Lead or Contact records in, ready to enrich. Nothing writes back yet.

2. Fill the gaps with waterfall enrichment. Add enrichment for the firmographics and contact data your list is missing; the Salesforce data enrichment guide covers that setup in full. The waterfall asks data sources one at a time, most accurate first, and stops at the first one that returns an answer. You see the credit cost before the run starts, and a lookup that no data source can answer costs nothing.

3. Add the signals from your own systems. This is the step the table above points at. Connect Stripe and bring in each customer's plan, price, and subscription status. Do the same with Zendesk or Intercom for ticket counts, and with Postgres or PostHog for last login and features activated. Oneprofile has 142 integrations, and the ones that read data in put your own systems' figures next to the third-party data.

4. Score every lead with AI. Add an agent and describe what a good lead looks like for you: which signals matter, what disqualifies, what your best customers had in common. Or start from the built-in ICP scorer, which judges each lead against the ideal customer profile in your business context and returns a band (strong, possible, or poor), a fit score from 0 to 100, and the facts behind it. It charges 3 credits for each lead it answers. Keep a copy of it and you can add your billing, support, and usage inputs. Every lead is scored on its own against that description. Sort by the score and the list is ranked.

5. Write scores back to Salesforce custom fields. Map the score and reason to Lead_Score__c and Score_Reason__c on Lead and Contact. Create both fields in Object Manager once, a Number and a Text Area, because the export writes only to fields that already exist. After you add them, click Refresh in the export editor so they appear under Destination fields. Pick Update records as the action: a lead with no match is skipped, so the export never creates a Lead.

6. Verify, then schedule. Open a Lead and confirm the score and reason populated. Put the enrichment and the scoring agent on a refresh schedule, and run the export after each refresh so the new scores reach the record. One honest caveat: if your org runs validation rules or Apex triggers on Lead updates, test the write-back on a handful of records first. We cannot see your org from here.

Flow is where the score starts doing work. Because the export saves a new value to Lead_Score__c, a record-triggered flow can watch that field and act when it crosses your threshold, for example by assigning the Lead to a queue or creating a task for its owner.

Lead scoring formula examples for Salesforce fields

The write-back also revives the old-fashioned approach, because the enriched fields now exist on the record. Once Subscription_Status__c and Last_Login__c are populated, here is a lead scoring formula Salesforce can evaluate directly, with Last_Login__c as a Date field. Split it in two, so fit and timing stay readable:

/* Fit_Score__c */
IF(ISPICKVAL(Subscription_Status__c, "active"), 30, 0) +
IF(ISPICKVAL(Plan_Tier__c, "Enterprise"), 20, IF(ISPICKVAL(Plan_Tier__c, "Team"), 10, 0)) +
IF(ISPICKVAL(Subscription_Status__c, "canceled"), -25, 0)
/* Fit_Score__c */
IF(ISPICKVAL(Subscription_Status__c, "active"), 30, 0) +
IF(ISPICKVAL(Plan_Tier__c, "Enterprise"), 20, IF(ISPICKVAL(Plan_Tier__c, "Team"), 10, 0)) +
IF(ISPICKVAL(Subscription_Status__c, "canceled"), -25, 0)
/* Fit_Score__c */
IF(ISPICKVAL(Subscription_Status__c, "active"), 30, 0) +
IF(ISPICKVAL(Plan_Tier__c, "Enterprise"), 20, IF(ISPICKVAL(Plan_Tier__c, "Team"), 10, 0)) +
IF(ISPICKVAL(Subscription_Status__c, "canceled"), -25, 0)
/* Timing_Score__c */
IF(Last_Login__c >= TODAY() - 7, 15, 0) +
IF(Features_Used__c >= 3, 10, 0) +
IF(Open_Tickets__c > 0, 5, 0) +
IF(Last_Login__c < TODAY() - 30, -15, 0)
/* Timing_Score__c */
IF(Last_Login__c >= TODAY() - 7, 15, 0) +
IF(Features_Used__c >= 3, 10, 0) +
IF(Open_Tickets__c > 0, 5, 0) +
IF(Last_Login__c < TODAY() - 30, -15, 0)
/* Timing_Score__c */
IF(Last_Login__c >= TODAY() - 7, 15, 0) +
IF(Features_Used__c >= 3, 10, 0) +
IF(Open_Tickets__c > 0, 5, 0) +
IF(Last_Login__c < TODAY() - 30, -15, 0)

A third formula field that adds the two gives you one number for list views, and the parts stay visible beside it. For the status picklist, reuse the values Stripe already documents for a subscription's status, such as active, past_due, and canceled, so the mapping from billing is one to one.

Formula fields recalculate on every record read, so the number is current the moment a synced input changes. The catch is that nothing is saved when it moves, so a record-triggered flow never hears about a formula score crossing your threshold. Route on the exported AI score, or on another field the export writes.

Plenty of teams run both scores: the AI score for ranking and routing, the formula for reps who want to see exactly how a number was built. Whichever lead scoring model Salesforce ends up running, it reads the same fields. When the two disagree on a lead, that disagreement is usually the most interesting list in your CRM.

Account scoring: rolling lead scores up in Salesforce

B2B deals close at the Account, and several people at one company usually share the decision, so a Lead-level score tells you who is interested without telling you whether the company is worth the pursuit. The rollup uses the same approach, one level up:

  • Pull the Account records in, so each company is one entry.

  • Add the account-level inputs: what the company pays, from billing, active users in the last 28 days from the product database, open tickets across all contacts from the support desk.

  • Run the same AI scoring pass over the account list and write Account_Score__c and its reason to the Account object.

A 50-employee account paying $4,000 MRR with 12 active users outranks a 500-employee account paying $200 with one user, whatever the firmographics say. That is the point of the whole guide restated, we realize: a score is only as good as what it can see. If you want to write the profile before you score anything, scoring accounts against your ICP walks through it.

How to set up lead scoring in Salesforce so reps trust it

Most lead scoring best practices Salesforce teams pass around come down to one idea: a rep has to be able to see why a lead scored what it did. Once scores are live, these are the habits that keep them honest:

  • Give the outside fit score its own field. An AI score built from data the org does not hold belongs in Lead_Score__c, separate from any formula field, so nobody mistakes one for the other.

  • Always write the reason. A score with a reason next to it gets argued with, which is the point. A bare number gets ignored.

  • Preview before you push. In the export editor, Test on these rows shows what a real run would create or update and writes nothing.

  • Never let a rerun blank a field. Keep Change mapped fields only as the write mode and turn on Skip empty values, so a lead with no new answer keeps its old one.

  • Decide what blank means. On a formula field, Salesforce asks whether blank fields count as zero. Pick deliberately, or a lead with no login data quietly scores the same as one that logged in a month ago.

  • Put the threshold in a flow. A cut-off that lives in a rep's head moves every quarter. One in a record-triggered flow moves only when someone edits it.

The free plan covers three integrations, Salesforce among them, plus three tables of up to 100 rows each and 200 credits a month, which is enough to score your open Leads and check the written reasons against what your reps already believe. If the reasons hold up, the Team plan, from $20 a month, lifts the integration cap for every billing, support, and product source, and takes tables to 10,000 rows each. If your motion is product-led, the same setup powers product qualified lead identification too. Get started free and read the reasons on your first 100 leads.

Do this in Oneprofile

A score and its reason on every lead

AI scores each Lead from 0 to 100 on billing, support, usage, and firmographic data, and the reason lands in a custom field beside the score.

  • Salesforce logo
  • Stripe logo
  • Zendesk logo
  • Intercom logo
  • PostHog logo

6 steps to build it

Before you start

Salesforce connected over OAuth by a user who can edit Leads and Contacts

Score and reason custom fields on Lead and Contact, created in Object Manager

Stripe, your support desk, or your product database, for signals Salesforce lacks

1

Connect Salesforce and pull your leads in

Connect Salesforce via OAuth and pull Lead or Contact records in, ready to enrich.

2

Fill the gaps with waterfall enrichment

Add enrichment for the firmographics and contact data your list is missing. The waterfall asks data sources one at a time, most accurate first, and stops at the first one that returns an answer. The credit cost is shown before the run, and a lookup that finds nothing costs nothing.

3

Add the signals from your own systems

Connect Stripe for plan and subscription status, Zendesk or Intercom for ticket volume, and Postgres or PostHog for product usage. Each source's data sits next to the enriched third-party data.

4

Score every lead with AI

Add an agent that reads each lead's billing, support, usage, and firmographic signals. Start from the built-in ICP scorer or write your own description of a good lead. Each lead is scored on its own from 0 to 100, with the reasons written next to the score.

5

Write scores back to Salesforce custom fields

Create score and reason custom fields on Lead and Contact once in Object Manager, then map the score and reason to them. Pick Update records, so a lead with no match is skipped, never created. The export writes only to fields that already exist in Salesforce.

6

Verify, then schedule

Open a Lead and confirm the score and reason populated. Schedule the enrichment and the score so both stay current, and run the export after each refresh. If your org runs validation rules or Apex triggers on Lead updates, test on a handful of records first.

Free plan: 200 credits a month, 3 integrations, no card

6 steps to build it

Before you start

Salesforce connected over OAuth by a user who can edit Leads and Contacts

Score and reason custom fields on Lead and Contact, created in Object Manager

Stripe, your support desk, or your product database, for signals Salesforce lacks

1

Connect Salesforce and pull your leads in

Connect Salesforce via OAuth and pull Lead or Contact records in, ready to enrich.

2

Fill the gaps with waterfall enrichment

Add enrichment for the firmographics and contact data your list is missing. The waterfall asks data sources one at a time, most accurate first, and stops at the first one that returns an answer. The credit cost is shown before the run, and a lookup that finds nothing costs nothing.

3

Add the signals from your own systems

Connect Stripe for plan and subscription status, Zendesk or Intercom for ticket volume, and Postgres or PostHog for product usage. Each source's data sits next to the enriched third-party data.

4

Score every lead with AI

Add an agent that reads each lead's billing, support, usage, and firmographic signals. Start from the built-in ICP scorer or write your own description of a good lead. Each lead is scored on its own from 0 to 100, with the reasons written next to the score.

5

Write scores back to Salesforce custom fields

Create score and reason custom fields on Lead and Contact once in Object Manager, then map the score and reason to them. Pick Update records, so a lead with no match is skipped, never created. The export writes only to fields that already exist in Salesforce.

6

Verify, then schedule

Open a Lead and confirm the score and reason populated. Schedule the enrichment and the score so both stay current, and run the export after each refresh. If your org runs validation rules or Apex triggers on Lead updates, test on a handful of records first.

Free plan: 200 credits a month, 3 integrations, no card

How to set up lead scoring in Salesforce: common questions

How do I set up lead scoring in Salesforce?

Create a Number field for the score and a Text Area field for the reason on Lead in Object Manager. Then fill in the inputs the score needs, and either compute it with a formula field or write an AI score and its reason to those fields from outside Salesforce.

Can a Salesforce flow act on a lead score?

Yes, when the score is saved to the record. A record-triggered flow runs on a save, so it can act on a score an export writes, such as assigning the Lead to a queue. A formula field changes without a save, so a flow never sees it cross your threshold.

Can Salesforce lead scoring use data from outside Salesforce?

Only once that data lands on the Lead, Contact, or Account record. Einstein and formula fields read fields already in Salesforce, nothing else. Enrich your leads with billing, support, and product data, then write those values to custom fields so scoring can see them.

What does a lead scoring formula in Salesforce look like?

A weighted sum of IF statements. Fit inputs such as an active subscription or an Enterprise plan add points. Timing inputs such as a login in the last 7 days add more, and a canceled plan subtracts them. The field recalculates every time the record is read.

Will writing scores from an external tool overwrite my Salesforce data?

No. You choose exactly what writes back, and scores land in dedicated custom fields like Lead_Score__c that you create once in Object Manager. With Change mapped fields only, every field you did not map stays as it is, and rows push only when you run or save the export.

What is the difference between a lead score and a lead grade in Salesforce?

A score measures interest and a grade measures fit. In Account Engagement, the score adds points for activity such as form fills, and the grade is a letter for how well the prospect matches your target. Keep fit and timing in separate fields so a rep can see which one moved.

About this article

Photo of Utku Zihnioglu

Utku Zihnioglu

CEO & co-founder

Serial entrepreneur who built infrastructure companies handling billions of requests. Now leads engineering at Oneprofile, which finds the people worth talking to, researches each one, and follows up until they reply.

Drafted with AI from our product docs and code. Utku Zihnioglu answers for what it says.

Score Salesforce leads on the signals it never sees

Add billing and product data to Leads, score each with a reason, and write both back.

Free plan: 200 credits a month, 3 integrations, no card

Score Salesforce leads on the signals it never sees

Add billing and product data to Leads, score each with a reason, and write both back.

Free plan: 200 credits a month, 3 integrations, no card