Bulk upload from CSV

Upload a CSV of names + companies and get verified emails or phones for every row that we can find.

Last updated May 11, 2026

Bulk enrichment is how you process a list of contacts in one go — typically a CSV from a CRM export, a conference attendee list, a target-account list. You upload the file, we work through it, you export verified results. This page walks through every step.

When to use bulk upload

Bulk is the right tool when you have:

  • A list of 10+ contacts to enrich
  • A target-account list where you want to find specific named people at each account
  • A CSV from a CRM or sales tool that needs verification before you reach out
  • An old prospecting list you want to refresh before a campaign

If you have just a few contacts, single search is faster. If you want to find decision-makers at companies (without knowing specific names), company search is the better tool.

Step 1 — Open Bulk enrich

Click Bulk enrich in the left sidebar. You land on the upload screen with a drop zone in the middle and two helper cards below — a sample CSV you can download, and tips for best results.

Step 2 — Prepare your CSV

Your CSV needs three columns at minimum:

  • First name
  • Last name
  • Company

The column names don't have to match exactly — you'll map them in the next step. But the data needs to be present.

Some practical tips for best results:

  • Include first name, last name, and company columns — split first and last name, don't combine into a "full name" field
  • Skip middle names — use first name only. "John" works better than "John P." or "John Paul"
  • Remove titles like Mr, Mrs, Dr — these confuse name matching. Strip them from the first-name column before upload
  • Use the person's current company — not where they used to work. If your CSV is old, results will be worse on people who've changed jobs

The sample CSV downloadable from the upload screen shows the expected format. Use it as a template if you're not sure.

Step 3 — Upload the CSV

Drag your file into the drop zone, or click the zone to browse for it. The file needs to be:

  • A .csv file (not .xlsx — export to CSV first if you have a spreadsheet)
  • Under 10 MB

The upload happens instantly. There's no waiting for the file to transfer.

Step 4 — Map your columns

After upload, you see the Map your columns screen. Three dropdowns appear:

  • First Name — pick the column in your CSV that has first names
  • Last Name — pick the column with last names
  • Company — pick the column with company names

Below the dropdowns, you'll see a preview of the first 5 rows of your file, so you can confirm you've mapped the columns correctly. Check the preview — getting the mapping wrong means the entire job will fail.

If your CSV had clear column headers (first_name, last_name, company), the mapping is auto-detected and you can just click forward.

Click Analyze Contacts to continue.

Step 5 — Pre-flight check

Before processing starts, you see a summary of what you're about to do:

  • Total contacts — total rows in your CSV
  • Previously found — contacts you've already enriched in past searches (these will use cached data, no new credits)
  • Duplicates removed — duplicate rows that we'll only count once
  • New lookups — actual fresh lookups that will happen, with the maximum credit cost

Below that, the same I'm looking for toggle you've seen on single search:

  • Email — 1 credit per result
  • Phone — 10 credits per result
  • Both — up to 11 credits per result

If you don't have enough credits for the job, you'll see a warning here instead of the green confirmation. If you do, you'll see "✓ You have enough credits" with the math spelled out.

When you're ready, click Start Enrichment.

Step 6 — Watch it process

The processing screen shows:

  • A progress bar filling left to right as rows are processed
  • A counter showing N processed out of total (e.g. "12 / 100")
  • Live found/not-found/failed counts beneath the bar
  • Live credits used / credits remaining on the right
  • The contact table below, with each row's status — Pending, Found, Not Found, or Failed

The table updates row by row as we work through your file. You can scroll through it while the job runs.

You can leave this screen and come back. The job continues in the background. To return, go to Bulk enrich → Past uploads.

Pausing a job

If you spot something wrong mid-job — wrong column mapping, wrong mode, wrong file — click Pause. The job stops where it is. You can resume it later, cancel it entirely, or export what's been processed so far.

Exporting partial results

While a job is running, you can click Export N results so far to download a CSV of what's processed so far. Useful if you need to start working with the early results before the whole job finishes.

Step 7 — Review the results

When the job finishes, you see:

  • A green "Enrichment complete" banner with the summary ("Found data for X contacts from Y total. Z credits used.")
  • Four result tiles: Found, Not Found, Failed, Credits Used
  • A primary Export Results as CSV button
  • A New upload button to start another job
  • The full table of contacts with their verified data and status

The table has tabs to filter the view:

  • All — every row
  • Found — only successful lookups

Each row shows the contact, their verified email (or phone), the status badge, and a + button on the right — click it to save that contact to one of your saved lists.

Step 8 — Export

Click Export Results as CSV to download the enriched file. The CSV includes:

  • Your original CSV columns
  • A new column with the verified email
  • A new column with the verified phone (if you ran Phone or Both mode)
  • A status column showing Found / Not Found / Failed for each row
  • Credits used per row

You can import the CSV into your CRM or sales engagement tool from here. See Exporting your results for tool-specific tips.

Status meanings

  • Found — we returned a verified result for this contact
  • Not Found — we ran the lookup, no verified result was available, no credit charged
  • Failed — we attempted the lookup but couldn't find or verify a result for reasons specific to this row (a temporary system issue, an input we couldn't parse cleanly). The end result is the same as Not Found from your perspective: no data returned and no credit charged. Failed rows can often be retried in a follow-up job
  • Pending — the row hasn't been processed yet (only visible during an active job)

Credit math on bulk

Bulk uses the same rules as single search:

  • Every successful row costs credits (1 for email, 10 for phone, up to 11 for both)
  • Every unsuccessful row costs nothing
  • Cached rows (previously enriched) cost nothing

So a 1,000-row file with a 60% hit rate on Email mode costs 600 credits, not 1,000.

Past uploads

Every bulk job is saved in your account. Click Past uploads to see your history of bulk jobs. You can:

  • Open any past job to see its results
  • Re-export the CSV from any past job
  • Re-run a past job (useful if data has changed since)

Past uploads aren't deleted unless you delete them manually. They're useful as a record of what you've enriched and when.

Related

Related articles

How prospiq finds emails

Multiple verified sources, real SMTP checks, and a guarantee that you only pay for what works.

Why we verify every email

Bounced emails cost more than the credits you saved. We absorb that cost so you don't have to.

Single contact search

How the search page works — three modes, what each costs, and how to read the result.

Need more help?

Email us and we will get back to you.

Contact support