LinkedIn outreach
End-to-end LinkedIn lead-gen: Sales Navigator search → ICP filter → personalized InMail drafted with Claude Haiku → Unipile send → 2-touch follow-up cadence. Built to respect rate limits and survive Premium account flags.
Pipeline
SN search → ICP filter (title / company size / region)
→ Claude Haiku drafts InMail (90/10 rule)
→ Unipile send (max 20/day per account)
→ wait 3 days → follow-up 1
→ wait 5 days → follow-up 2
→ mark as cold
Quickstart
claude
# > "find 30 SaaS founders in Berlin (10-50 employees),
# draft InMails about our AI agent platform, save drafts to
# /workspace/li-drafts.json — don't send yet"
Run with --send when you've reviewed the drafts.
Environment variables
UNIPILE_API_KEY=...
UNIPILE_ACCOUNT_ID=... # the LinkedIn account ID inside Unipile
CLAUDE_API_KEY=... # BYOK for personalization
DAILY_INMAIL_CAP=20 # never raise above 25 unsupervised
The 3-error rule
Don't disable Premium on a single 403. Disable only after three consecutive 403 errors. LinkedIn occasionally throws spurious 403s on otherwise-healthy accounts; killing the worker on a single error churns through paying customers.
Personalization rules
- Never lead with the product. First sentence is about them — a recent post, a hire, a launch.
- Subject line ≤ 60 characters, no em-dashes (em-dash is the #1 AI fingerprint).
- Body ≤ 600 characters. InMail UI clips longer.
- Single CTA: 15-minute call, calendar link.
Known limits
- Free LinkedIn accounts: 5 connection requests / day (use that, not InMail).
- Premium: 25 InMail credits / month (use Sales Navigator instead).
- Sales Navigator: 50 InMails / month, unlimited search. This is the target tier.
- If your Unipile account disconnects, you have ~6 hours of 401s before it auto-flags — see Troubleshooting.
Last updated 2026-05-21
Edit on GitHub
soon