How to Mass Upload Leads in Salesforce

Salesforce offers two built-in tools for mass uploading leads: the Data Import Wizard (for up to 50,000 records) and the Data Loader (for larger volumes with more control). Which one you use depends on how many leads you’re importing and how much flexibility you need. Here’s how to prepare your file, run the import, and handle the errors that commonly trip people up.

Choose the Right Import Tool

The Data Import Wizard lives inside Salesforce Setup, so there’s nothing to install. It handles inserts, updates, and upserts for leads, and it caps out at 50,000 records per import. For most one-time list uploads or marketing campaign imports, this is the fastest path.

The Data Loader is a separate application you install on your computer. It connects to any Salesforce org you have credentials for and supports all standard and custom objects with no practical record limit. Beyond insert, update, and upsert, it also handles deletes, hard deletes, and exports. If you’re importing more than 50,000 leads, or you need to schedule recurring imports through the command-line interface, the Data Loader is your only built-in option.

Prepare Your CSV File

Both tools accept CSV files. Getting the file right before you upload saves you from dealing with a wall of error messages afterward.

  • Match column headers to Salesforce field names. Use the API names of your lead fields (like “FirstName,” “LastName,” “Company,” “Email”) as your column headers. The import tools use these headers to map your data to the correct fields. You can also map them manually during the import process, but matching headers up front speeds things along.
  • Include all required fields. Every lead in Salesforce requires at minimum a Last Name and a Company. If your org has added custom required fields or validation rules, those fields need to be populated in your file too. Missing any of them triggers a REQUIRED_FIELD_MISSING error and the row fails.
  • Check picklist values exactly. If a lead field uses a restricted picklist (like Lead Source or Industry), every value in your spreadsheet must match an active picklist value in Salesforce, character for character. A mismatch produces an INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST error. Watch for trailing spaces, capitalization differences, and values that exist in the picklist but aren’t assigned to the correct record type.
  • Format dates consistently. Salesforce expects dates in a specific format, typically YYYY-MM-DD. If your spreadsheet uses DD/MM/YYYY or another regional format, the import will fail with a “Failed to parse date” error. Before exporting your CSV, format any date columns explicitly rather than relying on Excel or Google Sheets to guess.
  • Remove duplicates proactively. Run a duplicate check in your spreadsheet before uploading. While the Data Import Wizard offers some built-in matching to prevent duplicates, cleaning the file yourself gives you more control over which records survive.

Upload Leads With the Data Import Wizard

From Salesforce Setup, type “Data Import Wizard” in the Quick Find box and launch it. The process walks you through four steps.

First, select the object. Choose “Leads” and then pick your operation: “Add new records” for a fresh insert, “Update existing records” if your file contains corrections to leads already in Salesforce, or “Add new and update existing records” for an upsert that does both in one pass.

Second, upload your CSV file and set your matching criteria. For upserts, you’ll choose a field Salesforce uses to decide whether a row is new or existing, typically Email or a custom external ID field. The wizard shows you how many records it found in the file.

Third, map your columns. The wizard auto-maps columns whose headers match Salesforce field names. For any unmatched columns, manually drag them to the correct field or skip columns you don’t want to import.

Fourth, review and start the import. Salesforce processes the records in the background and emails you a summary when it finishes, including a list of any rows that failed and why.

Upload Leads With the Data Loader

Install the Data Loader from Salesforce Setup (search “Data Loader” in Quick Find for the download link). Once installed, open the application, log in to your org, and select “Insert” for new leads or “Upsert” to add and update in a single pass.

Select the Lead object, browse to your CSV file, and click “Create or Edit a Map” to match your file’s columns to the Salesforce lead fields. Confirm your mapping, choose a folder for the success and error log files, and start the import.

The Data Loader processes records in batches (the default batch size is 200). When it finishes, it writes two files to your chosen folder: a success file listing every record that imported along with its new Salesforce ID, and an error file listing every row that failed with the specific error message. These log files are your best friend for diagnosing problems.

Trigger Assignment Rules During Import

By default, mass-imported leads are assigned to whatever owner you specify in the file (or to you, if no owner is specified). If you want Salesforce’s lead assignment rules to run and route each lead to the right owner automatically, you need to enable that explicitly.

In the Data Import Wizard, check the “Trigger Assignment Rules” option during setup. In the Data Loader, go to Settings before starting the import and enable the assignment rule option there. Alternatively, if you’re using the Data Loader’s API mode, you can include an “AssignmentRuleId” column in your CSV set to your active assignment rule’s ID, or add a “UseDefaultRule” column set to TRUE for every row.

Fix the Most Common Import Errors

Even with a clean file, some rows will occasionally fail. Here are the errors you’re most likely to see and what to do about them.

Validation Rule Failures

A FIELD_CUSTOM_VALIDATION_EXCEPTION error means a record violated one of your org’s validation rules. The error message itself is the custom text your admin wrote into the rule, so it usually tells you exactly what’s wrong. Fix the offending values in your CSV and re-import only the failed rows.

Permission Errors

TRANSFER_REQUIRES_READ and INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY both point to access problems. If you’re assigning leads to a specific owner in your file, that user needs read permission on the Lead object and access to the relevant record type. Verify the owner’s profile and permission sets before retrying.

Row Locking Errors

UNABLE_TO_LOCK_ROW means another process (a workflow, a flow, or another user’s import) was modifying the same record at the same time. This is most common with large imports that trigger complex automation. Reduce your batch size in the Data Loader settings (try 50 or 100 instead of 200) and retry the failed rows. Smaller batches give other processes time to release their locks.

Picklist and Date Errors

These are almost always data formatting issues in the source file. For restricted picklist errors, copy the exact values from Salesforce’s picklist setup into your spreadsheet. For date parsing errors, reformat the column to YYYY-MM-DD in a text editor or spreadsheet before saving as CSV, since Excel sometimes silently reformats dates when you save.

Tips for Smooth Large Imports

If you’re importing tens of thousands of leads, a few precautions make the process much smoother. Start with a test batch of 50 to 100 records. Review the success and error files from that small run to catch mapping mistakes and validation issues before you commit the full file.

Temporarily deactivate non-essential workflow rules, flows, and process builders that fire on lead creation if they aren’t needed for the import. Heavy automation multiplies processing time and increases the chance of row locking errors. Just remember to reactivate everything when you’re done.

Keep your original CSV and every error log file. When rows fail, you can filter the error file, fix only those rows, and re-import them without touching the records that already succeeded. This iterative approach is far easier than re-running the entire file.