# Re-engage a cold contact database

> A play for a CRM full of contacts untouched for a year or more — validate every address into Valid, Risky, or Invalid, keep Risky under 20% of the send, reopen with a permission-style message, and prune whoever stays silent.

**Clean before you send. Validate every address so Valid, Risky, and Invalid statuses are known, keep Risky under 20 percent of the send, and let Reply exclude Invalid addresses automatically. Reopen with a permission-style message that acknowledges the silence, then prune whoever stays silent after a couple of follow-ups instead of pushing harder.**

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

## Situation

Your CRM holds thousands of contacts nobody has emailed in 12+ months — old leads, event
lists, past evaluations. The data has decayed: people changed jobs, mailboxes were
retired, context evaporated. Sending to it as-is would spike bounces and damage sender
reputation; ignoring it wastes the cheapest pipeline you have.

## Who this is for

| **Role** | Marketing, RevOps, or sales ops owner of the database |
| **Company size** | Any — the play scales with list size |
| **Motion** | An existing database with inbound or outbound history |
| **Prerequisite** | A legitimate basis to email these contacts, and export access to the CRM |

## The play

### 1. Targeting

Hygiene before anything else. Export the database, drop role addresses (info@, sales@),
prior hard bounces, and unsubscribes, then run Reply's email validation on everything that
remains: on the People page, select the contacts and click **Validate emails** (one batch
at a time). Validation sorts addresses into `Valid`, `Risky`, and `Invalid`. Valid is safe
to sequence. Risky means the mail server says the recipient exists but the send may still
bounce — catch-all domains, disposable-address providers, honeypots — so treat Risky as
valid but keep it to no more than 20% of what you send to avoid high bounce rates.
Invalid contacts do not receive sequence emails at all. Segment by last-touch context
(demo request, event scan, newsletter signup), refresh titles and companies with
[data enrichment](/capabilities/data-enrichment), and import segment by segment into
[lists](/specifications/lists).

### 2. Sequence structure

Reply pre-fills the delay between steps — 0 days before the first step, then 2 and 4 days
for the next positions (weekends count; one day of delay is 24 hours). Stretch the delays
in the step editor if you want the three touches spread across two weeks instead of one.

| Step | Channel | Default delay | Purpose |
| --- | --- | --- | --- |
| 1 | Email | Sends on launch | Permission-style reopener: acknowledge the silence, offer an easy out |
| 2 | Email | 2 days after step 1 | One useful thing — a resource or insight, no ask |
| 3 | Email | 4 days after step 2 | Direct question tied to their original context |

Three touches, then out. This play deliberately has no long tail: contacts who stay silent
leave the list, not the sequence queue.

### 3. Messaging angles

- Acknowledge the gap — "we spoke a while back and then went quiet" beats pretending continuity
- Permission framing: asking whether you may reach out again is a documented follow-up practice — make "no" a one-word reply, and honor it permanently
- Anchor to the original context — the demo they requested, the event where you met — and give each touch a concrete reason to exist
- No product dump; a cold database needs a reason to re-open the relationship, not a feature list
- When a prospect keeps ignoring you, leave them alone — Reply's guidance is to send the breakup after a couple of follow-ups, when you really mean it; its documented example subject line is "Permission to Close Your Account?"

### 4. Timing and cadence

Start with the freshest, highest-intent segment and ramp outward only if bounce rates stay
acceptable — a stale list is exactly the kind of traffic
[bounce handling](/behavior/bounce-handling) exists for: Reply warns at a 4% sequence
bounce rate and stops the sending step at 8%. Keep daily volume well inside warmed
limits, because to receiving providers this looks like new sending behavior. Sequences
stop emailing `Bounced` contacts automatically; clear them out afterward from the
sequence's People tab — open the **Bounced** category and click **Remove from Sequence**
— and drop them from the database.

### 5. Handling replies

Interested replies route to sales the same day. "Not interested" and opt-outs go to a
permanent suppression list — recycling them into the next import is how databases earn
spam reports. If several segments run in parallel, a Team Owner can enable **Pause
contact in all sequences on reply** (and optionally the same-organization pause) under
Settings → Contact handling, so one reply halts every parallel thread; both options are
off by default and apply to business domains only. Silent after three touches means
pruned — though contacts who kept opening without replying are the documented retargeting
cohort: filter by number of email views and move them to a re-nurturing sequence with
fresh content, call them, or connect on social.
[Reply classification](/learn/reply-classification) sorts the queue.

## Templates

The template below is an illustrative example, not a sourced product template.
Double-brace placeholders are Reply variables; nonstandard ones like
`{{OriginalContext}}` must exist as custom fields before launch.

```
Subject: still the right person for {{Topic}}?

Hi {{FirstName}},

We last talked to {{Company}} back when you were looking at
{{OriginalContext}} — and then we did a poor job of staying in touch.
That's on us.

If {{Topic}} is still on your plate, I'd be glad to share what's changed
since. If not, reply "no" and I won't email again.

{{SenderName}}
```

## Expected results

| Metric | What to expect | Conditions |
| --- | --- | --- |
| Bounce rate after cleaning | Validation exists to keep this low: hold Risky under 20% of the send and stay clear of the 4% warning and 8% stop thresholds | Depends entirely on validation quality |
| Reply rate | Results depend on list quality and offer — Reply does not publish benchmark rates | Fresher, higher-intent segments respond measurably better |
| List shrinkage | Expect the database to end much smaller — that is the goal | Pruning non-responders is part of the play, not a failure |

## Common mistakes

- Emailing the raw export without validation and letting bounces burn the domain
- Sending Risky-heavy segments — more than 20% Risky addresses invites the bounce thresholds
- Sending to the entire database in week one instead of ramping segment by segment
- Pretending the relationship is current instead of acknowledging the gap
- Keeping silent contacts enrolled past three touches "just in case"
- Skipping suppression hygiene, so opted-out contacts resurface in the next import

## Build this in Reply

1. Export and pre-clean the database — drop role addresses, prior hard bounces, and unsubscribes before anything enters Reply.
2. [Import contacts](/how-to/import-contacts) segment by segment and [manage duplicates](/how-to/manage-duplicates) on the way in — see [contact deduplication](/behavior/contact-deduplication).
3. Validate every segment on the People page (**Validate emails**, one batch at a time); plan sends so Risky stays under 20%, and let Reply exclude Invalid addresses automatically.
4. Refresh stale fields with [data enrichment](/capabilities/data-enrichment), then [create the sequence](/how-to/create-a-sequence) with the three steps above and [launch](/how-to/launch-a-sequence) to the freshest segment first.
5. Watch [bounce handling](/behavior/bounce-handling), remove Bounced contacts from the sequence's People tab, [process replies](/how-to/process-replies) daily, and prune everything that stays silent.

## Related

- [Email deliverability](/learn/email-deliverability)
- [Bounce handling](/behavior/bounce-handling)
- [Reactivate closed-lost pipeline](/playbooks/reactivate-closed-lost-pipeline) — the deal-level version of this play
- [Contact management](/capabilities/contact-management)
- [Prospect data](/specifications/prospect-data)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — bulk contact import and list management
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents filter, segment, and enroll contacts
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted import and cleanup runs
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — packaged list-hygiene and outreach workflows
