Install
openclaw skills install @d4umak/heyleadLinkedIn outreach through the HeyLead MCP server. Use when the user wants to find and message people on LinkedIn - sales prospecting and lead generation, recruiting and candidate sourcing, user-interview or research participants, job-search networking with hiring managers, investor or partner outreach, vendor scouting, event invitations - or to check replies, campaign status and analytics, or publish LinkedIn posts in their own voice. Campaigns are saved as drafts and nothing is sent until the user launches them. Not for scraping profiles in bulk or for posting to company pages.
openclaw skills install @d4umak/heyleadOne sentence starts a draft campaign. Nothing is sent until you launch it.
HeyLead is an AI agent for LinkedIn outreach: it finds the right people, writes to them in the voice of your own LinkedIn posts, follows up, and handles replies. It runs from Claude Code, Cursor, any MCP client or a web dashboard. This skill connects it to your OpenClaw agent.
This skill connects HeyLead as an MCP server in your OpenClaw agent, giving it 22 specialized LinkedIn outreach tools:
scheduler(action='send_from', host='local')A campaign has one of six goals, and the ICP, the fit check and the messages follow it: Sell a product or service, Find a job, Hire people, Find partners or investors, Find a vendor and Research interviews.
Hire people, Find partners or investors and Research interviews run on a custom brief until their message sets exist.
brew install uv on Mac; other systems: see uv's install page)Add to your openclaw.json:
{
"mcp": {
"servers": [
{
"name": "heylead",
"command": "uvx",
"args": ["heylead"]
}
]
}
}
After adding the MCP server, tell your OpenClaw agent:
"Set up my HeyLead profile"
Hosted: take the 90-second quiz, Sign in, connect LinkedIn on Account, then launch the draft campaign. Or start at heylead.dev/auth/login-url. Paste the token message into chat — the backend handles LinkedIn access and AI calls. The quiz waitlist is marketing-only.
Self-hosted: requires a Unipile account for LinkedIn access and your own LLM API key (a free Gemini key works). Pass the key to setup_profile, open the LinkedIn link it returns, then run setup_profile again.
"Find me CTOs at fintech startups in New York"
"Generate an ICP for AI SaaS founders"
"Create a campaign targeting VP of Sales at Series B startups"
"Send outreach to the campaign"
"Check my replies"
"How's my outreach doing?"
"Suggest next action"
"Analyze my LinkedIn brand"
"Enable the cloud scheduler"
1. setup_profile(backend_jwt="...") → Connect LinkedIn
2. generate_icp(target_description="CTOs fintech") → Create buyer personas
3. create_campaign(target_description="...", icp_id="...") → Find prospects (saved as a draft)
4. campaign(action="launch", campaign_id="...") → Start outreach
5. scheduler(action="status") → Confirm cloud sending (or send_from host=local)
6. inspect() / check_replies() / show_status() → Monitor pipeline and agent holds
7. prospect(action="close", outcome="won") → Track conversions
When the user asks what the agents did, who is held, or why a reply was skipped, call inspect() first. It is read-only and never writes. If they ask what the agents decided on a hosted account, call inspect(action='journal'). If a campaign looks idle in the send window, call inspect(action='review'). If they ask what the agents left for the next tick, what the swarm thinks, or who went dark, call inspect(action='commons'). A campaign-wide coordinator hold: campaign(action='clear_coordinator_hold', campaign_id='...').
A hold: prospect(action="conversation", outreach_id="...") then send_message(action="reply", outreach_id="..."). Operator replies skip the reply agent.
Never paste model-authored text as the LinkedIn message. The send tools generate it.
Never launch a draft unless the user asked.
In-process agents default to act. Use edit_campaign(enable_reply_agent="observe"), edit_campaign(enable_strategist_replan_agent="observe"), edit_campaign(enable_hot_lead_closer="observe"), or edit_campaign(enable_coordinator_agent="observe") to return to logging-only, "off" to disable. product(action='tick') can patch this git checkout and open a PR — never from the send path; cloud workers and uvx installs without .git refuse.
Campaigns are created as drafts and only start when explicitly launched. Every send passes rate limits, working-hours checks, and a 1st-degree connection guard. HeyLead sends from your own LinkedIn account at a human pace: at most 20 invitations a day and 100 a week on a free LinkedIn account (more on Premium or Sales Navigator), Monday to Friday 08:00 to 22:00 in your time zone, minutes apart. It backs off when LinkedIn pushes back and resumes on its own. You can pause any campaign at any time.
Brand and content, signals, bulk import, CRM sync and the shared network pool are registered only when the client is started with HEYLEAD_TOOLS=all, which brings the full set of 47.
| Tool | What it does |
|---|---|
setup_profile | Connect LinkedIn, analyze writing style, create voice signature |
account | Manage LinkedIn accounts — list, switch, or disconnect |
organization | Hosted orgs — list, switch, invite editor/viewer, create a client workspace |
generate_icp | Create Ideal Customer Profiles with buyer personas |
icp | Preview which LinkedIn profiles a saved ICP matches, without creating a campaign |
profile_signals | Compile a targeting request (country ties, interests) into LinkedIn recall queries and profile evidence |
create_campaign | Find prospects and build an outreach campaign (as a draft) |
campaign | Launch, pause, resume, archive, delete, emergency stop, retry failed |
edit_campaign | Update name, mode, booking link, preferences, or agent act flags |
import_prospects | Import prospects from CSV |
generate_and_send | Send personalized connection invitations |
send_message | Follow-up DMs and replies |
send_email | Send email via Unipile (Gmail/Outlook). Never Mail.app. |
check_replies | Monitor inbox, classify sentiment, surface hot leads |
book_meeting | Put an agreed call on your Google Calendar and invite the prospect |
show_status | Campaign dashboard with stats and health; links to the matching heylead.dev/dashboard page and, on hosted accounts, attaches a snapshot card |
engage_prospect | Comment, react, follow, or endorse prospects |
inbox | Browse and read LinkedIn inbox messages |
backfill_inbox | Process unreplied inbox messages through the inbound pipeline |
create_post | Generate and publish posts to LinkedIn, X/Twitter, or both |
prospect | Skip, close with outcome, view conversation or timeline |
contacts | Search and manage the global contact base |
partner | Track follow-ups with partners, vendors, and investors |
crm_sync | Sync won deals to HubSpot CRM |
analytics | Reports, comparisons, and exports |
inspect | Read-only digest of operator holds, replans, closer decisions, reply skips, gated jobs, and (hosted) action='journal' |
suggest_next_action | AI-recommended next step |
signals | View and analyze buying signals |
manage_watchlist | Manage signal keyword watchlists |
network | Network intelligence across connected accounts |
brand_strategy | LinkedIn personal brand audit and strategy |
profile | View and restore LinkedIn profile change history |
scheduler | Autonomous scheduler — status, on/off, send_from (cloud default / local opt-in), always-on |
knowledge | Knowledge base that grounds messages — list, add, remove, refresh, search sources. Hosted only |
product | Local git checkout only — patch this repo and/or open a PR |
| Plan | Price | Limits |
|---|---|---|
| Free | $0 | Up to 2 follow-ups per prospect |
| Pro | $29 per connected LinkedIn account per month | Up to 5 follow-ups per prospect |
Invitation limits follow the LinkedIn account (free, Premium or Sales Navigator), not the HeyLead plan. Self-hosted free installs have monthly quotas: 50 invitations, 20 messages, 30 engagements, 1 active campaign, 3 ICP generations.
MIT