Skip to main content

Import History console

Every CSV contact import that runs in Orbit leaves a job row behind — one per upload, newest first. Audience → Imports is the operator console for those rows: it answers “which imports landed, what did they skip, and is one still running” without re-running the wizard. Use it as the archive companion to the import wizard itself (Audience → Import) — the wizard runs one file, this page tracks every run. The console lists jobs from GET /api/v1/contacts/import-jobs, the same endpoint powering the wizard’s “recent imports” banner; nothing here is privileged over the API.

1. What each row shows

Each job row carries:
  • Status — one of Running, Cancelled, Failed, or Completed. The status comes from the job’s terminal lifecycle record, and a counters fallback covers rows whose lifecycle record is no longer joined.
  • When — the timestamp the import finished, rendered in your configured timezone (for in-flight jobs, when it started).
  • Imported / Skipped / Total — the per-job counters. Imported rows became contacts; skipped rows failed validation; total is the file’s row count. A job that never finished shows Imported + Skipped < Total.
Use the status filter above the list to narrow the loaded pages to a single lifecycle state. The filter is derived in the browser (the jobs endpoint has no status parameter), so while more pages exist it covers only the rows loaded so far — the page flags that scope with a notice; load more to widen it.

2. Download the skipped rows and re-import them

A job with Skipped > 0 offers a Skipped CSV button. It downloads GET /api/v1/contacts/import-jobs/{id}/skipped.csv — one row per rejected input row, with the original columns plus the row index and a human-readable reason (unparseable phone, missing phone/email, a custom-field value that failed validation, a duplicate inside the file). The remediation loop:
  1. Download the skipped CSV.
  2. Fix the cause class in those rows — reformat the phone, add the missing address, correct the custom-field value.
  3. Start a new import with just the fixed file (Audience → Import, or POST /api/v1/contacts/imports). There is no way to mutate the original upload in place; a remediated file is always a new job.
Idempotency keeps this safe: re-importing the fixed subset merges or skips by phone/email exactly as the original run would have, so you never fork a duplicate contact.

3. Resume an in-flight job

A job still Running offers a View running job link. It opens the import wizard with the job id in the URL (?resume=<job_id>), which jumps the wizard straight to its progress step — the file is not re-uploaded and field mapping is not redone; you land on the live progress view for that job. The resume parameter is stripped from the URL after the jump so a later back-navigation does not replay it. If someone already requested cancellation, the link renders disabled — the job is stopping and re-entering it would mislead. Cancel and rollback are also available here, behind explicit confirmations:
  • Cancel stops the in-flight job immediately. Rows already written before the abort stay imported, so you can be left with a partially-imported contact set.
  • Roll back import is offered for a completed job within its 24-hour rollback window and hard-deletes the contacts that job created, along with their list/segment membership, scores, and consent records.
The semantics of both operations — and the error codes when a job has already moved past you — live in troubleshooting: contact imports.

4. Role access and retention

  • Who sees it. The console sits under the Audience nav group, which is visible to owner, admin, and developer roles. Reading the list needs contacts:read; running a new import from it (or cancelling/rolling back one) needs contacts:write.
  • How long rows persist. Job rows persist in the tenant with no automatic expiry: the history is the archive, and an old row stays downloadable (counters, skipped CSV) until someone deletes it or the tenant is reaped. Rows are listed newest-first and cursor-paginated, so a long history never loads at once — use Load more to page back.

5. Authoring-side guides

This page is the operations half — the guides below are the authoring half:

See also