Skip to main content
ClaudeWave
Skill730 estrellas del repoactualizado 11d ago

linkedin-message-writer

This skill researches LinkedIn profiles and recent posts using Apify, then generates personalized messages for connection requests, InMails, DMs, message requests, and post comments. Use it when you have LinkedIn URLs and need tailored outreach messages that reference specific details from each prospect's profile or activity, without requiring LinkedIn credentials or database setup.

Instalar en Claude Code
Copiar
git clone --depth 1 https://github.com/gooseworks-ai/goose-skills /tmp/linkedin-message-writer && cp -r /tmp/linkedin-message-writer/skills/capabilities/linkedin-message-writer ~/.claude/skills/linkedin-message-writer
Después abre una sesión nueva de Claude Code; el skill carga automáticamente.

SKILL.md

# LinkedIn Message Writer

Research LinkedIn leads and write personalized messages for any LinkedIn message type. Takes LinkedIn URLs, researches each person using Apify (profile + recent posts), and writes messages based on what it finds.

No LinkedIn cookies. No database setup. Just LinkedIn URLs in, personalized messages out.

## When to Auto-Load

Load this skill when:
- User says "write LinkedIn messages", "LinkedIn outreach", "connect with these leads on LinkedIn", "send LinkedIn messages"
- User has a list of LinkedIn URLs and wants to reach out
- User wants to write personalized connection requests, InMails, DMs, or comments

## Prerequisites

### Apify API Token

Required for researching LinkedIn profiles and posts. Set in `.env`:

```
APIFY_API_TOKEN=your_token_here
```

No LinkedIn cookies, login, or session tokens needed. Apify handles scraping without any LinkedIn credentials.

That's it. One env var. Nothing else.

---

## LinkedIn Message Types Reference

This skill writes any text-based LinkedIn message type. Each type has different constraints.

| Message Type | Who Can Receive | Character Limit | When to Use |
|-------------|----------------|-----------------|-------------|
| **Connection request** | 2nd/3rd degree connections | 200 (free) / 300 (premium) | First touch. Must earn the accept. No selling. |
| **InMail** | Anyone (requires premium credits) | Subject: 200, Body: 1,900 | Standalone pitch to people who won't accept cold connections. Senior execs, busy people. |
| **DM** | 1st-degree connections only | 8,000 | Follow-ups after connection accepted. Conversational, not broadcast. |
| **Message request** | Group members, event attendees, #OpenToWork | 8,000 | Warm context — you share a group or event. Reference the shared context. |
| **Post comment** | Anyone (public posts) | 1,250 | Warm-up before connecting. Show you engaged with their content. Not a pitch. |
| **Comment reply** | Anyone (in a thread) | 1,250 | Engage in a conversation they started. Add value, don't pitch. |

### Key Rules Per Type

**Connection request (200/300 chars):**
- This is the gatekeeper. If they don't accept, nothing else happens.
- Lead with the signal — what they did/said/posted that caught your attention.
- One sentence of relevance. No pitch, no CTA, no "I'd love to..."
- MUST be under the character limit. Count every character. If over, rewrite — never truncate.
- Free accounts: 200 chars. Premium/Sales Navigator: 300 chars. Ask the user which they have.

**InMail (subject 200 + body 1,900 chars):**
- Must work standalone — they haven't accepted your connection.
- Subject: curiosity-driven, not salesy. Not "Quick question" or "Partnership opportunity."
- Body: include context for why you're reaching out (the signal). Be specific.
- Higher commitment ask is OK here — you're using a premium credit.

**DM (8,000 chars):**
- Conversational. These read like DMs, not emails.
- Shorter is almost always better. A 2-sentence message outperforms a 5-sentence one.
- Good for follow-up sequences after connection accepted.
- Sequence structure: Day 0 connection → Day 3 value-first → Day 7 social proof → Day 14 breakup.

**Message request (8,000 chars):**
- Always reference the shared context (group name, event name, OpenToWork status).
- More casual than InMail since you have something in common.

**Post comment (1,250 chars):**
- Add genuine value. Share an insight, ask a smart question, build on their point.
- NOT "Great post!" or "Love this!" — that's noise.
- This is a warm-up move, not a pitch. The goal is to get noticed before connecting.

**Comment reply (1,250 chars):**
- Continue the conversation. Reference what they said specifically.
- Shorter than a standalone comment. 2-3 sentences max.

---

## Workflow

### Phase 0: Intake

Ask the user these questions. Skip any already answered.

**Leads:**
1. Where are your leads? (CSV file, paste LinkedIn URLs, database, CRM — whatever they have)
2. How many leads? (affects cost estimate and whether to use post scraper)

**Message type:**
3. What kind of LinkedIn message do you want to write? (connection request, InMail, DM, message request, post comment, comment reply, or a sequence of multiple types)
4. If connection request: do you have a free or premium LinkedIn account? (affects character limit: 200 vs 300)

**Goal:**
5. What's the objective? (book meetings, drive demo requests, get replies, build relationships, promote content, warm up before outreach)
6. What's the angle or hook? (pain-based, hiring signal, competitor displacement, event-based, content engagement, mutual connection, cold)

**Tone:**
7. Which tone? Present options:
   - **Casual Professional** — Friendly, human, slightly informal. Like messaging a peer. (default)
   - **Thought Leader** — Lead with insight or a contrarian take. Position sender as expert.
   - **Provocative** — Challenge assumptions, pattern-interrupt. Higher risk, higher reward.
   - **Enterprise Formal** — Polished, structured. For regulated industries or C-suite targets.
   - **Custom** — User pastes reference messages that have worked, or describes the vibe.
8. Any reference messages that have worked well? (these override tone presets)

**Context:**
9. What does your company/product do? (one-liner for the AI to work with)
10. Any proof points? (customer names, metrics, case studies to reference)

**Output:**
11. Which LinkedIn outreach tool do you use? (Dripify / Expandi / Botdog / PhantomBuster / Just give me a CSV)

### Phase 1: Load Leads

Accept leads from whatever source the user provides:

- **CSV file:** Read the CSV. Look for a column containing LinkedIn URLs (common names: `linkedin_url`, `LinkedIn URL`, `LinkedIn`, `profile_url`, `url`). If ambiguous, ask the user which column.
- **Pasted URLs:** User pastes LinkedIn URLs directly. Parse them.
- **Pasted list:** User pastes names + companies or other data. Extract what's available.
- **Database/CRM:** Ask the user how to access it. Use w