agentleFS
OpenLaborOpenLabor/openlabor/skills/cold-outreach/SKILL.md

Cold Outreach

Skill5 starsChanged 3 months agoMITView on GitHub

Research prospects, find verified emails with Hunter, and execute a 5-touch personalized outreach sequence over 14 days — turning cold contacts into booked meetings through Gmail with structured tracking and reply handling

  • Reads credentials

The file

Show its rules and text

We split this skill into the rules it gives an agent

26 rules. About 0 are common, 20 are distinctive, and 6 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈20

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before writing a single email, define who you're targeting.

    line 46
  2. Very specific:

    Use this when you have the company but not the specific person.

    line 142
  3. Distinctive:

    Always verify. Never send to an unverified email — it hurts deliverability.

    line 146
  4. Very specific:

    Confidence score 50-70%: verify first, then proceed only if status is deliverable

    line 155
  5. Very specific:

    If Hunter returns no result, try: subdomain variations, common patterns from DOMAIN_SEARCH results, or LinkedIn message as fallback

    line 159
  6. Distinctive:

    Avoid: "following up", "touching base", "hope this finds you well", "I wanted to reach out"

    line 177
  7. Distinctive:

    No attachments in the first email (deliverability)

    line 205
  8. Distinctive:

    No links in the first email unless it's your calendar link as the CTA

    line 206
  9. Distinctive:

    Before the call: review their LinkedIn, recent news, your email thread

    line 371
  10. Distinctive:

    Do not reschedule unless they ask

    line 372
  11. Distinctive:

    Use this to retrieve the reply thread context before responding.

    line 378
  12. Distinctive:

    If the prospect is interested but timing is off:

    line 396
  13. Distinctive:

    Ask: "When would be a better time to reconnect?"

    line 398
  14. Distinctive:

    Create a calendar reminder for that date

    line 399
  15. Distinctive:

    Do not add them back to a cold sequence.

    line 403
  16. Distinctive:

    Run this at the start and end of each working session.

    line 436
  17. Distinctive:

    Always include your full name, company name, and physical address in your signature

    line 467
  18. Distinctive:

    Remove anyone who unsubscribes immediately and permanently

    line 470
  19. Distinctive:

    Never purchase email lists — only contact people you've researched and verified

    line 471
  20. Distinctive:

    If you cannot find a genuine hook, your subject line and opener must still be role-specific and problem-specific

    line 478
  21. Distinctive:

    Use their first name once (the opener).

    line 479
  22. Distinctive:

    Avoid: Monday mornings (inbox chaos), Friday afternoons (mentally checked out), holidays

    line 485
  23. Very specific:

    If GMAIL_SEND_EMAIL returns an auth error: check that INTERNAL_API_KEY and EMPLOYEE_ID are set in the connector config

    line 489
  24. Very specific:

    If HUNTER_EMAIL_FINDER returns no result: try HUNTER_DOMAIN_SEARCH to get the domain email pattern, then construct manually

    line 490
  25. Very specific:

    If HUNTER_EMAIL_VERIFIER returns unknown: wait 24 hours and retry — some corporate mail servers throttle verification

    line 491
  26. Distinctive:

    If Gmail send fails due to rate limiting: batch sends with a 2-minute gap between emails

    line 492

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md
<!-- openlabor-connector: gmail, api_key={{INTERNAL_API_KEY}}, employee={{EMPLOYEE_ID}}, base={{API_BASE_URL}} --><!-- openlabor-connector: hunter, api_key={{INTERNAL_API_KEY}}, employee={{EMPLOYEE_ID}}, base={{API_BASE_URL}} -->

Cold Outreach

Turn cold prospects into booked meetings through deep research, verified emails, and a 5-touch sequence built around different angles — not the same pitch five times.

You are a cold outreach specialist. Your job is to book qualified meetings. Every email you send is personalized, short, and has exactly one ask. You do not spray. You snipe.

Why Personalization Beats Volume

  • Average cold email reply rate: 0.3%
  • Personalized cold email reply rate (with specific trigger): 5-12%
  • A prospect who feels you actually read their LinkedIn before writing will reply. One who got a mail-merged blast will not.
  • The goal is not to send more emails. The goal is to send better ones.

The Pipeline

Step 1: Define — ICP, target accounts, and outreach goal
Step 2: Research — understand the prospect before touching Hunter
Step 3: Find & Verify — get a confirmed deliverable email via Hunter
Step 4: First Email — under 100 words, specific pain, one CTA
Step 5: Follow-Up Cadence — 5 touches over 14 days, each a different angle
Step 6: Reply Handling — positive, objection, or not-now
Step 7: Track — structured log updated after every touchpoint

Step 1 — Define Your ICP and Target List

Before writing a single email, define who you're targeting.

Ideal Customer Profile (ICP)

Company size: [e.g. 20-200 employees]
Industry: [e.g. SaaS, e-commerce, logistics]
Title: [e.g. Head of Sales, VP Marketing, Founder]
Geography: [e.g. US, UK, DACH]
Pain signal: [e.g. recently hired SDRs, running ads without tracking, raised Series A]
Disqualifiers: [e.g. already a customer, <5 employees, consumer product]

Target List Format

Build or import your list with these fields:

FieldRequired
First nameYes
Last nameYes
CompanyYes
Company domainYes
Job titleYes
LinkedIn URLOptional but recommended
Trigger eventOptional (funding, hire, press)

Step 2 — Prospect Research

Research every prospect before finding their email. This research feeds your personalization. Do not skip this.

What to Look For

  • LinkedIn: recent posts, job changes, company milestones, shared connections
  • Company news: funding, product launches, press coverage, hiring sprees
  • Pain signals: job postings for roles that suggest a problem you solve
  • Content: articles, podcasts, or talks they've given — reference their own words back to them
  • Competitors: who they used before, what tools their team uses (G2, BuiltWith)

Research via Web Search

use search SEARCH '{"query":"[First Name] [Last Name] [Company] LinkedIn","max_results":"3"}'
use search SEARCH '{"query":"[Company] funding news 2024","max_results":"3"}'
use search SEARCH '{"query":"[Company] [pain area] site:linkedin.com OR site:techcrunch.com","max_results":"5"}'

What to Extract Per Prospect

FieldDescription
triggerThe specific reason you're reaching out NOW (not generic)
pain_hypothesisThe problem you believe they have, based on evidence
personalization_hookOne specific detail to open with (post, quote, news)
company_contextSize, growth stage, recent moves
title_contextWhat their role actually cares about day-to-day

Priority Scoring

SignalPoints
Trigger event in last 30 days+30
Trigger event in last 90 days+15
Prospect posted on LinkedIn this week+20
Company raised funding (Series A/B)+25
Job posting for a role that signals pain+20
Shared connection or warm intro possible+15
ICP match on title + company size + industry+10
Competitor customer (via G2/Capterra review)+20

Prioritize prospects scoring 50+ points. Outreach on cold accounts with no trigger is last resort.


Step 3 — Find and Verify Email with Hunter

Find Email by Name + Domain

use hunter HUNTER_EMAIL_FINDER '{"first_name":"[FIRST]","last_name":"[LAST]","domain":"[COMPANY_DOMAIN]"}'

Search All Emails at a Domain

use hunter HUNTER_DOMAIN_SEARCH '{"domain":"[COMPANY_DOMAIN]"}'

Use this when you have the company but not the specific person. Review the returned emails for pattern matching (e.g. first.last@, f.last@).

Verify Before Sending

Always verify. Never send to an unverified email — it hurts deliverability.

use hunter HUNTER_EMAIL_VERIFIER '{"email":"[EMAIL]"}'

Enrichment Rules

  • Confidence score > 70%: proceed
  • Confidence score 50-70%: verify first, then proceed only if status is deliverable
  • Confidence score < 50%: skip or try alternate domain variations
  • Status undeliverable: skip — do not send
  • Status risky: judgment call — skip if you have other options
  • If Hunter returns no result, try: subdomain variations, common patterns from DOMAIN_SEARCH results, or LinkedIn message as fallback

Step 4 — First Email

Under 100 words. One ask. No fluff.

Subject Line Options

Pick the most specific one for this prospect:

  • [trigger event] — e.g. congrats on the Series B
  • quick question, [First Name]
  • [their company] + [your company]
  • re: [specific thing they posted or said]
  • [pain they likely have] — e.g. SDR ramp time at [Company]

Avoid: "following up", "touching base", "hope this finds you well", "I wanted to reach out"

First Email Template

Hi [First Name],

[One sentence personalization hook — specific, not generic. Reference the trigger or their own words.]

[One sentence on the problem you solve — framed around them, not you.]

[One sentence proof point — result, customer name, or specific claim.]

Worth a 15-min call this week?

[Signature]

Sending via Gmail

use gmail GMAIL_SEND_EMAIL '{"to":"[EMAIL]","subject":"[SUBJECT]","body":"[PERSONALIZED_BODY]"}'

First Email Rules

  • Under 100 words — count them
  • The word "I" should appear fewer times than the word "you"
  • No attachments in the first email (deliverability)
  • No links in the first email unless it's your calendar link as the CTA
  • One CTA only — a short call. Not "check out our website" AND "book a call" AND "reply with your thoughts"
  • Send Tuesday–Thursday, 7–10am in their timezone for best open rates

Step 5 — Follow-Up Cadence (5 Touches, 14 Days)

Each follow-up uses a different angle. Never send the same pitch again.

The Cadence Map

TouchDayAngleGoal
1Day 0Personalized intro + painGet a reply
2Day 3Add value — insight or resourceStay top of mind, give before asking
3Day 6Social proof — customer resultBuild credibility
4Day 10Case study or trigger-specific angleMake it concrete
5Day 14Break-up emailCreate urgency, leave door open

Touch 2 — Value Add (Day 3)

Hi [First Name],

Didn't want to assume the timing was off — wanted to share this first.

[One useful thing: a relevant article, a data point, a short insight specific to their industry or role.]

No ask — just thought it was relevant given [their context].

Still happy to show you what we're doing with [similar companies] if timing works.

[Signature]

Touch 3 — Social Proof (Day 6)

[First Name],

[Customer name], who runs [similar role/company], had the same challenge with [specific problem].

After [timeframe], they [specific result with a number if possible].

Happy to walk you through exactly how they did it — 15 min?

[Signature]

Touch 4 — Case Study / Trigger Angle (Day 10)

[First Name],

Saw [relevant news / their post / industry trend] — made me think of you.

We're seeing [pattern] across companies like [Company]. The ones who [action] are getting [result].

[Short specific story or data point.]

Still open to connecting — would this week work?

[Signature]

Touch 5 — Break-Up Email (Day 14)

[First Name],

I'll stop reaching out after this — I know timing isn't always right.

If [the problem you solve] becomes a priority in the next quarter, I'd love to reconnect.

We'll be here.

[Signature]

Break-up emails often get the highest reply rate. The finality creates urgency. Do not hedge it with "just one more thing."


Email Templates by Scenario

A — Cold Intro (No Trigger)

Hi [First Name],

[Company]'s been on my radar — specifically [one thing you noticed about their business].

We help [ICP description] [specific outcome]. [Customer] went from [before] to [after] in [timeframe].

Worth 15 minutes to see if there's a fit?

[Signature]

B — Referral / Warm Intro

Hi [First Name],

[Mutual contact] suggested I reach out — said you're dealing with [problem].

We've helped [similar company] [specific result]. [Mutual contact] thought it might be relevant.

Happy to show you what that looked like — 15 min this week?

[Signature]

C — Trigger Event (Funding, Hire, Launch)

Hi [First Name],

Congrats on [trigger event] — [one specific observation about what it signals for their business].

Companies in your stage often hit [specific challenge] as they scale. We've helped [customer] avoid that by [how].

Quick call to share what's working?

[Signature]

D — Pain-Based (Role-Specific)

Hi [First Name],

[Their title] at companies like [Company] usually tell me [specific pain they've heard from this role].

We built [product/feature] specifically for that. [Customer] [specific result].

If that's on your radar, happy to show you in 15 min.

[Signature]

Step 6 — Reply Handling

Positive Reply

  • Respond within 1 hour — speed signals you're serious
  • Send your calendar link immediately
  • In the calendar invite, include a 1-line agenda so they know what to expect
  • Before the call: review their LinkedIn, recent news, your email thread
  • Do not reschedule unless they ask
use gmail GMAIL_GET_EMAIL '{"message_id":"[MESSAGE_ID]"}'

Use this to retrieve the reply thread context before responding.


Objection Handling

ObjectionResponse
"Not interested""Totally fair — out of curiosity, is it timing or not the right fit?" (one reply max)
"We have a solution""Good to know. Is it solving [specific pain] or mainly [adjacent thing]?"
"Send me more info"Send a one-pager or case study. Follow up in 3 days to confirm receipt.
"Talk to [other person]""Happy to — can you CC them or give me their email?"
"Too expensive""Understood. What would need to change for this to make sense in the next 6 months?"

Not Now — Nurture Path

If the prospect is interested but timing is off:

  1. Ask: "When would be a better time to reconnect?"
  2. Create a calendar reminder for that date
  3. At that date: send a short re-activation email referencing this conversation
  4. Track status as nurture with the follow-up date

Do not add them back to a cold sequence. They've engaged — treat them accordingly.


Step 7 — Tracking

Log every touchpoint. Update after every send and every reply.

Outreach Log Format

FieldValue
name[First Last]
company[Company]
title[Job Title]
email[email]
hunter_confidence[score %]
trigger[what prompted outreach]
touch_1_date[date sent]
touch_2_date[date sent or skipped]
touch_3_date[date sent or skipped]
touch_4_date[date sent or skipped]
touch_5_date[date sent or skipped]
last_reply_date[date of last reply]
statussent / opened / replied / booked / nurture / closed-won / closed-lost / unsubscribed
notes[anything relevant from the thread]

Check Inbox for Replies

use gmail GMAIL_LIST_EMAILS '{"query":"in:inbox is:unread","max_results":"20"}'

Run this at the start and end of each working session. Do not let replies sit more than a few hours during business hours.


Metrics

Track these weekly. If you're below target, adjust copy before adding volume.

MetricTargetAction if Below
Email open rate40%+Fix subject lines
Reply rate (any)5%+Fix first email body
Positive reply rate2-3%+Fix ICP targeting or personalization
Meeting booked rate2%+Fix reply handling speed
Hunter email found rate60-70%Try domain variations or LinkedIn fallback
Email deliverability (bounce rate)<2%Verify all emails before sending

Weekly Review Questions

  1. Which subject lines got the highest open rates?
  2. Which touch in the cadence got the most replies?
  3. Which ICP segment is converting best?
  4. Which objection keeps coming up? (Adjust messaging to pre-empt it.)
  5. What's the average days-to-meeting from first touch?

Guidelines

CAN-SPAM / GDPR Compliance

  • Always include your full name, company name, and physical address in your signature
  • Include a one-line opt-out: "Reply 'unsubscribe' to be removed from future emails"
  • For EU prospects: only contact people where you have a legitimate business interest (B2B outreach to relevant roles is generally permitted under GDPR's legitimate interest basis — document this)
  • Remove anyone who unsubscribes immediately and permanently
  • Never purchase email lists — only contact people you've researched and verified

Personalization Rules

  • The personalization hook must be specific enough that it would not apply to anyone else
  • "I love what [Company] is doing" is not personalization
  • "Saw your post last week about [topic] — your point about [specific claim] resonated" is personalization
  • If you cannot find a genuine hook, your subject line and opener must still be role-specific and problem-specific
  • Use their first name once (the opener). Do not pepper it throughout.

Timing

  • Send Tuesday, Wednesday, Thursday — these outperform Monday and Friday by 15-20%
  • Send 7am–10am in their local timezone for best open rates
  • Avoid: Monday mornings (inbox chaos), Friday afternoons (mentally checked out), holidays

Connector Error Handling

  • If GMAIL_SEND_EMAIL returns an auth error: check that INTERNAL_API_KEY and EMPLOYEE_ID are set in the connector config
  • If HUNTER_EMAIL_FINDER returns no result: try HUNTER_DOMAIN_SEARCH to get the domain email pattern, then construct manually
  • If HUNTER_EMAIL_VERIFIER returns unknown: wait 24 hours and retry — some corporate mail servers throttle verification
  • If Gmail send fails due to rate limiting: batch sends with a 2-minute gap between emails
  • Log all connector errors with timestamp and prospect name for debugging

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.