# Why was a contact not enrolled?

> A contact never made it into the sequence — import skips and errors, the Opted Out block, keep-in-sequence options, and the states that leave an enrolled contact idle.

**The import may have skipped the row (duplicate) or rejected it (missing First Name, bad numeric format), the contact may be Opted Out — the one status that blocks moving to another sequence — or they were left in their current sequences because no keep option was chosen. Check the import results notification first, then the contact's statuses.**

_Status: Reviewed — human-edited, facts not yet confirmed against the product._

## Symptom

You imported, added, or moved a contact toward a sequence, but they do not appear in its
People tab — or they appear but never start. The checks that exclude contacts mostly run
silently, so the trail is in the import results, the contact's statuses, and the sequence
toggle.

## Most likely causes

| # | Cause | Where to see it |
| --- | --- | --- |
| 1 | The import skipped or rejected the row — **Skipped** are duplicates the system removed during the import; **Import Errors** are rows with missing mandatory fields (First Name is required) or incorrect formats, such as symbols in a numeric field | The import results notification and the full import result file |
| 2 | The contact has no email address and the import was set to **Skip** records without emails — or got a generated placeholder address, which email sequences skip | The import options chosen; the contact's email field |
| 3 | The contact is **Opted Out** — the only status retained outside sequences; a contact with it cannot be moved to a different sequence | The contact's statuses — [Statuses](/reference/statuses) |
| 4 | The contact stayed in their current sequence because no keep option was chosen — each add path has an explicit option for contacts already in a sequence | The add dialog — [Contact enrollment](/behavior/contact-enrollment) |
| 5 | Enrolled but idle: the contact has the **Missing data** status — an empty template variable, a missing or invalid LinkedIn URL, an invalid phone number, or an AI variable that includes an empty variable | Red toggle notification; the sequence Preview tab |
| 6 | Enrolled but idle: no sending email account is assigned to the contact | An error notification over the toggle — [Mailbox selection](/behavior/mailbox-selection) |
| 7 | Enrolled but paused: a team-level contact handling setting paused them after a reply in another sequence or from a colleague at the same organization | Settings, Contact handling — [Contact enrollment](/behavior/contact-enrollment) |

## Diagnostic checklist

1. Read the import results notification: Imported, Updated, Skipped, and Import Errors each count different outcomes. If unsure, upload the full import result file and check the per-row details.
2. Confirm the file met the requirements: CSV UTF-8 format, up to 10,000 rows, First Name filled, and digits only in numeric fields.
3. Search for the contact on the People page. If they exist, open their statuses — Opted Out blocks any move to another sequence.
4. Check whether they are in another sequence and which option was used: *Add to this one and keep in current* (CSV import), *Keep contacts in their current sequences and add to new one* (Add from existing), or the *Keep in other sequences* toggle (Move to sequence).
5. If the contact is in the sequence but idle, open the **Preview** tab and hover over the red icon to see which variable is missing; also filter the People tab for Unassigned to catch contacts without a sending email.

## Resolution

Import errors — fix the rows (fill First Name, strip symbols from numeric fields) and
re-import. Skipped duplicates — nothing to do; the contact already exists, and the
matched-records option you chose decided whether their profile was updated. Opted Out —
respect it; that is compliance working, and the status can only be removed manually and
deliberately. Wrong keep option — repeat the add with the keep-in-current option enabled;
a prospect can be part of several sequences for the same user at the same time. Missing
data — add the data to the contact's field, remove the variable from the step, fill the
field in the Preview tab, or upload a CSV with the missing data; once the fields are
filled, Reply reactivates the contacts automatically (if the status remains, change it to
Active manually). Unassigned contacts — filter the People tab for Unassigned, select them,
and link a sending email.

## Verification

The contact appears in the sequence's People tab with the Active status and a sending
email assigned, and their Current step shows where they will start. After fixing missing
data, confirm the Missing data status cleared — automatically or after your manual change
— and restart the sequence by turning the toggle off and on to apply changes faster.

## Prevention

Prepare imports to the requirements — CSV UTF-8, First Name filled, digits-only numeric
fields — and choose a unique contact identifier (Email, Last Name, or Phone) so duplicate
handling is deliberate; see [Import contacts](/how-to/import-contacts) and
[Contact deduplication](/behavior/contact-deduplication). Check the Preview tab for
missing variables before launching, and treat import skips as information rather than
noise.

## FAQ

### Are Skipped rows in the import summary errors?

No. Skipped counts duplicates the system removed during the import — the contact already
existed. Import Errors are the real failures: records with missing mandatory fields or
incorrect field formats, such as symbols in the Phone field. The full import result file
shows which is which per row.

### Why can't I add an opted-out contact to a new sequence?

Opted Out is the only status retained for a contact even outside sequences, and a contact
with this status cannot be moved to a different sequence. It can be removed manually — but
do that only when the contact has genuinely re-consented. See
[Status transitions](/behavior/status-transitions).

### The contact is enrolled but never started — same problem?

Different rule. Enrollment succeeded; execution is waiting on something — Missing data, an
unassigned sending email, a closed schedule, or a limit. Work through
[Why was an email not sent?](/troubleshooting/email-was-not-sent) and
[Sequence execution](/behavior/sequence-execution).

## Related

- [Contact enrollment](/behavior/contact-enrollment) — the three add paths and their options
- [Contact deduplication](/behavior/contact-deduplication) — why a row counts as a duplicate
- [Import contacts](/how-to/import-contacts)
- [Contacts](/specifications/contacts)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact and sequence-membership operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents check contact state before enrolling
