Published 3 August 2026 · Last reviewed 3 August 2026 · Salesforce Summer ’26
For Salesforce admins and marketing ops leads who own the Lead Source field. By the end you can add and clean up picklist values, close the two mapping gaps that silently blank the field, and know exactly where the field stops being able to help you.
TL;DR
The Salesforce Lead Source field is a standard picklist on Lead, Contact, Account and Opportunity. It records one value, once, and copies that value onto the Contact, Account and Opportunity when the lead converts.
Adding a value to it takes four minutes. Getting it to produce numbers you would set a budget on takes longer, because three things go wrong in most orgs:
- Values pile up. “PR”, “Press Release” and “Public Relations” all end up in the same list, and reporting splits three ways.
- The picklist is unrestricted by default, so Web-to-Lead, Data Loader and any API can write values that were never on the list.
- Everything digital lands in one bucket called Web, which tells you nothing about which page, keyword or click produced the lead.
Fix all three and you can run a budget off the field. Skip them and you get a chart nobody believes.
| Question | Answer |
|---|---|
| What type of field is it? | Standard picklist, single value, on Lead, Contact, Account (as Account Source) and Opportunity |
| Where do I edit it? | Setup, Object Manager, Lead, Fields and Relationships, Lead Source, Values |
| What permission do I need? | Customize Application |
| Default values | Salesforce documents Advertisement, Employee Referral, External Referral, Partner, Public Relations, Seminar Internal, Seminar Partner, Trade Show, Web, Word of mouth and Other. Most orgs differ, because the set gets edited early and rarely audited. |
| Can a lead have two values? | No. One lead, one Lead Source value |
| Does it survive conversion? | Yes. It copies to the Lead Source field on Contact and Opportunity, and to Account Source on the Account. There is no field called Contact Source |
| Can it be set automatically? | Not natively. It is populated by manual entry, import, Web-to-Lead hidden field, API, or Flow |
| Why do off-list values appear? | The picklist is unrestricted by default. Web-to-Lead, Data Loader and the API can insert any string. Standard picklists cannot be made restricted, so the door stays open permanently. |
| How do I bulk fix bad values? | Use Replace on the picklist field, then deactivate the old value |
| Biggest limitation | One value per record, so multi-touch journeys collapse into a single label |
Watch it first (2 minutes 45)
If you just need the clicks, this walkthrough covers adding a value to the Lead Source picklist end to end. The rest of this guide covers what to do after that, which is the part that decides whether the field is useful.
Video: How to Add a Lead Source in Salesforce, by Flowium.
What the Lead Source field actually is
Lead Source is a standard picklist field. Salesforce ships it on the Lead object, and on Contact, Account and Opportunity as well. On the Account object it is labelled Account Source. Same idea, different name.
A picklist holds one value from a defined list. One string, chosen once, usually when the record is created, often by whoever happened to be filling in the form.
That single value then travels. Convert a lead and Salesforce copies Lead Source onto the new Contact, copies it into Account Source on the new Account, and stamps it onto the Opportunity created during conversion. Nobody re-checks it. Whatever was true, or wrong, at the top of the funnel is still sitting on the closed-won record twelve months later.
The five ways Lead Source gets populated
Salesforce does not fill this field in for you. It does not read the referring URL and it does not parse clicks. If Lead Source has a value, one of these five things put it there.
| Method | How the value gets set | Can it write an off-list value? |
|---|---|---|
| Manual entry | A rep or admin picks a value when creating the record | No, the UI only offers list values |
| Import | A CSV column headed LeadSource, via Data Import Wizard or Data Loader | Yes |
| Web-to-Lead | A hidden input on the generated form, one value hardcoded per form | Yes |
| API and connected apps | Anything writing to the Lead object over REST or SOAP | Yes |
| Flow | A record-triggered Flow setting the value from other fields | Yes |
The Web-to-Lead row is the one worth acting on today. You can hardcode a different value per form, so a pricing page form and a contact page form arrive carrying different sources. It is the single easiest attribution upgrade most orgs never make.
<input type="hidden" name="lead_source" value="Web" />
Four of those five happen outside the Salesforce UI, and three of them can write values you never approved. That is where the mess in the off-list values section comes from. The Salesforce Help guide to Web-to-Lead covers generating the form itself.
How to manage Lead Source picklist values (Lightning and Classic)
You need the Customize Application permission on your profile. If you do not have it, this is a two-minute ask for your Salesforce admin. The steps below match the Salesforce Help article.
Lightning Experience
- Click the gear icon, then Setup.
- Open Object Manager and select Lead.
- Click Fields and Relationships.
- Click Lead Source.
- Scroll to Account/Lead Source Picklist Values and click New.
- Enter your new values, one per line.
- If your org uses Record Types, tick the Record Types the new values should appear on.
- Click Save.
Salesforce Classic
- Go to Setup.
- Click Customize.
- Click Leads.
- Click Fields.
- Click Lead Source.
- Under Account/Lead Source Picklist Values, click New.
- Add your values, select Record Types if applicable, and click Save.
Lead Source is a standard value set, not four separate picklists. Add a value once and it appears on Lead, Contact, Account Source and Opportunity together. Manage it in Setup under Picklist Value Sets rather than object by object. The flip side: you cannot give one object a value the others do not have, and you cannot retire a value on one object only.
Record Types and field-level security
Two settings decide whether anyone actually sees the value you just added. A value added without ticking the right Record Types is invisible to every user on those Record Types, which is the most common version of “I added it and it did not appear”. Field-level security is the other half: if the profile cannot see Lead Source, the field is missing from the layout no matter how tidy the picklist is. Check both before you conclude the value failed to save.
Mapping behaviour during lead conversion
When a lead converts, Salesforce moves the source value onto three new records. Most explanations of this get one detail wrong, so here is the precise version.
| Object | Field name | Populates when | Stays blank when |
|---|---|---|---|
| Contact | Lead Source | Always, on conversion | Never. There is no field called Contact Source |
| Account | Account Source | Always, on conversion | Never in current Salesforce |
| Opportunity | Lead Source | Created during conversion, or later from the contact’s record | Created directly from the account record |
The gap worth knowing. An Opportunity created directly from the Account record does not inherit Account Source. It starts blank. If your pipeline reporting has a growing pile of Opportunities with no Lead Source, this is almost always the cause, and no amount of picklist tidying will fix it. A record-triggered Flow that stamps the Account Source onto new Opportunities closes it.
Mapping custom source fields
Standard fields map on their own. Custom fields do not, and if you are running the three-field model below then Lead Source Detail and Original Lead Source are both custom fields that will vanish at conversion unless you map them.
Setup, Object Manager, Lead, Fields and Relationships, Map Custom Lead Fields. For each custom lead field, choose the account, contact or opportunity field it should write into. In Lightning Experience one lead field can map to all three at once. Save.
Two rules that catch people out: types must match, so number maps only to number and currency only to currency with identical length and decimal places. Text and text area can map into a picklist, and will happily write a value that is not in the picklist, which loops you straight back to the off-list problem below.
Lead source versus campaign, which is a real question with a short answer
This comes up constantly, so here it is plainly.
Lead Source is a field. One value. It answers “in general terms, where did this record come from?”
Campaign is an object. A record joins a campaign through CampaignMember, and one lead or contact can be a member of as many campaigns as you like. It answers “which specific things did this person interact with?”
They are not competitors. Lead source is the coarse label you report channel mix on. Campaigns are the granular record of touches. Opportunity has a Primary Campaign Source field for the single campaign that takes the credit, and Campaign Influence exists if you want to spread credit across several.
If you are choosing between them, you have misunderstood the question. Use lead source for the channel. Use campaigns for the specifics. Keep the Lead Source picklist short enough that a chart of it is readable, and let campaigns carry the detail.
The practical trap: campaign membership is where your real attribution data lives, but almost nobody reports on it, because building Campaign Influence models is fiddly and the Lead Source chart is right there. So the coarse field ends up carrying weight it was never designed to hold.
Why values appear that are not in your picklist
This one confuses admins for years, so it deserves its own section.
By default the Lead Source picklist is unrestricted. An unrestricted picklist accepts any string written to it by the API, by Data Loader, or by a Web-to-Lead form, as long as it fits the character limit. The value shows on the record. It does not show in Setup. It appears in reports as its own row, splitting your numbers.
The classic version of this: a web form somewhere posts Website, your picklist contains Web, and now your reporting has two channels that are the same channel.
There is a second, sneakier cause. Deleting a value from the picklist does not change records that already hold it. Retire “Cold Call 2023” and every lead carrying it keeps carrying it, forever, invisible in Setup.
The fix, in order:
- Run a Lead report grouped by Lead Source. Then run the same report on Contacts. Export both.
- Compare the unique values in your exports against the values in Setup. Anything in the export but not in Setup is an orphan.
- Use the Replace function on the Lead Source field to bulk map each orphan onto a value you actually want.
- Deactivate the old value after replacing, rather than deleting it. Deactivating keeps the audit trail intact.
You cannot restrict this field, and that is the part nobody tells you. The “Restrict picklist to the values defined in the value set” checkbox only appears on custom picklists. Lead Source is a standard picklist, so the option is not there. Clean the values all you like; the API can refill the list tomorrow.
Three ways to hold the line instead:
A validation rule. Check the incoming value against your approved list and reject anything else. Maintainable up to about a dozen values, painful beyond that, which is one more argument for keeping the list short.
A custom field as the authority. Create a restricted custom picklist, make that the field your reports run on, and let the standard Lead Source field be whatever the integrations make of it. More work, but it is the only version that actually cannot be polluted.
A Flow that remaps on create. A before-save Flow that catches off-list values and rewrites them to the nearest approved one. Silent, self-healing, and it never blocks a lead from being created, which matters if the alternative is losing the record.
If you take the custom-field route, a restricted picklist that rejects an inbound value returns a string admins search for verbatim: bad value for restricted picklist field, returned with the offending value appended. If an integration starts failing after a restriction change, that is the error in your logs.
How to set up Lead Source tracking rules
Picklist hygiene stops bad values getting in. Tracking rules make sure good values get in at all. Four that earn their place, in build order.
1. Require it on manual creation only. A validation rule, not a required field. Making the field required at object level breaks every integration that does not send it. This does not:
AND(
ISNEW(),
ISBLANK(TEXT(LeadSource)),
NOT($User.UserType = "Guest")
)
2. Stamp the source at the form. One hidden field per Web-to-Lead form, hardcoded to the right value: <input type="hidden" name="lead_source" value="Paid Search" />. Every form on the site, different value, no exceptions. This is fifteen minutes of work and fixes more attribution than anything else in this article.
3. Protect the first touch. A record-triggered Flow, before-save, that copies Lead Source into Original Lead Source when the record is created, and never again. Once that field exists, add a validation rule blocking anyone but an admin from editing it. Reps re-qualifying old leads will otherwise overwrite the only record you have of where the deal actually came from.
4. Fill the Opportunity gap. A record-triggered Flow on Opportunity that writes Account Source into Lead Source when the Opportunity is created without one. This is the fix for the blank-source Opportunities described in the conversion mapping section.
None of it needs Apex. Four afternoons of admin work turns a decorative field into a reportable one.
Turn on Field History Tracking while you are in there
Nobody covering this topic mentions it, and it is two clicks. Enable history tracking on Lead Source and Salesforce records who changed the value, from what, to what, and when. The next time sales and marketing disagree about whether a source was edited after the fact, the answer is in the record rather than in the argument. Set it up before you need it, because history only starts accruing from the day you switch it on.
A Lead Source taxonomy you can report on
Most orgs fail at Lead Source not because setup is hard but because nobody decided what the values mean. Here is a starter list. Fewer than a dozen values, each one a channel you could plausibly move budget between.
Before you design a new list, look at what you started with. The set Salesforce documents out of the box is Advertisement, Employee Referral, External Referral, Partner, Public Relations, Seminar Internal, Seminar Partner, Trade Show, Web, Word of mouth and Other. Almost nobody is still running that list unedited, and almost nobody knows what theirs was changed to or by whom. Export before you redesign.
Recommended Lead Source values:
- Organic Search
- Paid Search
- Paid Social
- Organic Social
- Referral Partner
- Employee Referral
- Customer Referral
- Event
- Direct
- Outbound
- Other
That is deliberately coarse. Twelve values fit on one chart and each one maps to a decision someone can make. If you find yourself wanting “LinkedIn Sponsored Content Q3 ANZ” on that list, you want a Campaign, not a Lead Source value.
The three-field model
One picklist cannot hold everything you need, so stop asking it to. Three fields, working together:
| Field | Type | Purpose | Who writes it |
|---|---|---|---|
| Lead Source | Standard picklist (cannot be restricted) | The channel. Reporting rolls up on this | Form, import, Flow |
| Lead Source Detail | Text | The specifics. Landing page, keyword, partner name | Integration or hidden form field |
| Original Lead Source | Text, write-once | First recorded value, never overwritten | Set on create only |
Original Lead Source is the one people skip and then regret. Without it, a rep who re-qualifies an old lead and changes the source has permanently deleted the fact that the record came from paid search eight months ago. With it, you keep both the first touch and the current story.
Score your own Lead Source setup
Twelve checks drawn from this article. Tick what is true in your org.
Your Lead Source data is decorative.
The Web bucket, and why your best channel is invisible
Here is the single biggest reason Salesforce Lead Source data underdelivers.
Almost every digital arrival gets stamped Web. Paid search, organic search, a link in a newsletter, a Reddit comment, a partner listing, someone typing your URL after hearing you on a podcast. One label.
So the chart says Web is your best channel.
Which is roughly as useful as being told your best salesperson is “an employee.”
Salesforce is not doing anything wrong here. Lead Source is a CRM field, and the CRM sees the form submission, not the journey that led to it. By the time the record exists, the click that started everything happened days earlier on a page Salesforce never saw.
Three practical ways to break the bucket open, in ascending order of effort:
| Approach | Effort | What you learn | Where it breaks |
|---|---|---|---|
| Split it at the form | Low | Which page converted | Says nothing about what brought them to that page |
| Pass parameters into hidden fields | Medium | Source, medium and keyword on the landing session | The visitor who leaves and returns by typing your URL records as Direct |
| Track the visitor across sessions | Handled for you | First click, every page, the full sequence | Nothing. This is the version that holds |
The third one is what Lead Source does. Assign an identifier on first visit, keep the first touch and every subsequent one, and attach the full sequence to the lead when they finally submit. When the form fires, the record carries the original click, the pages viewed, and the path in between, not just whichever session happened to end in a form fill.
One lead, end to end, and the exact step that loses the information
Mechanics are easier to argue about than to picture, so here is one lead moving through all four objects. Mike Reeves owns Reeves IT Services, a managed services provider in Sydney.
| Step | What happens | What Salesforce holds |
|---|---|---|
| Day 0 | Mike clicks a paid search ad and lands on /managed-it | Nothing. No record exists yet |
| Day 0 | Reads /managed-it, browses to /pricing, leaves without enquiring | Still nothing. This is the visit that earned the deal |
| Day 7 | Types the URL directly, reads /case-studies, submits the contact form | Lead created. Lead Source: Web |
| Day 7 | The paid click, the two pages read on day 0, and the keyword | Gone. The form saw one session, and it was the direct one |
| Day 9 | Rep qualifies and converts the lead | Contact Lead Source: Web. Account Source: Web. Opportunity Lead Source: Web |
| Day 96 | Deal closes won | Closed Won, Lead Source: Web |
Every field did exactly what Salesforce designed it to do. The picklist was clean, the mapping worked, the value carried all the way to Closed Won. And the report still credits the win to Web, because the information was already lost on day 7, before any record existed.
Note which step is the expensive one. It is not the conversion and it is not the picklist. It is the gap between day 0 and day 7, which no amount of Setup work reaches. That is the difference between a tidy field and attribution.
Reporting on Lead Source without kidding yourself
Once the field is clean, three reports are worth building. The Trailhead module covers the builder itself if you need it.
Leads by Lead Source, this quarter versus last. Volume by channel. The obvious one, and the one most people stop at.
Opportunities by Lead Source, with amount. This is the one that shows the channel producing the most leads is often not the channel producing the most revenue.
Closed Won by Lead Source, with average deal size and days to close. The one that changes budgets. A channel producing half the volume at triple the deal size and half the sales cycle should not be funded like the other one.
One thing to check before you trust the volume numbers. Converted leads drop out of the Leads list view, so if a report is built to mirror that view it counts only the leads that never converted, which quietly undercounts every channel that actually worked. Add a filter for Converted equals True, or use the Leads with converted lead information report type, and compare the two totals.
One caution on all three. Lead Source holds one value, so every report built on it is a single-touch report whether or not it is labelled that way. Say that out loud in the meeting before someone cuts a channel based on it.
Where the field runs out of road
Lead Source is a good field. It is not an attribution system. Most bad budget decisions live in the difference.
What it cannot do:
- Hold more than one value. A buyer who found you through organic search, came back through a paid ad, then converted from an email gets one label. Multi-touch attribution is not something this field can express.
- See anything before the form. No pages viewed, no keyword, no sequence, no first click.
- Update itself. If nothing writes to it, it sits empty or holds the default.
- Distinguish first touch from last. Unless you build the Original Lead Source field yourself.
- Reconcile with your ad platforms. Google Ads reports conversions. Salesforce reports leads with Lead Source = Web. Those two numbers will never agree, and the monthly argument about which one is right is a tax on your reporting meeting.
One footnote for orgs running Person Accounts: conversion creates a person account rather than a separate account and contact pair, so where the source value lands differs from the standard path above. Check the behaviour in a sandbox before you build reporting on it.
Lead Source for Salesforce sits in front of the CRM rather than inside it. It records the actual source at the moment of submission, keeps the full page journey, and can push a clean value into a Salesforce custom field so your picklist stays tidy and your attribution has something real underneath it. Web-to-Lead and MCAE forms both work. No Apex.
Sources
Every external document this guide relies on, checked on the date below. Where Salesforce documents something differently from the way it is usually repeated online, the documentation is what this article follows.
- Add or create a new Lead source. Salesforce Help. Accessed 3 August 2026.
- Default Standard Picklist Field Values in Salesforce Classic. Salesforce Help. Accessed 3 August 2026.
- Create a Custom Picklist Field. Salesforce Help. Accessed 3 August 2026. The restriction option is documented as part of creating a custom picklist, which is why a standard field cannot use it.
- Error ‘bad value for restricted picklist field’ appears when a record is created or updated. Salesforce Help. Accessed 3 August 2026.
- Generate Leads from Your Website with Web-to-Lead. Salesforce Help. Accessed 3 August 2026.
- Lead Conversion Field Mapping. Salesforce Help. Accessed 3 August 2026. Also the source for the person account behaviour noted above.
- Map Custom Lead Fields for Lead Conversion. Salesforce Help. Accessed 3 August 2026.
- Before-Save Record-Triggered Flows. Salesforce Help. Accessed 3 August 2026.
- Field History Tracking Overview. Salesforce Help. Accessed 3 August 2026.
- Picklist Administration. Salesforce Trailhead. Accessed 3 August 2026. Its capability table lists restriction against custom picklists only.
- Reports & Dashboards for Lightning Experience. Salesforce Trailhead. Accessed 3 August 2026.
CHANGELOG
- 3 Aug 2026
- First published. Verified against Lightning Experience, Summer ’26.