Skip to content

Bulk import applicants from a CSV

The bulk import verifies many applicants in one upload. You provide a CSV with one applicant per row; the platform validates, dedupes, debits your wallet, and starts a verification per row.

You need:

  • An active organization (the import is scoped to whichever organization you have selected).
  • At least one workflow template, or pick a default at upload time.
  • The Owner or Admin role.
  • Enough wallet balance to cover every row in the CSV. The platform pre-checks before the import starts; failed pre-check rejects the upload.

Download the canonical template from the New bulk import page, or use your own spreadsheet as long as it has these columns. One row per applicant. Columns:

  • email: applicant’s email (required).
  • workflow_id: per-row override of the page’s default workflow (optional; format wt_<uuid>). Find the id on each workflow’s page under Workflows, where it’s shown as a copyable wt_… value.
  • phone: applicant’s phone number in E.164 format (optional).
  • reference_label: internal label to find this applicant in your dashboard (optional). Not shown to the applicant.
  • reference_type: categorization tag, e.g. rental_application (optional).
  • reference_id: your external system’s identifier for this applicant (optional).
  • send_invite: whether to email this applicant their verification invite once they’re added (optional; true/false, also accepts yes/no/1/0, any case). When the cell is blank, the upload form’s Auto-send invite emails setting applies.

Static validation is strict: any malformed row rejects the whole CSV. You download the validation errors, fix, and re-upload.

Spreadsheet editors often rewrite a lowercase false as FALSE; the send_invite column is case-insensitive, so either is accepted.

  • 2,000 rows per upload.
  • 5 MB (5 MiB) file size.
  • 5 concurrent in-flight imports per organization.

Re-uploading the same file within 24 hours is flagged as a duplicate. You can confirm to proceed anyway, or open the earlier import instead.

The detail page shows live progress with per-row counters. When the import finishes you can:

  • Download a results CSV with each row’s outcome (succeeded / failed), verification ID, and applicant URL.
  • Jump to the filtered applicants list for the applicants added by this import.
  • Correct any failed rows and upload them as a new import: copy the failed rows from the results CSV into a fresh file.

Canceling an in-flight import stops new rows from dispatching; rows already in flight finish on their own. Rows that had not started yet are recorded as failed (reason: canceled) in the results CSV.