Salesforce Lead Scoring: External Data Setup
Salesforce Lead Scoring: External Data Setup
Salesforce lead scoring only reads Lead and Contact fields. Sync billing, support, and product data into custom fields so the engine has real signal.
No credit card required
Free 100k syncs every month
Salesforce lead scoring is already powerful out of the box. Einstein can train a model on your historical conversions, formula fields can run a weighted rules engine on any property, and scoring categories let you slice by motion. None of it matters if the fields that actually predict conversion live in Stripe, Zendesk, and your product database instead of on the Lead record.
For the fundamentals of how scoring works, see our guide to lead scoring. This guide walks through the Salesforce-specific workflow: getting billing, support, and product data onto Lead, Contact, and Account records so the native scoring engine has something useful to weigh.
What Salesforce lead scoring is and how the built-in engine works
Salesforce gives you three scoring mechanisms, and they all read from the same place.
Einstein lead scoring is Salesforce predictive lead scoring: a machine-learning model trained on your historical conversions that predicts which open Leads are most likely to convert. Einstein looks at the fields on the Lead object, the conversion outcomes, and finds patterns. It is an Enterprise add-on and takes up to 48 hours to retrain after you add new signals.
Custom formula fields are the workhorse for most teams. Create a number field on the Lead with a formula like IF(Subscription_Status__c = "active", 30, 0) + IF(Plan_Tier__c = "Enterprise", 20, 0). The formula recalculates on every record read. No batch job, no schedule, no API call.
Scoring categories group related criteria so you can build separate scores for engagement, fit, and intent, then combine them into a composite. Useful for B2B SaaS teams running both PLG and sales-led motions on the same database.
All three mechanisms share the same constraint: they evaluate fields that exist on the Lead, Contact, or Account record. If the field is not on the object, the scoring engine can not see it. This is the part the Salesforce docs do not lead with, and it is the part that breaks scoring models for most teams.
Why Salesforce lead scoring breaks when revenue data lives outside Salesforce
The gap is easiest to see by listing what predicts conversion versus what Salesforce actually has.
Signal type | Example data | Where it lives | On the Lead/Contact record? |
|---|---|---|---|
Demographic | Job title, company size, industry | Salesforce | Yes |
Marketing engagement | Email opens, form fills, page views | Salesforce / Pardot / Marketo | Yes |
Billing | Subscription status, plan, MRR, renewal date | Stripe, Chargebee, Recurly | No |
Support | Open tickets, escalations, CSAT | Zendesk, Intercom | No |
Product usage | Last login, features used, sessions | Postgres, Mixpanel, your app DB | No |
The bottom three rows are the highest-signal categories for SaaS and PLG teams. They are also the three that almost never land on the Salesforce Lead by default. The result is a Salesforce lead score built on title, company size, and email opens. Those three signals correlate weakly with revenue and predict conversion about as well as a coin flip for product-led businesses.
Most teams notice this in one of three ways. Their Einstein model returns scores that do not match what reps see in the wild. Their custom formula fields score the same on every Lead because the inputs do not vary. Their account scoring rollup produces an Account score that is mostly a function of company size.
The fix is not a more sophisticated scoring formula. It is more fields on the record.
How to feed external data into Salesforce lead scoring with direct sync
The job is straightforward when stated plainly: take the fields that predict conversion in your source tools, write them to custom fields on the Salesforce Lead, Contact, and Account, and keep them current as the source data changes. No warehouse, no SQL, no reverse-ETL pipeline.
For a typical B2B SaaS team, the field set looks like this:
Source tool | Source field | Salesforce custom field | Object |
|---|---|---|---|
Stripe |
|
| Lead, Contact |
Stripe |
|
| Lead, Contact |
Stripe |
|
| Contact, Account |
Stripe |
|
| Contact, Account |
Zendesk |
|
| Contact |
Zendesk |
|
| Contact |
Postgres |
|
| Contact |
Postgres |
|
| Contact |
Sync each source separately and match on Email (Lead and Contact) and on a deterministic Account key for the Account object. Oneprofile creates the custom fields with the right type if they do not exist yet, so you do not have to pre-build the Salesforce schema before the first sync run.
Step-by-step Salesforce lead scoring setup with Oneprofile sync
This is how to set up lead scoring in Salesforce once your billing, support, and product fields are flowing in from Oneprofile.
1. Connect your data sources. In Oneprofile, add Stripe with a restricted API key (read access to Customers and Subscriptions), Zendesk with an API token, and your PostgreSQL database with a read-only connection string. Oneprofile validates each credential against the live API before saving.
2. Connect Salesforce as a destination. Add Salesforce via OAuth. Grant read/write access to Lead, Contact, and Account, plus permission to create custom fields. Oneprofile verifies the connection against your org.
3. Map source fields to Salesforce custom fields. Use the table above. For Stripe, sync subscription fields to both Lead and Contact so scoring works before and after conversion. For Zendesk and product data, focus on Contact since support and usage signals matter most after the Lead converts. Use Email as the matching key on Lead and Contact.
4. Select sync mode and schedule. Use "Update or Create" for Stripe (so paid Stripe customers who do not yet exist as Salesforce Contacts are created automatically). Use "Update" for Zendesk and Postgres if you only want to enrich existing records. Set all three syncs to a 15-minute schedule, which is well inside Salesforce's daily API limits for small and mid-size orgs.
5. Run the initial sync. The first run backfills every historical record. Open a Lead in Salesforce and confirm that Subscription_Status__c, Open_Tickets__c, and Last_Login__c populated. Subsequent runs are incremental and only push fields that changed since the last sync, which keeps Salesforce API usage minimal.
6. Build the Salesforce scoring model. For a custom formula score on Lead, create a number field Lead_Score__c with a formula along these lines:
Salesforce recalculates the formula on every record load, so a Lead whose Stripe subscription activated at 2:00 PM has an updated Lead_Score__c by 2:15 PM. If you use Einstein, leave the existing model running and let Einstein pick up the new custom fields on the next refresh. Compare both scores for a quarter before deciding which to standardize on.
Account scoring in Salesforce: extending lead scoring from Contact to Account
Lead scoring Salesforce models that stop at the Lead and Contact level only tell half the story for B2B teams. Account scoring Salesforce-side fills in the rest. The buying committee has 5-7 people. The Account is what closes, not the individual Contact.
Account scoring rolls Contact-level signals up to the Account record. The recipe:
Sync
MRR__candRenewal_Date__cdirectly to the Account object using the Stripe customer-to-account match (most B2B SaaS teams use company domain or an explicit Stripe customer ID stored on the Account).Sync
Open_Tickets__caggregated by account to the Account record from Zendesk.Sync rolled-up product usage (
Active_Users_28d__c,Features_Used__c) from your product database to the Account.Create an
Account_Score__cformula that combines firmographic fit (company size, industry) with the synced revenue and engagement fields.
The formula reads the same way as the Lead formula but with aggregate fields. A 50-employee SaaS Account with $4k MRR, 12 active users in the last 28 days, and 0 open critical tickets scores in your expansion target tier. A 500-employee Account with $200 MRR, 1 active user, and 4 escalated tickets does not, regardless of how good the firmographic fit looks.
Account scoring built on synced data also fixes a common ABM problem: target Accounts that look perfect on paper but never engage with the product. Without product and billing fields on the Account, you can not see this. With them, the score reflects reality.
Salesforce lead scoring best practices for B2B SaaS and PLG teams
A few rules show up consistently in scoring models that actually predict conversion.
Weight revenue signals above marketing signals. An active paid subscription is worth 30 points. An email open is worth 1. If your model treats these as comparable, the score will reward the wrong behavior. Marketing engagement is a leading indicator at the top of the funnel; revenue signals are confirmed conversion. Score accordingly.
Use negative scoring aggressively. A Lead with Subscription_Status__c = "canceled" and Last_Login__c 60 days ago should score near zero regardless of their title or industry. Without negative scoring, your highest-scoring Leads slowly drift into a pool of churned customers who scored well six months ago and have not done anything since.
Build separate scores for PLG and sales-led motions. Create two formula fields: PLG_Score__c weighted toward product usage and billing signals, Sales_Score__c weighted toward firmographic fit and marketing engagement. Route high-PLG Leads to automated upgrade flows. Route high-Sales Leads to your AE queue. Most teams try to compress both motions into a single number and end up under-serving both.
Anchor thresholds to your data, not your intuition. After 4-6 weeks of enriched scoring, pull your closed-won Opportunities and check the Lead Score range at conversion time. If 80% of conversions came from Leads scoring 65 or higher, that is your SQL threshold. Adjust quarterly as the population shifts.
Monitor sync health, not just scores. A scoring model running on stale data produces stale scores. Watch the Oneprofile sync run history for failed records, schedule drift, or unexpected field nulls. Property-level change tracking means a broken sync usually shows up as missing or unchanged values on the Salesforce record. The formula then weights those nulls at zero, quietly degrading the entire model.
Do not try to score everything on day one. Start with the 8-10 fields that matter most. Get the formula working, watch how scores correlate with closed-won, and add fields after the first quarter. A scoring model with 8 well-chosen, well-synced fields beats a 40-field model where half the fields are stale, missing, or weighted on a guess.
Does Salesforce lead scoring work with data from outside Salesforce?
Do I need Einstein for Salesforce lead scoring?
How often should Salesforce lead scoring data refresh?
Can I score on Stripe billing data in Salesforce?
How does account scoring in Salesforce work with synced data?