Playbooks
Playbook Reviewed · not yet fact-checked
In short
How do I safely email a database that has gone cold?
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.
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, and import segment by segment into 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 | Sends on launch | Permission-style reopener: acknowledge the silence, offer an easy out | |
| 2 | 2 days after step 1 | One useful thing — a resource or insight, no ask | |
| 3 | 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 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 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
- Export and pre-clean the database — drop role addresses, prior hard bounces, and unsubscribes before anything enters Reply.
- Import contacts segment by segment and manage duplicates on the way in — see contact deduplication.
- 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.
- Refresh stale fields with data enrichment, then create the sequence with the three steps above and launch to the freshest segment first.
- Watch bounce handling, remove Bounced contacts from the sequence's People tab, process replies daily, and prune everything that stays silent.
Related
- Email deliverability
- Bounce handling
- Reactivate closed-lost pipeline — the deal-level version of this play
- Contact management
- Prospect data
Build with Reply
- REST API: docs.reply.io — bulk contact import and list management
- MCP: agents.reply.io/mcp — agents filter, segment, and enroll contacts
- CLI: agents.reply.io/cli — scripted import and cleanup runs
- Agent skills: agents.reply.io/skills — packaged list-hygiene and outreach workflows