Deliverability skill
Bounce triage for cold email
Paste your bounce messages and the assistant sorts them into list problems and sender problems, then tells you which addresses to remove and which mailboxes to stop.
What it does
What the skill checks
- Reads SMTP reply codes and enhanced status codes such as 5.1.1, 5.2.2, 5.7.1 and 5.7.26
- Separates invalid addresses from temporary failures and throttling
- Finds sender-side blocks from Gmail and Microsoft and groups them by mailbox, domain and IP
- Computes the hard bounce rate against emails sent
- Warns when a near-zero bounce rate is not credible
- Returns a removal list and an action per bounce class
Use it when
- When a campaign's bounce rate jumps
- When you export bounces and need to clean the list
- When bounce messages mention blocks, policies or authentication
Example
What you paste and what you get back
40 bounces out of 1,800 sent. 31 say "550 5.1.1 The email account that you tried to reach does not exist". 9 say "550-5.7.1 ... likely unsolicited mail", all from anna@example.com.Hard, invalid address: 31 (1.7% of sent). Remove them. Verify the rest of the list before the next upload.
Sender block, Gmail reputation: 9, all from anna@example.com. Pause this mailbox. Do not retry these sends.
Next: run an inbox placement test from anna@example.com and check its domain's SPF, DKIM, DMARC and blocklists before resuming.
Verdict: a small list problem and one sender problem.Install
Install it in your assistant
The same file works everywhere. Claude and Claude Code load it as a skill; the other assistants follow it as instructions.
Claude Code
- Run the command below. It saves the skill to your personal skills folder, available in every project. For one project only, use .claude/skills in the project instead.
- Start a new Claude Code session. Claude uses the skill when your request matches its description, or when you name it.
mkdir -p ~/.claude/skills/bounce-triage
curl -fsSL https://outreach2day.com/skills/bounce-triage/SKILL.md -o ~/.claude/skills/bounce-triage/SKILL.mdClaude (web and desktop)
- Download the ZIP file.
- In Claude, open Settings, find Skills under Capabilities and upload the ZIP. Skills need code execution to be turned on for your account.
- Ask for the task in any chat. Claude loads the skill when the request matches.
ChatGPT
- Download SKILL.md.
- Paste its text into a Project's instructions or a custom GPT's instructions. For a single chat, attach the file and write: follow the instructions in this file.
Gemini
- Download SKILL.md.
- Create a Gem and paste the file's text into its instructions, or attach the file to a chat and ask Gemini to follow it.
Grok
- Download SKILL.md.
- Paste its text into a Project's instructions, or attach the file to a chat and ask Grok to follow it.
Cursor and other coding agents
- Save the file as a project rule with the command below. Cursor reads the description to decide when to apply it.
- Agents that read AGENTS.md (Codex and others): paste the text into AGENTS.md or reference the file from it.
mkdir -p .cursor/rules
curl -fsSL https://outreach2day.com/skills/bounce-triage/SKILL.md -o .cursor/rules/bounce-triage.mdcSource
The full SKILL.md
Read it before you install it. Change the rules to match your own setup.
---
name: bounce-triage
description: Triages email bounces (NDRs) from cold email campaigns. Reads SMTP reply codes and enhanced status codes, sorts each bounce into hard invalid address, soft or temporary, throttling, and sender-side policy or reputation blocks, and returns the action per class - remove the address, retry, slow down, or stop and fix the sender. Warns when a 0% bounce rate is not credible. Use when the user pastes bounce messages or a bounce export, asks why emails bounce, or sees a bounce rate spike.
---
# Bounce triage
You sort bounces into classes that need different actions. The main mistake to prevent: treating a sender-side block (the receiver refuses you) as a bad address, or the other way round. A list problem is fixed in the list; a sender problem is fixed in the sender, and retrying makes it worse.
## Step 1. Collect
Ask for the raw bounce text (the SMTP reply line), not only the tool's label. Group by recipient provider (Google, Microsoft, other) using the recipient domain's MX. Note the total sent for the same period, so rates can be computed.
## Step 2. Classify each bounce
| Code / text | Class | Action |
|---|---|---|
| 550 5.1.1 user unknown, "address does not exist" | Hard: invalid address | remove, never retry |
| 550 5.1.10 or 5.4.1 "recipient address rejected" (Microsoft) | Hard: invalid address | remove |
| 5.1.2 bad destination domain, no MX | Hard: dead domain | remove the domain's leads |
| 552 5.2.2 mailbox full | Soft | retry once later, remove if it repeats |
| 4.x.x, 421, 450, 451 "try again later", greylisting | Soft / temporary | let the tool retry, no action |
| 421 4.7.0 or 4.7.28 "rate limited", "too many messages" | Throttling | lower per-mailbox volume and spread sends |
| 550 5.7.1 "likely unsolicited mail" (Gmail) | Sender block: reputation or content | stop that sender, fix before resuming |
| 550 5.7.26 "unauthenticated", DMARC fail | Sender block: authentication | fix SPF, DKIM, DMARC alignment |
| 5.7.606 to 5.7.649 "banned sending IP", "S3150" (Microsoft) | Sender block: IP reputation | stop that IP, request delisting from Microsoft after fixing |
| 5.7.1 "blocked using" a list name | Sender block: blocklist | check the list, fix, request removal |
| 5.7.x other policy, "message rejected" | Sender block: policy | read the text, usually content or reputation |
If a code and its text disagree, trust the text.
## Step 3. Compute rates
- Hard bounce rate = hard bounces / emails sent (not leads uploaded).
- Keep hard bounces under about 2% per campaign. Above that, the list needs verification before more sends.
- Any cluster of sender blocks on one mailbox, domain or IP = that sender is the problem, whatever the total rate.
## Step 4. Check that the bounce number is credible
A bounce rate can be wrong in the low direction. If mail goes through a relay or SMTP proxy that accepts every message and handles delivery later, the sending tool sees "accepted" and never learns about failures. Signs:
- 0% or near-0% bounces on a list that has never been verified.
- The same list shows clearly higher bounces when sent from a different provider.
- Replies and auto-replies drop while bounces stay at zero.
When you see these, compare bounce rates for the same list across providers, and use seed or inbox placement tests as the safety check, not the bounce rate alone.
## Output format
1. Table: class, count, share of sent, example line, action.
2. Sender problems first, by mailbox / domain / IP.
3. The list of addresses to remove (hard bounces), as a plain list or CSV.
4. One paragraph: is this a list problem, a sender problem, or both.
## Rules
- Never recommend retrying a 5.7.x block. Retries to a provider that already blocks you deepen the block.
- Do not count soft bounces as invalid addresses on the first occurrence.
- Do not guess the class from the tool's label ("bounced") alone. Ask for the SMTP text.
## Example
Input: 40 bounces from 1,800 sent. 31 are "550 5.1.1 The email account that you tried to reach does not exist", 9 are "550-5.7.1 ... likely unsolicited mail", all 9 from mailbox anna@example.com.
Output (abridged): Hard invalid 31 (1.7% of sent): remove, verify the rest of the list before the next upload. Sender block 9, all from anna@example.com: pause this mailbox, run an inbox placement test from it, check its domain's authentication and blocklists before resuming.
FAQ
Questions
What is the difference between a hard and a soft bounce?
A hard bounce is permanent, such as 5.1.1 user unknown: remove the address. A soft bounce is temporary, such as a full mailbox or a 4xx try-again-later: the sending tool retries it.
What does 550 5.7.1 mean in cold email?
The receiving server refused the message because of the sender, usually reputation, content or a blocklist. The address is probably fine. Stop sending from that mailbox and fix the sender before retrying.
What bounce rate is acceptable for cold email?
Keep hard bounces under about 2% of emails sent. Above that, verify the list before sending more. A rate of exactly zero on an unverified list is a reason to check that bounces are being reported at all.
Mailboxes, warm-up and sending in one place
$2.50 a mailbox a month. DNS records are set for you, and every mailbox shows its warm-up numbers from day one.