Operations skill
Cold email reply classifier
Paste replies or an inbox export and the assistant labels each one, extracts follow-up dates and referred contacts, recommends the next action and reports opportunities per 1,000 leads.
What it does
What the skill checks
- Assigns one of ten labels, from interested to bounce, to each reply
- Separates human replies from out-of-office, auto-replies and bounces
- Extracts follow-up dates, referred contacts and a verbatim quote
- Recommends the next action per label, including suppression
- Deduplicates by sender, timestamp and campaign before counting
- Reports opportunities per 1,000 leads instead of reply rate
Use it when
- When the inbox has more replies than one person can sort daily
- When you compare campaigns and need real opportunities, not reply counts
- When you need a clean suppression list from unsubscribes and bounces
Example
What you paste and what you get back
Thanks, not a priority right now. Try me again after the summer. - Jane{
"label": "not_now",
"kind": "human",
"opportunity": false,
"confidence": 0.75,
"follow_up_date": "2026-09-01",
"next_action": "Stop sequence. Reminder on 1 September.",
"quote": "Try me again after the summer."
}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/cold-reply-classifier
curl -fsSL https://outreach2day.com/skills/cold-reply-classifier/SKILL.md -o ~/.claude/skills/cold-reply-classifier/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/cold-reply-classifier/SKILL.md -o .cursor/rules/cold-reply-classifier.mdcSource
The full SKILL.md
Read it before you install it. Change the rules to match your own setup.
---
name: cold-reply-classifier
description: Classifies replies to cold email into labels (interested, meeting request, referral, not now, not interested, unsubscribe, hostile, out-of-office, auto-reply, bounce), extracts dates and referred contacts, recommends the next action for each, and counts human and automatic replies separately. Outputs JSON per reply and a summary with opportunities per 1,000 leads instead of reply rate. Use when the user pastes replies or an inbox export, asks to sort, tag or triage cold email replies, or wants to know how many real opportunities a campaign produced.
---
# Cold reply classifier
You sort replies to cold email into a fixed set of labels, pull out what the next action needs, and report results in a way that reflects pipeline, not reply volume.
## Step 1. Input
Accept pasted replies, a CSV or JSON export. For each reply you need at least: sender address, timestamp, campaign or sequence name, subject, reply text. The original email helps but is optional.
**Deduplicate first** by sender + timestamp + campaign. Exports often repeat the same message.
## Step 2. Labels
Assign exactly one label per reply:
| Label | Kind | Signs | Next action |
|---|---|---|---|
| `interested` | human | asks a question about the offer, "tell me more", "how does it work" | answer within the hour, propose a call |
| `meeting_request` | human | proposes or accepts a time, asks for a calendar | book it, send the invite |
| `referral` | human | points to another person, often with a name or address | write to that person, mention who referred you |
| `not_now` | human | "not this quarter", "check back in March" | stop sequence, schedule a follow-up on the date |
| `not_interested` | human | a clear no without hostility | stop sequence, no reply needed |
| `unsubscribe` | human | "remove me", "stop emailing" | add to suppression list at once, confirm only if asked |
| `hostile` | human | anger, threat to report, legal wording | suppress, no reply, flag for review |
| `out_of_office` | automatic | OOO, holiday, parental leave, return date | pause, resume after the return date if the tool allows |
| `auto_reply` | automatic | ticket created, "we received your message", generic autoresponder | stop sequence, not a human reply |
| `bounce` | automatic | delivery failure, mailbox not found, NDR | suppress address, count in bounce rate |
`interested`, `meeting_request` and `referral` with a named person are **opportunities**.
Rules for edge cases:
- A reply with a question and "not now" is `not_now`.
- A referral that only says "wrong person" with no name is `not_interested`, with `wrong_person: true`.
- Sarcasm or "who gave you my email" is `hostile` if it mentions reporting, otherwise `not_interested`.
- When unsure between two labels, pick the one with the more conservative action and set `confidence` below 0.7.
## Step 3. Extract fields
For every reply output one JSON object:
```json
{
"sender": "jane@northwind.example",
"timestamp": "2026-03-04T10:12:00Z",
"campaign": "it-support-q1",
"label": "not_now",
"kind": "human",
"opportunity": false,
"confidence": 0.9,
"follow_up_date": "2026-06-01",
"referred_contact": null,
"wrong_person": false,
"next_action": "Stop sequence. Follow up on 2026-06-01.",
"quote": "Reach out again in June."
}
```
`quote` is copied verbatim from the reply, never paraphrased.
## Step 4. Summary
Report per campaign:
- Human replies and automatic replies as two separate counts (not one "reply rate").
- Counts per label.
- Opportunities, and **opportunities per 1,000 leads contacted**. This is the number to compare campaigns on. Reply rate rises with "not interested" and "remove me" replies and says little about pipeline.
- Unsubscribes and hostile replies per 1,000 leads, as the complaint-risk signal.
## Rules
- Never invent a reply, a name or a date. If a field is not in the text, set it to null.
- Do not reply to anyone on the user's behalf unless asked.
- Treat auto-replies as information about delivery (the email arrived), not as interest.
## Example
Input: "Thanks, not a priority right now. Try me again after the summer. - Jane"
Output: `label: not_now`, `kind: human`, `opportunity: false`, `follow_up_date: 2026-09-01` (assumed from "after the summer"; confidence 0.75), next action: stop sequence, reminder on 1 September.
FAQ
Questions
How do I categorize cold email replies?
Use a fixed set of labels with one next action each: interested, meeting request, referral, not now, not interested, unsubscribe, hostile, out-of-office, auto-reply and bounce. Count interested, meeting requests and named referrals as opportunities.
Why is reply rate a misleading metric for cold email?
It counts "remove me" and "not interested" the same as a meeting request, and some tools include auto-replies. Compare campaigns on opportunities per 1,000 leads contacted.
Should auto-replies count as replies?
Count them separately. An auto-reply tells you the email arrived, which is useful for delivery, but it is not a person answering. Stop the sequence for that lead either way.
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.