How to Import Leads or Contacts into Salesforce Campaigns
Salesforce Campaigns have existed since the dawn of time, but have been receiving more attention now that Pardot (Account Engagement) is growing more tightly integrated with this Salesforce object. The shift, due to Connected Campaigns, means Pardot marketers need to understand this alternative campaign management process.
Importing Leads (or Contacts) into Salesforce Campaigns may continue to confuse you. There are multiple ways to import data, including Campaign Members into Salesforce, multiple places to access the tools, and more than one type of record you need to create – yep, not the easiest to figure out.
Importing data into Salesforce has its benefits. While some organizations will still import data into Pardot (as their “holding” area for pre-qualified Leads), Salesforce data import will:
- Prevent data misalignment between Salesforce and Pardot. This often results in Pardot Sync Errors, due to Salesforce admins being able to configure stricter validation rules and de-duplication rules.
- Help you gain a complete picture when reporting on Campaign Influence.
How do you start? What’s the most efficient process? How can you avoid messing up data?
These are the questions this guide will answer.
Importing Into Salesforce – Which Tool To Use?
As I mentioned in the introduction, you can choose between a few import tools for Salesforce, including:
- Data Import Wizard
- Data Loader
- Workbench
- Third-party Tools
I recommend you use the Data Import Wizard when starting out, which is what I will be showing you. It has a more user-friendly interface, and you can access it either from the Salesforce setup (whereas Data Loader is an application, accessed externally) or from the Campaign page.
A Note on Campaign Members
I also hinted that the process involves creating more than one type of record. You may be familiar with how Leads and Contacts work, but the most important thing to know is that they are two separate objects, each with their individual characteristics.
When you add a Lead or Contact to a Salesforce Campaign, you will be creating a Campaign Member. This golden link means that both Leads and Contacts can be simultaneously members of multiple Campaigns (AKA. Multi-touch Attribution).
This distinction is important and will become clear as we go through the tutorial.
Check Your Duplicate Rules
Before you go any further, ask your admin to check the matching rules and duplicate rules that are active in your Salesforce org.
You want to ensure that there is a Lead matching rule that will look for a match with:
- Existing leads
- Existing contacts
If the lead matching rule doesn’t consult your Contact database, it will create unwanted duplicates. I will mention an AppExchange app that can completely cure this headache at the end of this post.
Check Your Validation Rules and Required Fields
One other very important thing when inserting or updating Salesforce records is knowing which fields are required, and the existing validation rules. Confirm with your Salesforce admin that your file (which holds all the Campaign Member information) includes a column for each of the required fields on either Leads, Contacts, or Campaign Members.
Even if you miss one, don’t worry, regardless of the tool you decide to use for your import, you will be able to review the error message and correct the data, then reimport.
Part 1: Importing Leads As Campaign Members – New and Existing
By following these steps, you add Campaign Members and Leads (where needed) in one import, without creating duplicates.
Let’s walk through that…
- Salesforce asks: ‘Is there an existing Lead with a matching email address?’
- If yes, add them to the Campaign
- If no, Salesforce asks…
- ‘Is there an existing Lead with a matching email address?’*
- If yes, block Salesforce from creating a new lead.
- If no, allow Salesforce to create a new lead, and add them to the Campaign.
*Note: Any other logic defined in your duplicate matching rule will be taken into account as well.
Step 1: Prepare your File
Your import file needs the following headers (at least*):
- Email Company
- First Name
- Last Name
- Campaign ID
- Member Status (optional**)

Where’s the Campaign ID? You will find the ID in the URL, eg: 7012A0000018SSnQAA:

*Note: These fields are the standard fields any import will require, but these may only scrape the surface for what your org requires. Are there required Lead fields? Are there fields that lead assignment rules use? Regardless, adding more fields improves overall data quality, and so you should seize this opportunity.
**Note: If you do not define the status your Campaign Member should have, Salesforce will use the default ‘Sent’ status. More content coming on Campaign Member Statuses coming to The DRIP soon.
Finally, download the sheet in .csv format.
Step 2: Launch Data Import Wizard
When importing Campaign Members with the Data Import Wizard, there are two ways to access it, and I will mention both of them – you can choose whichever makes more sense for you.
If you are on a Campaign’s Record Page, you can make use of the Campaign Members related list. Simply click the arrow exposing the additional options, and click Import Leads and Contacts. By doing so, you will be redirected onto the Data Import Wizard page.

Alternatively, you can navigate to Salesforce Setup, and search for Data Import Wizard. Click the big green ‘Launch Wizard’ button (you may need to scroll).

Use the image below to follow along:
- ‘What kind of data are you importing?’ – select Leads.
- ‘What do you want to do?’ – select Add new and update existing records.
- ‘Match lead by’ – Email (you can also choose to match by Salesforce.com Id).
- ‘Assign New Leads to this Source’ – [select the appropriate lead source, which will indicate a first touchpoint].
- ‘Assign All Leads to Campaigns’ – select this checkbox!
Then, drag your file into the ‘Where is your data located?’ section.
Step 3: Field Mapping
On the next screen, you will find the fields will be automatically mapped (if you used the exact field named as headers in your file). Click ‘Change’ to either select fields for unmapped fields, or remove a mapped field you don’t want to import.

See this error? This means that Salesforce has not picked up the campaign ID, and you need to cross-check your file.

Once you’re happy, start the import.
Step 4: Check the Result
You will be automatically navigated to the Bulk Data Load Jobs page.
When the progress reaches 100%, check how many records were processed and any failed under the ‘Batches’ section. Failed records need actioning, so click ‘View Result’ to download a file that will tell you the error reason.

Part 2: Importing Contacts As Campaign Members – New and Existing
Earlier, I honed in on the fact that Salesforce Contacts have different characteristics to Leads. Part 2 will cover the differences in the import process.
Step 1: Prep your File
Your import file needs the following headers (at least – refer to the leads section for more information):
- Contact: Email
- Account Name
- Contact: First Name
- Contact: Last Name
- Campaign ID
- Member Status (optional)

Step 2: Launch Data Import Wizard
Go to the Salesforce Setup, and search for Data Import Wizard. Click the big green ‘Launch Wizard’ button (you may need to scroll).
Use the image below to follow along:
- ‘What kind of data are you importing?’ – select Accounts and Contacts.
- ‘What do you want to do?’ – select Add new and update existing records.
- ‘Match contact by’ – Email
- ‘Match account by’ – Name and Site
- ‘Assign All Contacts to Campaigns’ – select this checkbox!

Then, drag your file into the ‘Where is your data located’ section.
Note: it’s worth pointing out that there is no Lead Source selection box, unlike when doing the Lead import. As this is key information, consider pulling a list of newly created contacts, and doing a second import to include Lead Source as a field in your import file.
Repeat Steps 3 and 4 from Part 1.
Using Pardot Import as a Shortcut
Someone brought a smart hack to my attention recently. It is possible to import Leads and Contacts via Pardot, by importing prospects directly into a Pardot list, then leveraging an automation rule to add these prospects to a Salesforce Campaign. I can completely see how this method is appealing, after all Pardot de-duping capabilities will match existing prospects, create those that don’t exist, and add both types to the list – all in one swoop!
However, there’s two reasons you should be beware of this shortcut:
- Automatic AMPSEA Matching: With ‘allow multiple prospects with the same email address’ enabled, when importing prospects, Pardot matches with the most recently active prospect (which perhaps is not the record you want!).
- Assignment: These new prospects will not be assigned automatically, and so there is an extra automation required to assign prospects to a user before these can sync to Salesforce.
AppExchange to the Rescue
The process we’ve gone through in this tutorial is fiddly and time-consuming, but completely possible to forge into a habit, either with the Data Import Wizard or perhaps Data Loader. However, there are a couple apps from the Salesforce AppExchange that I can recommend to cure the headache.
PeopleImport by Validity not only can handle this process more efficiently, but gives you the ability to define smarter matching logic. Check it out, if only to educate yourself further on the topic of Campaign Member import.
Another great option is SimpleImport by Provenworks, which can help alleviate the Campaign Member Import, and so much more! Not only will Salesforce Admins be able to seamlessly import records and associate them to Campaigns, but superusers can also be empowered to do so. The best news – you don’t need a Campaign Id, or even a Campaign Member Status column, as you can easily choose both from a dropdown list.

Summary
This tutorial has shown you how to import Leads and/or Contacts into Salesforce Campaigns. The growing importance of Salesforce Campaigns in any Pardot Campaign Management process means it is time Pardot marketers got to grips with efficient Campaign Member import, and I hope this post has been valuable in helping you achieve that.
Tom
Great article.
If I have a list of people I need to import to a campaign (webinar attendees for instance), I may not know which of them are leads and which of them are contacts. In fact, I’ll never know this. Would you recommend importing the entire list as leads first, then doing the same process with the same list and importing them as contacts?
Lucy Mazalon
Hi Tom, thanks for reaching out. I would recommend you first check to ensure that there is a Lead matching rule that will look for a match with a) existing leads b) existing contacts, because if the lead matching rule doesn’t consult your contact database as well as your leads, it will create unwanted duplicates. Be sure that it will also block creation when you do this. Then importing these records as leads will: a) block any existing contacts b) block any existing leads c) create new leads where there no existing leads or contacts. Hope that helps!
Tom
Thanks for the response Lucy! I have matching rules set up. In the example above, if I import leads and some of them are existing contacts, are those contacts added to the campaign as campaign members or would they be skipped altogether?
rob
Hi! Can we get an answer to Tom’s question, please? I often get handed a list of “Leads” from an event that turns out to contain a number of contacts that are already in our org. Is there a way to add a mixed list of leads and contacts (without a Salesforce ID) to a campaign? Thanks!
Beth Saunders
Hey there,
Thanks so much for sharing this! I’ve tried the mentioned steps for contacts (creating new and adding them to the campaign), but I get an error for the account name when I try to upload. Is there any way to upload and match the account name with an existing account? I can do this with dataloader.io by uploading to account ID using the lookup by name, but then I don’t get the option to add them to the campaign.
I’ve created a workaround in the past where I add a checkbox field to the contact record specific to the campaign I want to add them to, but this definitely isn’t scalable.
Any help is appreciated 🙂
Lucy Mazalon
Hi Beth, have you tried selecting ‘Account name and site’ for the account matching in Data Loader? I suppose if you try that and get past that stage, then you should be ok to do the rest of the steps. Do you have an account database where there are lots of variations of the same account eg. DRIP Ltd. / DRIP Inc. / DRIP BVBA etc… or is your data relatively simple in structure?
darlenelimtiaco
Good article and thank you for sharing. You can automatically assign to the user when importing prospect records into Pardot as long as you include the column “Assign to User” in the CSV file that’s populated with the User’s email address that’s used in Salesforce.
Sabina
Great article! For those who are looking for scheduling automatic Salesforce export\import, I’d recommend to look at Skyvia data integration tool – https://skyvia.com/
Tara
I have records that have fail during upload. I understand why they failed but would like a list of the records that have failed. Is that possible in SF?
Rachel
If you have a user who is NOT a system admin and does not have “View All” access to leads, is there a recommended way for that user to be able to import Leads without creating duplicates (when the Org Wide Defaults are private)? As this help article shows, the match won’t work for such a user:
https://help.salesforce.com/s/articleView?language=en_US&type=1&id=000334561
Jennifer
Thanks for sharing! Looking forward to the content on Campaign Member Statuses. New to Salesforce – a question that has come up is whether or not there is a recommended method for changing the Campaign Member Status? For webinars and related events, we’ll see individuals who initially registered, missed the day of event but participate later in an on-demand offering. Looking for an efficient way to change their “registered” status without creating a duplicate entry.
Andreea D
Hello Jennifer!
Thanks for going through the article! I wouldn’t say there is a recommended way, as new Campaign Member Status values can be obviously created and used either manually from each Campaign or through an automation. I’d personally go with a flow to replace the values based on criteria, but it depends on what is happening in your particular org.
S T
Hi, I dont see “Assign All Leads to Campaigns – select this checkbox! ” On my data import wizard! Why is that? Any ideas?
Helen
This looks like a campaign for emails. We are looking at setting up an outbound call campaign of new data for our BDE to set up apps for BDMs – any ideas on how I do this?
Lucy Mazalon
Hi Helen,
I would say that it’s the same process. From your questions, it sounds like you won’t (necessarily) be importing email addresses along with the records, but Salesforce doesn’t require this field, so the process should be the same. I can’t be certain, as I don’t know the nature of your new vs existing data – just don’t want you to end up with duplicates!
Thanks,
Lucy
shireesha
Hi,
If i disable Import Lead and Contacts quick action button from related list,is there any impact?
Dennis Mundy
Great article, thank you! For new records that do not exist as Leads/Contacts or Pardot Prospects, what is the best practice for importing them and ensuring they are 1) created as a Lead/Contact in Salesforce AND 2) created as a Pardot Prospect AND 3) Campaign Members of a specific Connected Campaign? So far, only the “Pardot-import + subsequent Pardot automations” method described above is the only viable option however this is cumbersome for less technically proficient users that are responsible for continual campaign creation/population. Thanks in advance!!!
Dennis Mundy
I should add to the above, that this scenario is specifically for an org that is configured to NOT create a Pardot Prospect for every Contact/Lead created in Salesforce CRM. Thanks again!
Andreea D
Hello Dennis! Happy you enjoyed the article.
It depends if you are importing in Salesforce or Pardot first.
1) Created as a Lead/Contact in Salesforce – If they have an assigned user in Pardot, they will sync with Salesforce. If there is a Contact with the same email address, the prospect record will sync with that. If there is no contact, Pardot looks for a matching lead. If there are no matches, Pardot will create a new lead record.
2) Created as a Pardot Prospect – If you are importing into Pardot, yes it happens straight away. If importing into Salesforce, there may be a delay in creating the prospect record (dependent on how fast the connector sync is because the connector processes records in batches of 200).
3) Campaign Members of a specific Connected Campaign – Sadly, even though it is cumbersome, the method above is about the only option. You could potentially set something up with Flow (to add prospects with certain criteria to a campaign, however, that will need to be adapted for every new campaign they run which is by no means ideal or scalable). \
You could also look into Campaign Member Sync (https://www.salesforceben.com/the-drip/campaign-member-sync/) but this has limitations as well…
Anna
This is just what I needed to know. What fields are required, and where to find them. This is really useful. I am subscribing to you for sure.
Andreea D
Happy to hear that the post helped make the process easy for you, Anna!