Fastest Lead Loader.
7-day free trial · Cancel anytime · Pay with card, PayPal, or USDT
$ vicifast leads import --list 1001 leads.csv
parsing: 1,000,000 rows · 6 columns · 240k rows/sec
deduping: vs vicidial_list.phone_number on list_id=1001
· 8 duplicates skipped
validating: NANPA + libphonenumber
· 7 invalid rows quarantined → leads.invalid.csv
mapping: phone,first_name,last_name,city,state,custom_data
loading: single COPY statement to vicidial_list
· 999,985 rows inserted in 4.1s
done: (total 8.3s · 1,000,000 input · 999,985 inserted)What you get
The full fastest lead loader surface, end-to-end.
Every card below is a shipped capability. Hover for emphasis; click any matching feature for the deep page.
Drag-and-drop, not a CLI
The Leads tab in your list opens a drop zone. Drop a CSV up to 300 MB; we stream-parse it on the server. The browser never holds the whole file — you can close the tab and come back to find it done.
Column mapping with smart defaults
We detect phone / first / last / city / state / postal from the header row. Anything else maps to the list custom fields. You can override before the load runs.
Dedup on phone + list-id at insert time
Duplicates against the existing list are skipped at the SQL level, not in JS. A million-row file finishes inside a single transaction; rollback is atomic if anything goes wrong.
Invalid rows quarantined, not rejected
A bad phone number does not fail the import. Invalid rows are dropped to an invalid.csv you can download and fix; the rest of the file lands.
No size limit on the plan
Plans do not gate by lead count. Load 10 million if your campaign needs it. The Hetzner disk is yours; the platform is not metering the rows.
No "upload then wait for a worker"
The import is synchronous from your perspective. The progress bar in the dashboard is the actual COPY transaction running. Average finish: 8 seconds for a million rows.
Append, replace, or reset modes
Append to the existing list, replace it entirely (with a typed confirmation), or reset and load fresh. The mode is chosen up-front; no surprise replacements after a careless click.
CSV, Excel, and Google Sheets
Drop .csv, .xlsx, or paste a Google Sheets share URL — the importer handles all three. The Sheets path uses a one-off read-only API call; we never store credentials.
A realistic full-million import. The CLI is shown for clarity; the dashboard flow runs the same pipeline from a drag-and-drop. Invalid rows download as a side-CSV instead of failing the whole import.
FAQ
Questions worth answering
Drop your first million leads in seconds.
Start the trial. Drag a CSV, choose mapping, watch the COPY transaction finish before your coffee. Dedup + validate + invalid-quarantine on every import.