# Why were contacts not imported?

> Contacts are missing after a CSV import: matched-record settings, field formats, contacts without emails, and how to read the import result notification.

**Most missing contacts were not lost; they were skipped or rejected, and the import result notification says which. The two most common causes are contacts that already exist in your account, skipped unless you choose Update Missing Fields, and values that do not fit their mapped field.**

_Status: Reviewed – written against Reply's product documentation on 2026-09-21, not yet confirmed against the running product._

## Quick fix

1. Open the notification center and find the import result. It reports four numbers: **Imported**, **Updated**, **Skipped** and **Import Errors**.
2. If contacts landed in **Skipped**, re-import the same file and set **Matched Records** to **Update Missing Fields**.
3. If you are importing into a sequence and the contacts are already in another one, choose **Move to this one** or **Add to this one and keep in current** – otherwise contacts already in a sequence are left where they are.
4. If contacts landed in **Import Errors**, check the columns named in the result against the field each was mapped to, fix the formatting, and re-import only those rows.
5. Confirm the count in **People → Contacts** matches what you expected.

Didn't work? [Contact Reply support](https://support.reply.io/); the team can check your account directly.

## Symptom

You uploaded a CSV and the contact count does not match the file. Sometimes none appear at all. The import dialog may have stayed open for several minutes, or you closed it unsure whether the import survived. The contacts may be missing from the sequence, from **People → Contacts**, or from both.

## Most likely causes

| Cause | How to recognize it |
| --- | --- |
| The contacts already exist, and **Matched Records** was set to **Skip** | The result shows a high **Skipped** count and a low **Imported** count |
| The contacts already exist **in another sequence**, and no move option was chosen | Contacts are present in **People → Contacts** but did not join the target sequence |
| A value does not fit its mapped field – most often a phone number containing `+`, spaces or `-` in a Number-type custom field | The result shows **Import Errors**, and the affected column is a phone or other custom field |
| The contacts have no email address and **Records Without Emails** was set to **Skip** | Common with LinkedIn exports; **Skipped** roughly matches the rows with an empty email column |
| The import is still running | The dialog stays open, and no result notification has arrived yet |
| The file was rejected before import | No result notification arrives at all. Exports often carry thousands of empty trailing columns that inflate the file far beyond its visible content |
| Nothing imported at all, and you chose **LinkedIn Profile URL** as the contact identifier | No contacts were added or updated, and the file contains people who are already in your account |
| Fewer contacts entered the sequence than were imported | The import succeeded, but the sequence adds contacts gradually – see [Limits](/reference/limits/) |

## Diagnostic checklist

1. **Read the result notification first.** It separates **Imported**, **Updated**, **Skipped** and **Import Errors**. Skipped means the contact already existed; Import Errors means a row was rejected.
2. **Check whether the contacts exist at all.** Search two or three in **People → Contacts**. If they are there, the problem is sequence assignment, not the import.
3. **Compare Skipped against your existing contacts.** A Skipped count close to your overlap points at the **Matched Records** setting.
4. **Compare Import Errors against your phone and custom-field columns.** Values containing `+`, spaces or `-` cannot go into a Number field.
5. **Count rows with an empty email column.** If that matches Skipped, the **Records Without Emails** setting is the cause.
6. **If no notification ever arrived**, the file did not reach import. Check the CSV for empty trailing columns and check the row count: a single import accepts up to **100,000 rows**.

## Resolution

### Contacts already exist and were skipped

Re-import the same file and set **Matched Records** to **Update Missing Fields**. Existing contacts are then updated instead of skipped. Choose **Skip** only when you want to leave existing contact data untouched.

### Contacts exist but did not join the sequence

When you import directly into a sequence, contacts already in another sequence are left alone by default. Re-import and choose **Move to this one**, or **Add to this one and keep in current** to have them run in both.

### A column was rejected

Change the destination field's type to Text, re-map the column, and import those rows again. This is the usual fix for phone numbers: `+1 555 0100` is not a number, so a Number field rejects the row.

### Contacts have no email address

Set **Records Without Emails** to **Add Generated Emails**. Reply assigns a placeholder address so the contacts import. They are skipped by email steps but work normally in LinkedIn, call, SMS and WhatsApp steps.

### The dialog is still open

Close it. The import continues in the background and notifies you when it finishes. **Detect contact time zone automatically** can add up to 30 minutes to a large import.

### Nothing imported at all, with LinkedIn Profile URL as the identifier

If you chose **LinkedIn Profile URL** as the contact identifier and the file contains a contact whose email address already belongs to someone in your account, the import can stop without importing anything.

Re-import with **Email** as the contact identifier, or remove those already-existing contacts from the file and import the rest.

### The file was never accepted

Delete empty trailing columns: exports frequently add thousands, and they count toward the file's size even though they hold no data. If it is still rejected, split the file. A single import accepts up to **100,000 rows**.

## Verification

Re-open the notification center: **Imported** plus **Updated** should account for the rows you expected. Then confirm the contacts appear in **People → Contacts**, and (if you imported into a sequence) on the sequence's **People** tab.

## Prevention

- Choose a contact identifier that is filled in and unique for every row. It is what matches a row to an existing contact, so a good one prevents both duplicates and unexpected skips. **Email** is the most reliable choice when your contacts have email addresses.
- Keep phone numbers and other punctuation-bearing values in Text fields.
- Clean exported files first: remove empty columns, and confirm the email column is populated.
- Set **Matched Records** and **Records Without Emails** deliberately on every import rather than accepting the defaults.

## FAQ

### What does Skipped mean in the import results?

Skipped means Reply matched the row to a contact you already have and left it unchanged. It is not an error. Re-import with **Matched Records** set to **Update Missing Fields** if you wanted those contacts updated.

### Where do I see what happened to each row?

In the notification center; the import result reports **Imported**, **Updated**, **Skipped** and **Import Errors** for the whole file.

## Still stuck? Contact Reply support

If these steps didn't solve the problem, the Reply support team can look at your
account directly. Open the [Reply Help Center](https://support.reply.io/) and send
the team a message.

To get an answer faster, include:

- the four counts from the import result notification
- which contact identifier and which **Matched Records** option you chose
- roughly when you ran the import, and your timezone

Don't send passwords, API keys, or access tokens.

## Related

- [Import contacts](/how-to/import-contacts/) – the full import procedure
- [Limits](/reference/limits/) – import size and sending limits
- [Why was a contact not enrolled?](/troubleshooting/contact-was-not-enrolled/) – the contact imported but never started the sequence

## Build with Reply

- REST API: [Import contacts](https://docs.reply.io/api-reference/contacts/import-contacts) – import contacts programmatically, up to 1,000 per request
- MCP: [docs.reply.io/mcp](https://docs.reply.io/mcp/overview) – import and update contacts from an AI assistant
