Bulk

Clean the list before the campaign.

Upload a CSV. We find the invalid, disposable and risky addresses and give you back a file that is safe to send, before any of them can bounce and hurt your domain.

  • 01

    CSV in, results out

    Upload from any CRM. You get back a standard result file keyed on the address.

  • 02

    Parallel probes

    Built for lists, not one-row-at-a-time scripts.

  • 03

    Catch-all handling

    Catch-all domains are labelled, not silently marked valid.

  • 04

    Deduped input

    Dashboard uploads verify and bill each address once, however often it repeats.

  • 05

    Progress you can see

    Job status in the dashboard, results when the last row finishes.

  • 06

    Same verdicts as live

    Bulk uses the identical pipeline as a single check.

Method

From the file you have to the list you can send.

Upload from the dashboard or submit the job over the API. Either way the same four stages run.

  1. 01

    Upload anything

    CSV, TSV or a plain text file, from any CRM. There is no required column name: every cell is scanned and the addresses are pulled out of it.

  2. 02

    Deduplicate

    In the dashboard, addresses are lowercased and collapsed, so a list that repeats the same contact eleven times is verified once and billed once. Over the API, a job is billed per address you submit, so send each one once.

  3. 03

    Verify in parallel

    Rows run concurrently through the pipeline a single check uses, paced per receiving provider so a large job does not get itself throttled.

  4. 04

    Download the results

    You get a result file keyed on the address, plus a summary of how the list split, and a progress figure you can watch while it runs.

Output

The columns in your result file.

A standard result file rather than your file with columns bolted on, so it imports the same way every time. Join it back to your own data on the address.

ColumnValuesWhat it tells you
emailtextThe address, lowercased and normalised. This is the join key back to your own records.
statussafe | risky | invalid | unknownThe verdict for the row. Four values, and every row lands on exactly one.
sub_statustextThe specific finding behind the status, for example a mailbox that does not exist, a full inbox or a role address.
score0-100The 0 to 100 confidence figure, so you can set a stricter cut than the verdict alone gives you.
catch_alltrue | falseWhether the domain accepts mail for every recipient. Kept as its own column because it is the one class most teams want to segment out rather than delete.
reason_codeslistThe machine-readable signals behind the verdict, so a spreadsheet filter can do what would otherwise need a support ticket.

FAQ

Questions before you send the list

How large a file?

Start from the dashboard. Larger volumes belong on a monthly or PAYG plan.

When are credits taken?

After a successful verification, not on upload.

Can I re-run failures?

Yes. Unknown and throttled rows can be retried without re-checking the rest.

Do my original columns come back?

No, and deliberately. The export is a fixed result file keyed on the address rather than your file with extra columns appended, so it imports identically every time regardless of what you uploaded. Join it to your own records on the address column.

How long does a large list take?

It depends far more on who the recipients are than on how many there are: a list of one provider's mailboxes is paced to that provider's tolerance. Progress is visible from the moment the job starts, so you are never waiting on a spinner with no number attached.

Can I run a bulk job from the API?

Yes. One call submits the list and returns a job id, a second polls it, and a third fetches the rows as JSON or as the same CSV the dashboard downloads. The verdicts are identical to the single endpoint's, because it is the same pipeline.

Upload a list after signup.

100 credits to prove the pipeline. Then pick a volume.