How to Clean a CSV Lead List Before You Upload It
Why a messy list costs you
A lead list is usually assembled from several places: a form export, an event sign-up sheet, a spreadsheet a rep kept, a HubSpot export. By the time it reaches you, it has duplicate people, phone numbers in five formats, blank rows, and a column called "Notes 2" that nobody understands.
Upload that as is and you get failed calls, people called twice, agents greeting someone by the wrong name, and worst of all, calls to people who never agreed to be called. Ten minutes of cleaning prevents all of it.
This guide works in any spreadsheet tool. No code needed, although a short script helps for large lists.
Step 1: make a copy and look at it
Never clean the original. Save a copy with today's date in the file name.
Then scroll through. Look at:
- What columns exist and what each one means.
- How many rows there are.
- Obvious junk: test entries, blank rows, rows with only an email.
- Where the list came from, and when.
Write down the source and date. You will need them for consent questions later.
Step 2: standardize columns
Rename columns to clear, consistent names. A good minimal set:
- first_name
- last_name
- phone
- company (for B2B)
- zip or state (for calling hours)
- lead_source
- consent_date and consent_source
- request (what they asked for)
Delete columns you will not use. Split a single "Name" column into first and last if your tool needs both. Trim extra spaces from every text cell. Most spreadsheet tools have a TRIM function.
Step 3: fix phone numbers
Phone numbers are the most common reason uploads fail.
- Remove formatting. Strip parentheses, dashes, dots, and spaces so you are left with digits.
- Add the country code. For US numbers, that means a leading 1, or +1 depending on what your upload tool expects. Check the expected format before you start.
- Check length. A US number with country code has 11 digits. Flag anything shorter or longer.
- Remove obvious fakes. Numbers like 555-555-5555 or 123-456-7890 from form spam.
- Pick one number per person. If a row has mobile, office, and home, choose the one the person gave for calls, and keep consent tied to that number.
Mark any rows you cannot fix and set them aside rather than guessing.
Step 4: remove duplicates
Sort by phone number and look for repeats. Then do the same by email. Common duplicate patterns:
- Same person submitted the form twice.
- Same person appears in two source lists.
- Same phone number for two people at the same household or office.
Keep the row with the most recent consent and the most complete information. Most spreadsheet tools have a "remove duplicates" feature, but review the results. Two different people can share a front desk number.
Also check against people already in your CRM or already in an active call schedule, so nobody gets two sequences at once.
Step 5: confirm consent and remove opt-outs
This is the step that matters most.
The FCC confirmed in February 2024 that AI-generated voices are artificial voices under the TCPA, so calls using them require prior express consent, and written consent for telemarketing (FCC Declaratory Ruling FCC-24-17, accessed Oct 17, 2026). For every row, ask:
- Do we know when and how this person agreed to be called?
- Did the wording cover calls from our business, including AI or artificial voice calls?
- Is the phone number the same one they gave when they consented?
Remove anyone where the answer is no or unknown. Then remove anyone on your internal do-not-call list, anyone who has asked you to stop, and, for telemarketing, anyone on the National Do Not Call Registry (accessed Oct 17, 2026) unless an exemption applies.
Be especially careful with purchased lists. Consent belongs to whoever collected it, for what they disclosed. If you cannot show consent covers you, do not upload those rows. This is general information, not legal advice.
Step 6: add what the agent needs
A clean list is not just correct. It is useful. Add:
- Request or context. "Requested a demo," "asked for a roof estimate," "visited booth at trade show." The agent can mention it on the call, which makes the call make sense.
- Location. ZIP code or state, so calls happen inside allowed hours in the lead's local time.
- Owner. The rep who should receive a warm transfer, if you route by owner.
Step 7: test with a small batch
Upload ten rows first. Check that:
- Names and numbers mapped to the right fields.
- The agent's greeting uses the right name and context.
- Calls are scheduled inside the right hours.
- Results appear in call history and, if you use it, HubSpot.
Then upload the rest. In DialSwarm, you can upload a lead list directly and attach it to a call schedule (Fast, Steady, Persistent, or custom). DialSwarm syncs with HubSpot today, and other tools can connect through Zapier, Make, webhooks, or the API.
DialSwarm bills connected calls only, so bad numbers that never connect will not cost you, but they still waste schedule slots. Current plans are on the pricing page.
A quick cleaning checklist
- Copy the file and note source and date.
- Standardize and trim columns.
- Format phone numbers with country code and check length.
- Remove duplicates, within the file and against your CRM.
- Keep only rows with documented consent that covers you.
- Remove opt-outs and, where required, Do Not Call Registry numbers.
- Add context, location, and owner.
- Test with ten rows.
When to use a script instead of a spreadsheet
For lists of a few hundred rows, a spreadsheet is fine. For thousands of rows, or if you clean lists every week, a short script in Python or a similar tool saves time and makes the steps repeatable. The logic is the same: normalize phone numbers, drop invalid lengths, remove duplicates, filter on the consent column, and remove anyone on your do-not-call list. Keep the script and a log of what it removed, so you can explain any row that was dropped.
Questions
What phone format should I use?
Digits only with the country code, in the exact format your upload tool expects.
How do I handle duplicates?
Keep the most recent and most complete row, and check against your CRM and active schedules.
Can I upload a purchased list?
Only rows where you can show consent that covers calls from your business, including AI calls.