Systems Lab

Agent skill

linkedin-outreach

LinkedIn connection requests and DM sequences adapted to tool stack

dormantSelf-containedInstructions only1,031 words

Filed under LinkedIn and social and Outbound email.

From ekatasingh1107/b2b-gtm-skills · 99 skills · 2 · pushed 2026-04-11

What it does when it runs

LinkedIn connection requests and DM sequences adapted to tool stack

Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It only issues instructions, so there is nothing to bound.
Actions present in the files
None. Instructions only.

Ask about linkedin-outreach

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/ekatasingh1107/b2b-gtm-skills.git /tmp/b2b-gtm-skills
git -C /tmp/b2b-gtm-skills sparse-checkout set "skills/capabilities/linkedin-outreach"
mkdir -p ~/.claude/skills/linkedin-outreach
cp -R "/tmp/b2b-gtm-skills/skills/capabilities/linkedin-outreach/." ~/.claude/skills/linkedin-outreach/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from ekatasingh1107/b2b-gtm-skills/blob/eae8dd0bb98da1c8e84abd297066a87015dd860f/skills/capabilities/linkedin-outreach/SKILL.md, which is licensed MIT (repository). 1,031 words, 14 headings.

LinkedIn Outreach

Generates LinkedIn connection request notes, follow-up DMs, and InMails for a list of leads. Adapts delivery method to the configured tool stack: CSV export for Dripify/Expandi, browser automation, or manual copy-paste.

Prerequisites

  • agency.config.json at repo root with tools.linkedin_outreach, outreach, and case_studies sections
  • crm-writer skill for tracking outreach actions
  • message-generator skill for personalization
  • Optional: Chrome automation (for browser delivery mode)

Phase 0: Intake

  1. Read agency.config.json from the project root.
  2. Extract:
    • tools.linkedin_outreach.tool -- the automation tool name (e.g., "dripify", "expandi", "manual")
    • tools.linkedin_outreach.access -- delivery method: "csv_export", "browser", or "manual"
    • tools.linkedin_outreach.daily_limit -- max connection requests per day (respect this cap strictly)
    • outreach.tone -- voice and tone guidelines for messages
    • outreach.banned_phrases -- phrases that must never appear in any message
    • case_studies -- available case studies for social proof references
  3. Accept parameters:
    • leads -- array of lead objects, each with: name, title, company, linkedin_url, and optionally recent_post, role_change, company_achievement
    • message_type -- one of: "connect", "dm", "inmail", or "all" (default: "connect")

Phase 1: Generate Content

For each lead, generate messages based on message_type. Every message must be checked against outreach.banned_phrases before inclusion. Match the voice from outreach.tone.

Connection Request Note (max 300 characters)

  • Include one specific personalization point. Pick from, in priority order:
    1. Their recent LinkedIn post (if recent_post provided)
    2. A role change or promotion (if role_change provided)
    3. A company achievement or news (if company_achievement provided)
    4. Their title + company combination (fallback)
  • Include one reason to connect: shared industry, mutual interest, or a brief value signal.
  • NO pitch in the connection note. Zero selling language. This is a human-to-human connection.
  • Keep under 300 characters including spaces. LinkedIn truncates at 300.

Example structure:

Hey {first_name}, saw your post on {topic} -- really resonated.
I work with {industry} brands on {area}. Would love to connect and exchange notes.

Follow-up DM (max 150 words, for accepted connections)

  • Reference the connection acceptance: "Thanks for connecting" or similar.
  • Share one insight, resource, or observation relevant to their role or company.
  • Soft CTA: ask a question, do not pitch. Frame as curiosity or offering help.
  • Use a different angle than the connection note. Do not repeat the same personalization point.

Example structure:

Thanks for connecting, {first_name}.

I was looking at {company}'s store and noticed {observation}.
We worked on something similar with {case_study_client} and saw {result}.

Curious -- is {topic} something your team is focused on right now?

InMail (max 200 words, if InMail credits available)

  • Subject line: under 40 characters. Make it specific, not generic. Avoid "Quick question" or "Opportunity."
  • Lead with value or an insight about their business, not about your agency.
  • Reference one case study with a specific metric.
  • Soft CTA: propose a brief call or ask a question. Not "Let's schedule a demo."

Example structure:

Subject: {company}'s {specific_page} conversion

Hi {first_name},

I was reviewing {company}'s {specific_area} and noticed {observation}.

We helped {case_study_client} fix a similar issue, which led to a {X%} increase in {metric}.

Would it be worth a 15-minute look at what we found? Happy to share the analysis either way.

{sender_name}

Phase 2: Delivery

Check tools.linkedin_outreach.access to determine delivery method.

CSV Export (access: "csv_export")

For tools like Dripify, Expandi, or LinkedHelper:

  1. Generate a CSV file with these columns:

    • LinkedIn_URL -- the lead's LinkedIn profile URL
    • First_Name -- extracted from lead name
    • Last_Name -- extracted from lead name
    • Company -- lead's company
    • Title -- lead's job title
    • Connection_Note -- the 300-char connection request note
    • Follow_Up_DM -- the follow-up DM text (used as sequence step 2)
  2. Save to output/linkedin-outreach-{YYYY-MM-DD}.csv

  3. Provide tool-specific import instructions:

    • Dripify: "Go to Campaigns > Create Campaign > Import CSV. Map LinkedIn_URL to 'Profile URL', Connection_Note to 'Connection Message', Follow_Up_DM to 'Follow-up Message 1'."
    • Expandi: "Go to Campaigns > New > CSV Import. Upload the file. Map columns in the field mapper."

Browser (access: "browser")

Use Chrome automation to send connection requests directly:

  1. Navigate to each lead's linkedin_url.
  2. Click the "Connect" button.
  3. If "Add a note" option appears, paste the Connection_Note.
  4. Send the request.
  5. Wait 30-60 seconds between requests (randomized to avoid detection).
  6. Stop when daily_limit is reached, even if leads remain. Report how many were sent and how many are queued for tomorrow.

Manual (access: "manual")

For manual copy-paste workflow:

  1. Display each lead in sequence with:
    • Lead name, title, company
    • LinkedIn profile URL (clickable)
    • Connection note (ready to copy)
    • Follow-up DM (for after acceptance)
  2. Format for easy scanning and quick copy-paste.

Phase 3: Track

After delivery (or generation):

  1. Log each action to CRM via crm-writer skill, writing to the outreach_log tab.
  2. For each lead, log:
    • Date
    • Lead name
    • Company
    • LinkedIn URL
    • Action taken (connection_sent, dm_sent, inmail_sent, csv_exported)
    • Message content (condensed)
    • Cadence day (Day 1 for new connections)
    • Next action (e.g., "Follow-up DM after acceptance" or "Check acceptance in 3 days")
  3. Respect daily_limit: if the limit is reached mid-batch, stop and report remaining leads as "queued."

Phase 4: Summary

Present a summary report:

LinkedIn Outreach Summary ({date}):

Connections sent: {N}
DMs sent: {N}
InMails sent: {N}
Daily limit remaining: {N}
CSV exported to: output/linkedin-outreach-{date}.csv (if applicable)

Queued for tomorrow: {N} leads (daily limit reached)

Leads processed:
1. {Name} @ {Company} -- connection note sent
2. {Name} @ {Company} -- DM sent (already connected)
...

Example Usage

Trigger phrases:

  • "Send LinkedIn connections to these leads"
  • "Generate LinkedIn outreach for this list"
  • "Create Dripify CSV for LinkedIn"
  • "Draft LinkedIn DMs for accepted connections"
  • "Run LinkedIn outreach"
User: Send LinkedIn connections to 10 leads from the signal scanner
Assistant: [reads config, checks daily limit, generates personalized connection notes, delivers via configured method, logs to CRM, reports summary]
User: Create a Dripify CSV for these LinkedIn leads
Assistant: [generates connection notes + follow-up DMs, exports CSV to output/, provides Dripify import instructions]

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what linkedin-outreach does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.