← 返回 Skills 市场
10madh

LinkedIn Follow-up

作者 10Madh · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
713
总下载
0
收藏
2
当前安装
1
版本数
在 OpenClaw 中安装
/install linkedin-followup
功能描述
Manage LinkedIn outreach leads from Google Sheets — search by name, read live conversation threads, update status, and send contextual follow-up messages. Use after linkedin-dm to move leads through the pipeline (Sent → Replied → Call Scheduled → Demo Done → Closed).
使用说明 (SKILL.md)

linkedin-followup

Manage ongoing LinkedIn conversations from a central Google Sheet CRM. Read threads, draft context-aware replies, send messages, and keep the sheet updated — all from one skill.


Pre-flight Checklist

Before doing anything:

  1. Sheet ID — Confirm the CRM sheet ID (from linkedin-dm setup). Default: 1eEZDGcr1dIbSC782mNkxvD7pVrF8rOFySWCVZ1RXkhM, tab: Sheet1 (or Outreach if renamed).
  2. gog auth — Run gog auth list. If no tokens: see gog auth setup below.
  3. Browser — Open the openclaw browser profile and confirm LinkedIn is logged in. Navigate to /feed/ first.
  4. Mode — Identify which mode the user wants (see Modes).

Sheet Schema

The CRM sheet uses these columns (A–P):

Col Field Notes
A Date Sent ISO date
B Person Name Full name
C Role / Title
D Company
E LinkedIn URL Profile URL
F Relationship Hook Hook used in opener
G Opener Sent Message 1 text
H Pitch Sent Message 2 text
I Campaign Batch label
J Status Current pipeline stage
K Notes Context and history
L Last Updated ISO timestamp
M Last Reply Date When they last replied
N Last Reply (preview) First 200 chars of their last reply
O Conversation Log Full thread (see format below)
P Next Action What to do next (agent or human)

Status values: SentRepliedCall ScheduledDemo DoneFollow Up SentNo ResponseClosed WonClosed Lost

Conversation Log format (column O):

[2026-02-13 17:05 SENT] Hey Rishabh, we both had stints at CRED...
[2026-02-13 17:05 SENT] I'm building an AI calling agent...
[2026-02-15 09:30 RECEIVED] Hey! Sounds interesting, tell me more.
[2026-02-15 09:45 SENT] Happy to show you a live demo — are you free Thursday?

If columns M–P don't exist yet, add them first:

gog sheets update \x3CSHEET_ID> "Sheet1!M1:P1" \
  --values-json '[["Last Reply Date","Last Reply (preview)","Conversation Log","Next Action"]]' \
  --input USER_ENTERED

Modes

Mode 1 — Quick Status Update

User says: "Mark Rishabh as Replied" or "Rishabh got back to me, he's interested"

  1. Find the row — Search the sheet for the person:

    gog sheets get \x3CSHEET_ID> "Sheet1!A:P" --json
    

    Match by name (col B) or LinkedIn URL (col E). Get the row number.

  2. Update status (col J) and last updated (col L):

    gog sheets update \x3CSHEET_ID> "Sheet1!J\x3CROW>:L\x3CROW>" \
      --values-json '[["Replied","","\x3CISO_TIMESTAMP>"]]' \
      --input USER_ENTERED
    
  3. If the user provides reply content, also update:

    • Col M: Last Reply Date
    • Col N: Last Reply preview (first 200 chars)
    • Col O: Append to Conversation Log
    • Col P: Next Action (what should happen next)
  4. Confirm update to user.


Mode 2 — Full Follow-up (Read + Draft + Send)

User says: "Follow up with Rishabh" or "Send a follow-up to everyone who replied"

Step 1 — Load the person's data from sheet

gog sheets get \x3CSHEET_ID> "Sheet1!A:P" --json

Find their row. Load: Name, Company, Role, LinkedIn URL, Opener Sent, Pitch Sent, Status, Notes, Conversation Log, Next Action.

Step 2 — Navigate to their LinkedIn profile

Always go to feed first (anti-detection):

https://www.linkedin.com/feed/

Wait 2–4 seconds. Then navigate to their profile URL (col E).

Step 3 — Open message thread and read conversation

Click the Message button on their profile. Wait for the conversation bubble to load.

Scrape the full thread with JavaScript:

const events = Array.from(document.querySelectorAll('.msg-s-message-list__event'));
const messages = [];
events.forEach(el => {
  const groups = el.querySelectorAll('.msg-s-event-listitem');
  groups.forEach(g => {
    const nameEl = g.closest('.msg-s-message-group')?.querySelector('.msg-s-message-group__profile-link');
    const bodyEl = g.querySelector('.msg-s-event-listitem__body');
    const timeEl = g.closest('.msg-s-message-group')?.querySelector('.msg-s-message-group__timestamp');
    if (bodyEl?.textContent?.trim()) {
      messages.push({
        sender: nameEl?.textContent?.trim() || 'unknown',
        time: timeEl?.textContent?.trim() || '',
        text: bodyEl.textContent.trim()
      });
    }
  });
});
return JSON.stringify(messages);

If the thread is empty or not loading, scroll up in the conversation bubble to load older messages.

Step 4 — Analyse the conversation

With the full thread loaded + their profile data, determine:

  • What did they say last? — Identify the most recent message from them.
  • What's the intent? — Interested / wants more info / asked a question / cold / objection / not interested.
  • What's the right next message? — See Response Playbook below.
  • Tone — Mirror their tone (casual vs formal, brief vs detailed).

Step 5 — Draft the follow-up

Write a response that:

  • Directly addresses what they said last
  • Doesn't re-pitch unless they asked for it
  • Moves toward a specific action (demo, call, intro, forward to team)
  • Is brief — 2–4 sentences max
  • Feels human, not templated

Show the draft to the user and ask for approval before sending:

Draft reply to [Name]: [message]

Send this? (y / edit / skip)

Step 6 — Send the message

Same JS evaluate method as linkedin-dm:

const active = document.querySelector('.msg-overlay-conversation-bubble--is-active .msg-form__contenteditable');
if (active) { active.focus(); document.execCommand('insertText', false, '\x3Cmessage>'); }

Then find and click Send.

Step 7 — Update the sheet

After sending:

gog sheets update \x3CSHEET_ID> "Sheet1!J\x3CROW>:P\x3CROW>" \
  --values-json '[["\x3Cnew_status>","\x3Clast_reply_date>","\x3Clast_reply_preview>","\x3Cupdated_conversation_log>","\x3Cnext_action>","\x3CISO_TIMESTAMP>"]]' \
  --input USER_ENTERED

Mode 3 — Batch Review

User says: "Who needs a follow-up?" or "Check my outreach"

  1. Load all rows from the sheet.
  2. Filter by status and time:
    • Sent older than 3 days → candidate for "No Response" or gentle follow-up
    • Replied → needs a response
    • Follow Up Sent older than 5 days → consider "No Response"
    • Call Scheduled → check if call happened, update status
  3. Present a table of candidates:
    Name             Status    Last Updated    Suggested Action
    Rishabh Nayan    Replied   2026-02-14      Reply to their message
    Shorya Saini     Sent      2026-02-10      Follow-up nudge (4 days)
    Shantam Mohata   Sent      2026-02-13      Too soon (today)
    
  4. User picks who to action, then enter Mode 2 for each.

Response Playbook

Use these as a guide — always adapt to the actual conversation:

They said Intent Your move
"Sounds interesting, tell me more" Curious Short explanation + offer a specific demo slot
"How does it work?" Exploring 2-line description + invite to a 15-min call
"We already use [X]" Objection Acknowledge, explain differentiation, offer demo
"Send me more details" Soft interest Share a Loom/deck/link + follow up in 2 days
"Not relevant right now" Soft no Respect it, leave door open: "No worries, I'll ping you in a few months"
"Who else is using it?" Trust-building Share a relevant use case, offer intro to a user
[No reply in 4 days] Silence Light nudge: "Hey [Name], just checking — any thoughts?"
[No reply in 8 days] Cold One final message, then mark No Response

Anti-Detection Rules

Same rules as linkedin-dm:

  • Always go to /feed/ before navigating to a profile
  • Wait 2–4 seconds after loading feed
  • Max 15–20 messages per session (combined sends across follow-ups)
  • Space out follow-ups: don't ping multiple people in rapid succession
  • Natural delays between typing and sending (1–2 seconds)

gog Auth Setup

If gog auth list returns empty, the user needs to set up Google OAuth credentials:

  1. Go to console.cloud.google.com
  2. Create a project (or select existing)
  3. Enable Google Sheets API (APIs & Services → Library)
  4. Create OAuth credentials: APIs & Services → Credentials → Create → OAuth client ID → Desktop App
  5. Download client_secret_\x3Cid>.json
  6. Run:
    gog auth credentials set /path/to/client_secret.json
    gog auth add [email protected] --services sheets
    
  7. A browser window will open — log in and grant access
  8. Verify: gog auth list

Fallback (no gog): All sheet reads/writes can be done manually via browser — open the sheet in the openclaw browser and update cells directly. Less automated but functional.


Session Limits

  • Max 15–20 follow-up messages per session
  • Log every send immediately to sheet (don't batch)
  • If gog is unavailable, log to local linkedin_followup_log.json and sync to sheet next session
安全使用建议
This skill broadly does what it claims (reads LinkedIn messages, drafts replies, and updates a Google Sheet), but several red flags mean you should be cautious before installing: - Hard-coded values: The SKILL.md assumes a specific Sheet ID and that the logged-in LinkedIn user is named 'Madhur' when classifying sent vs received messages — if your account/name differs the skill will misclassify messages and could behave incorrectly. Ask the author to make sender detection dynamic (use the logged-in user's display name or profile id). - Stealthy behavior: The instructions include an 'anti-detection' step (navigate to /feed first). That suggests the author intended to make automated actions less obvious. Decide whether you are comfortable with automation that actively tries to be stealthy and confirm this complies with LinkedIn's terms and your organizational policy. - Sensitive data handling: The skill scrapes full message threads and writes them into Google Sheets. If those sheets are shared or accessible, private conversations will be stored there. Limit sheet sharing, review access controls, and consider storing only summaries or redacted snippets. - Sending messages: While the skill shows a draft and asks for 'y / edit / skip', verify in a safe test that it truly requires explicit user approval before sending. If you want more safety, require manual approval for every send or disable automatic sends. - Authentication: The skill expects you to authenticate gog to access Sheets. Only grant the minimum scopes required and revoke tokens after testing if you don't intend long-term usage. What would reduce my concern: removing hard-coded IDs/names, making sender detection dynamic, removing 'anti-detection' guidance, storing minimal data in Sheets, and having a stricter manual approval step before any message is sent. If you don't trust the unknown publisher, test this in a throwaway account and sheet first, or ask the author for source attribution and an updated SKILL.md that addresses the issues above.
功能分析
Type: OpenClaw Skill Name: linkedin-followup Version: 1.0.0 The skill bundle is designed to automate LinkedIn follow-ups using Google Sheets as a CRM. It leverages the `gog` CLI tool for Google Sheets interaction and browser automation for LinkedIn. All commands and JavaScript snippets are directly related to the stated purpose of reading/writing to the user's Google Sheet and interacting with the LinkedIn DOM for messaging. The 'anti-detection' rules are behavioral instructions for the AI agent to mimic human interaction on LinkedIn, not to hide malicious activity from the user or the OpenClaw platform. There is no evidence of data exfiltration to unauthorized endpoints, installation of backdoors, or execution of arbitrary malicious code. The instructions are clear, well-documented, and align with the skill's described functionality.
能力评估
Purpose & Capability
The name/description (LinkedIn follow-ups via Google Sheets) aligns with the actions described: using the 'gog' CLI to read/write Sheets and automating an 'openclaw' browser to read/send LinkedIn messages. Requiring the 'gog' binary and a browser profile is coherent. However, the skill ships a default hard-coded Sheet ID and assumes a specific logged-in user name ('Madhur'/'Madhur' matching) which is not justified by the description and is inappropriate for a generic skill.
Instruction Scope
Instructions explicitly scrape full LinkedIn conversation threads, take screenshots, and send messages from the logged-in LinkedIn session — these are legitimate for this purpose but involve sensitive personal data and active actions. Concerningly, the instructions include an 'anti-detection' step (always go to the feed first) that suggests stealthy behavior, and a hard-coded sender name ('Madhur') to classify SENT vs RECEIVED messages, which will misclassify other users and indicates the instructions were tailored to a single person rather than generalized. The skill also instructs appending full conversation logs into a sheet cell (potentially storing private content).
Install Mechanism
This is an instruction-only skill with no install spec or remote downloads, so it does not write code to disk or fetch arbitrary archives. That is the lower-risk option for installation mechanics.
Credentials
The skill declares no required environment variables or credentials and instead uses the 'gog' CLI and the agent's browser profile for auth — reasonable for Sheets and browser automation. It does instruct using 'gog auth add [email protected] --services sheets --force-consent', which implies adding Google auth tokens interactively; this is expected but users should be aware that their Google Sheets content and LinkedIn session will be accessed. No unrelated credentials are requested.
Persistence & Privilege
The skill does not request always:true or other elevated installation privileges. It relies on the agent's browser profile and the gog CLI at invocation time. There is no evidence it modifies other skills or system-wide settings.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install linkedin-followup
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /linkedin-followup 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release: CRM-driven LinkedIn follow-up skill. Read live conversation threads, update pipeline status (Sent→Replied→Call Scheduled→Demo Done→Closed), draft context-aware replies with conversation history, send via browser automation, log everything to Google Sheets. Integrates with linkedin-dm CRM sheet. Supports batch review mode to surface who needs follow-up.
元数据
Slug linkedin-followup
版本 1.0.0
许可证
累计安装 2
当前安装数 2
历史版本数 1
常见问题

LinkedIn Follow-up 是什么?

Manage LinkedIn outreach leads from Google Sheets — search by name, read live conversation threads, update status, and send contextual follow-up messages. Use after linkedin-dm to move leads through the pipeline (Sent → Replied → Call Scheduled → Demo Done → Closed). 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 713 次。

如何安装 LinkedIn Follow-up?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install linkedin-followup」即可一键安装,无需额外配置。

LinkedIn Follow-up 是免费的吗?

是的,LinkedIn Follow-up 完全免费(开源免费),可自由下载、安装和使用。

LinkedIn Follow-up 支持哪些平台?

LinkedIn Follow-up 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 LinkedIn Follow-up?

由 10Madh(@10madh)开发并维护,当前版本 v1.0.0。

💬 留言讨论