# Build a prospect list

> Assemble a clean outreach list from CSV imports, search results, and manual adds — identifier-based dedup, import statuses, email validation, blacklisting, and list segmentation.

**Assemble one clean list from CSV imports, search results, and manual adds. Choose a contact identifier at import so duplicates update or skip instead of doubling, validate emails before launch, and blacklist unwanted contacts or domains. A contact can belong to several lists, and lists can split into 2, 3, or 4 for testing.**

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

## At a glance

| Aspect | Detail |
| --- | --- |
| **Outcome** | One deduplicated, validated list assembled from all your sources, segmented and ready to enroll |
| **Required objects** | Source data (CSV files, search results, or manual entries), a destination [list](/specifications/lists) |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Up to 10,000 rows per CSV file; First Name is mandatory; dedup keys on the identifier you choose at import |
| **Stops on** | A non-CSV file (xlsx is rejected), missing mandatory fields, or symbols in numeric fields — those rows become Import Errors |
| **Does not** | Supply the source data or decide segmentation; merge records that differ on the chosen identifier — see [contact deduplication](/behavior/contact-deduplication) |
| **Plans** | Plan-specific differences are not documented for this workflow |

## Goal

One [list](/specifications/lists) of clean, deduplicated, validated
[contacts](/specifications/contacts) assembled from whatever sources you have — with
invalid addresses flagged and unwanted contacts and domains blacklisted before anything
sends.

## When to use this workflow

Your prospects come from several places — a conference CSV, a
[prospect search](/workflows/find-prospects-from-an-icp), manual research — and outreach
needs one coherent, segmentable target.

## What Reply provides

CSV import with field mapping (standard and custom fields, automatic LinkedIn column
detection), identifier-based [deduplication](/behavior/contact-deduplication) with
Imported / Updated / Skipped / Errors reporting, lists that overlap freely (one contact,
many lists), list-level Opens, Replies, and Opt-outs tracking, 2-4-way list splitting for
testing, [email validation](/capabilities/data-enrichment), and contact- and domain-level
blacklisting.

## What you must provide

The source data and the segmentation logic — what belongs on this list, and how it splits
when messaging will differ.

## Flow

```text
CSV files ─┐
Search    ─┼→ import with identifier dedup → Imported / Updated / Skipped / Errors
Manual    ─┘        → validate emails → blacklist exclusions
                    → one list → move / split / share
```

## Step-by-step

1. **Create the list.** In the Lists section of the Contacts page, click the plus button, name the list, and click **Create** — or select a list directly in the Import Contacts dialog so the upload lands there.
2. **Import the CSV.** The file must be CSV UTF-8 (xlsx and other formats are rejected), up to 10,000 rows, with First Name filled — it is required. Map columns to Reply fields, including custom fields; LinkedIn columns are detected and mapped to the LinkedIn profile field automatically, and you can override any mapping from the dropdown.
3. **Choose the identifier and duplicate handling.** Pick a unique identifier (Email, Last Name, or Phone) — it becomes the distinguishing key that prevents duplicates, and other fields become optional. For matched records, choose **Update Missing Fields** (overwrite existing contact fields with CSV data) or **Skip** (leave existing records untouched). For records without emails, choose **Add Generated Emails** — a placeholder genmail.com address; these contacts are skipped by email steps but work for SMS, WhatsApp, calls, and LinkedIn — or **Skip**. Optionally enable automatic timezone detection from city/state and country (may extend the import by up to 30 minutes).
4. **Read the import results.** The notification breaks the upload into **Imported** (new contacts), **Updated** (existing profiles refreshed), **Skipped** (duplicates removed during import), and **Import Errors** (missing mandatory fields or bad formats, such as symbols in the Phone field). Download the full import result file when a number surprises you.
5. **Land other sources on the same list.** Point a [Live Search](/workflows/find-prospects-from-an-icp) at the list, or select contacts on the People grid and use **Move to lists**.
6. **Validate emails.** Select contacts on the People page and click **Validate emails** — one batch at a time. Reply will not send emails to contacts marked Invalid; a contact with Invalid status can still be moved into a sequence that currently has no email steps.
7. **Blacklist what must never be contacted.** Select a contact → **More → Blacklist** to block one person, or **Blacklist domain** to block everyone at that company domain. Blacklisted contacts show a black dot and will not receive your emails even if moved into a sequence. Bulk-add domains under Settings → Blacklist, manually or via CSV, in the format `domain.com` (no http:// or www).
8. **Segment.** The same contact can sit in multiple lists, so build overlapping views freely — by owner, persona, or campaign. Split a selection between 2, 3, or 4 lists for testing. Each list reports Opens, Replies, and Opt-outs for its contacts, and lists can be renamed, shared with teammates, or deleted.
9. **Push a whole file into a sequence when needed.** Importing directly into a sequence skips contacts that are already in another sequence. To move everyone: import into a list, open it, choose **All in list**, and click **Move to sequence** — or filter the People page by the **Import File Name** smart filter and move the result. Both paths include contacts currently in other active sequences.

## Failure conditions

- **Wrong file format** — only CSV UTF-8 imports; xlsx and other formats fail
- **Missing First Name** or symbols/spaces in numeric fields — the row lands in Import Errors
- **Contacts silently missing from a sequence import** — they were already in another sequence; use the list or Import File Name paths in step 9
- **Duplicate surprises** — check which identifier was chosen and the matched-records option; see [Manage duplicate contacts](/how-to/manage-duplicates)

## Verification

List count matches Imported + Updated from the import results; a validation pass marks
most addresses valid; blacklisted records show the black dot; spot-checks look like the
ICP.

## Limits

- Up to 10,000 rows (contacts) per CSV file; CSV UTF-8 format only
- First Name is mandatory; numeric fields accept digits only
- Identifier choices: a unique field such as Email, Last Name, or Phone
- Email validation runs one batch at a time; Reply does not email Invalid contacts
- Automatic timezone detection may extend an import by up to 30 minutes
- A selection can be split between 2, 3, or 4 lists
- Blacklist domain format: `domain.com` — without http:// or www

## Related

- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) — filling the list from search
- [Lists](/specifications/lists) · [Contacts](/specifications/contacts)
- [Import contacts](/how-to/import-contacts) · [Manage duplicate contacts](/how-to/manage-duplicates)
- [Contact deduplication](/behavior/contact-deduplication) — the exact matching rule

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — lists and contact endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — import-prospects workflow
