# Why did my CSV import fail or skip rows?

What each CSV import status means, why rows get skipped (missing or invalid email), and how to fix a file and re-run the import.

A CSV import fails outright only for a few file-level problems — no email column, an empty file, or one over the size limit. Individual rows get skipped separately, usually because a row has no email address or the address doesn't pass validation. Fix the file and re-run the import from **People** → **Import**.

## What do the import status states mean?

A status card tracks your upload — inside the **Add leads** dialog, and then, if you close it, as a small card that follows you around the app:

- **Importing your CSV** — a live progress bar. Loop keeps going in the background.
- **Import complete** — a toast shows how many people were imported; in the wizard, the list attaches to your loop automatically.
- **Import didn't finish** — the job failed. Go to **People** → **Import** and upload the file again.

## Why did the whole file fail?

- **No email column found** — Loop looks for a header like `email` or `email_address`. If none matches, pick the right column from the dropdown on the confirm step.
- **File looks empty** — it needs a header row plus at least one row of data.
- **File over the limit** — over 5 MB, or more than 5,000 rows, needs splitting into smaller batches.
- **Bulk import temporarily unavailable** — a server-side issue, not your file. Try again shortly.
- **Session expired** — refresh, sign in again, and retry.

## Why did individual rows get skipped?

Loop checks the email in every row, sorting them into three groups shown on the confirm step:

1. **Look good** — imported as-is.
2. **Probable typo domain** (e.g. `gnial.com`) — choose to auto-correct and import, or drop these.
3. **Invalid or disposable** — skipped: blank, invalid format, disposable/fake domain, role address (`noreply@`), placeholder (`test@`, `sample@`), typo TLD (`.con`), or a test domain (`example.com`).

Invalid addresses can hurt your sender reputation for about 30 days, which is why Loop screens them out before import. A duplicate email isn't skipped — it's linked to the existing person.

## How do I re-run an import?

1. Go to **People** → **Import**, choose **Upload CSV**, and upload your file again.
2. Review the clean/typo/invalid counts on the confirm step.
3. If a column wasn't detected, pick it from the **Email column** dropdown.
4. Choose **Import clean (drop typos)**, or include typo-fixed rows, then confirm.

If a previous import shows **Import didn't finish**, follow the steps above to upload the file again from **People** → **Import**.
