# Manage duplicate contacts

> Prevent and clean up duplicates — the contact identifier key at import, matched-records choices, account import modes including Duplicate, and the contact handling settings.

**Duplicates are prevented at import: the contact identifier you choose, such as Email, Last Name, or Phone, becomes the key, and matched rows are updated or skipped instead of doubled. Review Imported, Updated, Skipped, and Import Errors counts after each import, and use the account import modes and contact handling settings to control overwrites.**

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

## Goal

One record per person, and imports that update rather than multiply.

## Preconditions

Understanding of the [deduplication rule](/behavior/contact-deduplication): the contact
identifier chosen at import — a unique field such as Email, Last Name, or Phone — is the
distinguishing key that prevents duplicates.

## Steps

1. At import, choose the contact identifier deliberately in the drop-down menu. Once a unique identifier is chosen, it keys every row against existing records and the other fields become optional.
2. Choose the **Matched Records** option: **Update Missing Fields** writes new data from the CSV into the existing contact's fields; **Skip** leaves the existing record untouched. Either way, a matched row never creates a second record.
3. After each import, read the result counts: **Skipped** rows are duplicates the system removed during the import; **Updated** rows are existing contacts whose profiles were refreshed. Download the full import result file when a count looks wrong.
4. For account (company) imports, pick one of four modes: **Overwrite existing fields**, **Update missing fields**, **Skip**, or **Duplicate** — the last one deliberately creates a copy of the account with the new data and leaves the original unchanged.
5. In **Settings**, open the **Contact handling** tab (Team Owner only) and set the enrichment behavior for when new information is found: **Keep existing data** preserves current information and skips conflicting new data; **Override with new data** replaces existing fields.
6. On team accounts, decide how shared people are handled: **Pause contact in all sequences on reply** pauses a replying contact everywhere, and **Pause all contacts from the same organization on reply** extends the pause to colleagues — Reply matches the organization by the Company field, falling back to Domain when Company is blank. Both apply to business domains only.

## Expected result

Searches for a person return one record; re-imports report updates and skips, not
creations, for known people. LinkedIn URL variants of one profile do not create duplicates
either — Reply normalizes them to one canonical form; see
[contact deduplication](/behavior/contact-deduplication).

## Verification

Re-run the same import: the summary shows **Updated** and **Skipped** rows and zero new
**Imported** ones.

## Common mistakes

- Expecting records with two different identifier values to merge — a person under two email addresses stays two records; automatic merging is not documented.
- Choosing the account **Duplicate** import mode when you meant **Update missing fields** — Duplicate creates a copy on purpose.
- Treating **Skipped** as an error — it is the dedup rule declining to double a known contact.

## Related

- [Contact deduplication](/behavior/contact-deduplication)
- [Import contacts](/how-to/import-contacts)
- [Contacts](/specifications/contacts)
- [Companies](/specifications/companies)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — create/update semantics and contact lookup
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents search and reconcile records
