Import a skip-traced list into Salesforce: clean, split, tag, test, then load
A list from PropStream, BatchLeads or a skip-tracing service is the cheapest way to fill a cold-calling queue, and the fastest way to wreck a Salesforce org. The file arrives with three phone numbers per owner, the same owner on four rows, addresses spelled five ways, and half the people already in your system from last month's list. Loaded straight in, it creates thousands of duplicates, triggers thousands of tasks at once and buries the history of sellers you already know. This guide is the routine I'd run before every list goes in: what to clean, how to split new sellers from existing ones, how to map and tag the file, and how to test and check the load. It works for any list source.
Don't load the file as it comes. Clean phone numbers to digits, standardize the property address, scrub against the Do Not Call registry, and build a match key for each row. Export your existing leads, compare keys, and split the file into new sellers and sellers you already have. Tag every row with a campaign, load 50 rows as a test, check them, then load the rest with the Data Import Wizard (up to 50,000 records at a time) or Data Loader. Hold automations during the load so thousands of tasks don't fire at once.
What should one row in the file mean?
Decide this before anything else. List providers usually give you one row per property, with the owner's name and several phone numbers and emails across columns. Salesforce wants one seller record with one main phone, and the other numbers stored somewhere you can still use them. A workable rule for most teams:
- One row = one property and its owner. The property address is the key, because it is the one thing that is stable. Owners change numbers, and spellings of names vary.
- Best phone in Phone, the others in their own fields (Phone 2, Phone 3, or a related record if your setup uses one), so a caller can try the next number without a second lead.
- Owners with several properties get several rows. Whether they become one seller with several deals depends on your data model; see Lead, Opportunity or Property.
How do you clean the file before it goes in?
- Phones to digits. One column per phone, ten digits, no brackets or dashes. This is the same cleaned-phone key your duplicate rule should match on; see duplicate seller leads.
- Standardize the address. One street column, one city, state and zip. "123 N Main St" and "123 North Main Street" should be one value. A free address-cleaning step in your list tool or spreadsheet is worth the ten minutes.
- Remove rows with no usable number or address. A row you can't call or mail only adds noise.
- Scrub against the Do Not Call registry. The FTC says sellers and telemarketers must update their call lists, deleting numbers on the National Do Not Call Registry, at least every 31 days. Do it before you load and keep a flag for your own internal do-not-call list too. Load the result as a field, so it travels with the record.
- Set consent to "no" by default. A skip-traced number is not permission to text. Leave the text-consent field empty or "No" until the seller gives it, and see texting sellers.
- De-duplicate inside the file. Salesforce doesn't compare rows saved together, so the same owner twice in one file becomes two records. Sort by property key and remove repeats first.
How do you split new sellers from sellers you already have?
- Build a match key in the file: cleaned property street plus zip, and separately each cleaned phone.
- Export your existing leads, contacts and open deals with the same keys (add the cleaned phone and a property key field in Salesforce if you don't have them).
- Compare the two. A lookup in a spreadsheet works; so does a database or Power Query. Mark each row new (no match on property or phone), existing (matches a known seller) or conflict (matches on phone but not property, or the other way round).
- Handle each group on purpose.
- New: load as new leads.
- Existing: don't create a lead. Add them to the new campaign, and update fields such as a better phone number, keeping the record and its history.
- Conflict: review by hand. Same phone and a different property is often a seller with a second house.
This is the step most teams skip, and it is what keeps a returning seller from becoming a stranger in your system. Without it, a duplicate rule that blocks the load will fail the import instead of warning anyone, which is the cause of imports that stop with a duplicates-detected error.
How should the columns map to Salesforce fields?
| In the list | In Salesforce | Note |
|---|---|---|
| Owner name | First and last name on the Lead | If the list gives one string, split it first. Companies and trusts go in a separate field. |
| Cleaned phone 1, 2, 3 | Phone, Phone 2, Phone 3 | Digits only; add a column for phone type if the list has it |
| Often wrong on skip-traced lists; mark the source | ||
| Property street, city, state, zip | Property address fields | Not the owner's mailing address, which goes in its own fields |
| Owner mailing address | Mailing address fields | Absentee owners are your best signal |
| List filters (equity, years owned, absentee, tax delinquent) | One field each, or a single picklist for situation | Keep what you'll score or filter on; drop the rest |
| DNC result and date | Do-not-call checkbox and scrub date | So you know how stale the scrub is |
| (you add) Lead source | Lead Source picklist | For example "Cold call list" |
| (you add) Campaign | Campaign member | See below |
Use the lead source, campaign, market and status fields from the CRM field kit as your base, add the phone and address fields above, and take picklist values from the tagging rules, so a list never invents a new category.
How do you tag which list produced the deal?
Create one campaign per list pull, named so it sorts: provider, filter, date and market. Add every loaded row as a campaign member with a status such as "Loaded". Put the cost of the list on the campaign. Then your reports can answer the question that matters later, which is not "how many leads did this list give me" but "how many contracts, and what did each cost". The campaign setup is covered in lead sources in Salesforce, and the arithmetic in the cost per deal calculator.
What should you hold back during the load?
An import is an event your automations will react to. Imagine a flow that creates a call task for every new lead, an assignment rule that spreads leads across reps, and a text sequence that starts on a new record. Load 8,000 rows and you create 8,000 tasks, assign them in one lump and possibly send messages you didn't mean to. Before you load:
- Decide who owns the list (one caller group or queue), and set the owner in the file, so assignment doesn't scatter it.
- Add a "list import" flag your flows can check, so call-now tasks and speed-to-lead alerts skip it; those are for inbound sellers.
- Make sure nothing sends a message to a record just because it was created.
- Switch on duplicate reporting, so any match is logged rather than lost.
How do you test, load and check?
- Test with 50 rows. Pick a mix: new, existing and a few ugly ones. Load them and open ten records. Check phones, addresses, source, campaign, owner and consent.
- Load the rest. The Data Import Wizard handles up to 50,000 records at a time. For more, or when you need to update existing records by ID, use Data Loader.
- Check the counts. Rows in the file equal records created plus records updated plus rows you set aside. If the numbers don't add up, find the gap before anyone starts dialing.
- Run a duplicate report. Group the new leads by cleaned phone and by property key. Anything with two or more records goes to the clean-up list.
- Spot-check 20. Pick twenty at random, find each in the CRM and compare with the file.
- Keep the file. Store the original and the cleaned version with the campaign. If a seller disputes where you got their number, you'll want it.
Then let the callers in, with their queue set up as in the cold-calling team setup.
Questions
Can I connect PropStream to Salesforce?
I found no native PropStream integration with Salesforce. PropStream exports lists as spreadsheets, which you clean and then import with the Data Import Wizard (up to 50,000 records at a time) or Data Loader. The same approach works for BatchLeads and other skip-tracing exports.
How do I import a list into Salesforce without creating duplicates?
Clean phone numbers and addresses, build match keys, export your existing leads and compare, then split the file into new sellers, existing sellers and conflicts. Load only the new ones as leads, and update or add existing ones to the campaign. Also remove repeats inside the file, because Salesforce doesn't compare rows saved together.
How many records can I import with the Data Import Wizard?
Up to 50,000 records at a time, according to Salesforce Help. For larger files, or to update existing records by ID, use Data Loader.
Should every row of a skip-traced list become a lead?
No. Remove rows with no usable number, scrub against the Do Not Call registry, and don't create a new lead for someone you already have. Add known sellers to the campaign instead, so their history stays on one record.
How do I track which list produced a deal?
Create one campaign per list with the cost on it, add every loaded record as a campaign member, and keep the lead source on the record. Then report contracts and cost per contract by campaign.
How often do I have to scrub a list against the Do Not Call registry?
The FTC says sellers and telemarketers must update their call lists, removing numbers on the National Do Not Call Registry, at least every 31 days. Store the scrub date on the record so you can see how old it is. This is information, not legal advice.
Why did my Salesforce import fail with a duplicates error?
An active duplicate rule matched records in your file. Imports can't show an alert to a person, so the rule can stop those records from being saved. Split new from existing sellers before the load, so the file doesn't contain records that match.
Related guides
Sources
Checked in October 2026. Compliance notes are information, not legal advice.
- Salesforce Help: Data Import Wizard, how many records. Up to 50,000 records at a time
- FTC: Complying with the Telemarketing Sales Rule. Update call lists against the National Do Not Call Registry at least every 31 days
- Salesforce Help: Things to know about duplicate rules. Records saved together aren't compared; imports can't show alerts
Want lists to load cleanly every time?
The CRM Revenue Audit (USD 1,500, fixed price) checks how lists, duplicates and campaigns behave in your org today and returns a fix plan. It's for teams already on Salesforce. On another CRM and moving? List loading is the first routine we set up.
Book a free callSee the Revenue AuditOr just ask one question about your setup: email · WhatsApp · LinkedIn