Importing leads
CSV format, field mapping, and avoiding the most common import mistakes.
VICIdial accepts leads as CSV. Here's the working format + the gotchas we get asked about most.
Minimum required columns
phone_number
That's it. Everything else is optional. Phone numbers should be numeric digits, no formatting. Country codes prefix is fine — 15555551234 for a US number.
Recommended columns
phone_number,first_name,last_name,address1,city,state,postal_code,email,custom_id
15555551234,Tom,Smith,123 Main St,Boston,MA,02108,tom@example.com,LEAD-12345
VICIdial maps these to its standard columns automatically. custom_id is your internal id — store anything you want here for later joins.
Where to upload
VICIdial admin → Admin → Lists → List Loader (the bulk loader).
- Pick or create a list (lists are scoped to a campaign).
- Pick a phone code default (country prefix to apply to leads with no
+prefix). For US,1. - Upload the CSV.
- Choose duplicate handling: skip / overwrite / load anyway.
Custom fields
If you have data fields VICIdial's standard schema doesn't have, use Admin → Custom Fields to add them per-list. Reference them in scripts and dial plans via {custom_field_name}.
DNC + suppression
Before going live, build your suppression. Two layers:
- Federal/State DNC — VICIdial has a built-in DNC list (
vicidial_dnc). Load it via Admin → Lists → DNC List. The standard US DNC is downloadable from telemarketing.donotcall.gov. - Internal DNC — your own opt-out list. Enable per-campaign with DNC=
Y.
For state-level lists (NY, FL, etc.), maintain separately and load before each campaign.
TCPA gotchas
This is not legal advice. But the patterns we see customers run into:
- Calling time windows — VICIdial's Local Call Time restricts when each lead's local clock allows dialing. Set this; it's how you stay on the right side of the FTC.
- Reassigned-numbers database — the FCC RND. If you make a TCPA-regulated call, this is now mandatory before you dial. There are commercial services that pre-clean lists against it.
- Opt-out tracking — every campaign needs a way to mark a contact as "stop calling" that updates the lead in real time. VICIdial does this via the Hotkey Form.
Read the TCPA compliance doc for more.
Duplicate strategies
Three options when the loader sees a phone number that already exists in any list:
- Skip — don't load the row. Use for ongoing imports where leads might re-appear.
- Overwrite — replace the existing lead. Use when you have a fresh dump and want it to win.
- Load anyway — load as a new row. Useful when the same number can have multiple leads (e.g. a household).
Big lists
For lists over ~100k leads, upload via SCP rather than the web UI to avoid PHP upload-size limits, then use the CLI loader (/usr/share/astguiclient/ADMIN_lead_loader.pl).
Testing the load
Before kicking off a campaign on a fresh list:
- Sort by
vendor_lead_codeand check a few rows look right. - Filter
status=NEWand confirm count matches what you uploaded. - Run a 5-lead test campaign with one agent against it.