LinkedIn Engagement — comments first, outreach second skill

Use when someone wants to grow reach through comments, replies, groups, or outreach on LinkedIn — a commenting roster, a connection request note, a DM or InMail, a networking plan, or a check on whether their outreach volume is safe.

by alirezarezvani·MIT license·★ 26,349 Stars on the repo·GitHub ↗

Use now

Files of LinkedIn Engagement — comments first, outreach second

alirezarezvani/main1 file shown
SKILL.md
Show the full text101 lines

LinkedIn Engagement — comments first, outreach second

From a standing start your posts reach almost nobody, and publishing harder does not fix it. A substantive comment on a post that already has an audience puts your name, headline, and a paragraph of thinking in front of people already reading about your subject, for six minutes of work — the cheapest distribution on the platform, and the most badly used.

Nothing here sends anything — no credentials, no API calls. Automated connecting, messaging, commenting, liking, and sharing are prohibited by User Agreement §8.2.

Workflow

1. Build the comment roster. Name 8-12 accounts they would read anyway, with audience overlap and rough size tier, then:

python3 scripts/comment_target_planner.py --account "Priya Raman:5:4:larger" \
  --account "Tomas Lind:5:3:peer" --minutes-per-day 18 --output human

Tiers are huge (10x+, crowded), larger (2-10x, the best ratio), peer (~1x, where reciprocity compounds), smaller (goodwill). The roster caps any account at twice a week — commenting daily on one person reads as following them around — and keeps the huge tier under half of any day. It builds the roster, never the comments: a generated comment is exactly what §8.2 names, and it is recognisable anyway.

2. Outreach — check the volume before writing anything.

python3 scripts/outreach_volume_guard.py --invites 20 --pending 5 --minutes 120 \
  --acceptance 0.42 --output human

Exit 0 safe / 2 tight / 3 over a cap or the time budget / 4 refused above 40 invitations a day, because nobody reads that many profiles and writes that many specific lines. Pending invitations count against the weekly limit (observed around 100), and acceptance below 20% is a stop signal — it is the pattern LinkedIn reviews, and the targeting is wrong.

3. Write one message, for one person.

python3 scripts/outreach_message_builder.py --type connection \
  --recipient "Priya" --specific-line "..." --reason "..." --output human

It refuses without a person-specific line, refuses an ask in a first-touch connection note, and enforces the 200-character cap (300 with --premium). In large third-party samples a note barely moves acceptance (~26.4% either way) but roughly doubles the post-accept reply rate: the note earns the conversation, not the meeting.

4. The order that works. Comment on their work for two weeks. Then invite, referencing something specific from that reading. Then, after acceptance and a pause, ask once, small.

Rules

  • Nothing is auto-sent. Ever. The user pastes and sends, one person at a time.
  • No engagement pods. Coordinated reciprocal commenting is inauthentic engagement under §8.2 regardless of who pressed the key. Build a real reciprocity list instead.
  • Every message carries a line that could only have been written for that person.
  • Never paste the same comment twice. Identical comments at volume are the definition of the thing §8.2 prohibits.
  • One follow-up, a week later, only with something new to say.
  • Agreement is not a comment. Add the counter-example, the number, or the case where it breaks — or skip the slot.

Scripts

Script Role
scripts/comment_target_planner.py Weekly roster from scored accounts, inside a time budget, with per-account and per-tier caps.
scripts/outreach_message_builder.py Assembles one message; refuses templates, premature asks, and 14 dead phrases.
scripts/outreach_volume_guard.py Caps invitations against the observed weekly limit, pending backlog, acceptance floor, and the hours available.

References and assets

Distinct from

  • linkedin-content — writes posts. A comment is a different craft on a different budget.
  • marketing-skill/cold-email — email. Different channel, law, and caps.
  • business-growth/, commercial/ — sales process and deal economics, not networking.

Version: 1.0.0

1---
2name: linkedin-engagement
3description: Use when someone wants to grow reach through comments, replies, groups, or outreach on LinkedIn — a commenting roster, a connection request note, a DM or InMail, a networking plan, or a check on whether their outreach volume is safe. Triggers on "who should I engage with", "write a connection request", "cold DM", "LinkedIn outreach", "networking strategy", "how many invites can I send". Builds a weekly comment roster inside a real time budget, assembles one message at a time and refuses templates, and caps volume against LinkedIn's limits. Nothing is ever sent.
4license: MIT
5metadata:
6 version: 1.0.0
7 author: Alireza Rezvani
8 category: marketing
9 updated: 2026-08-25
10---
11 
12# LinkedIn Engagement — comments first, outreach second
13 
14From a standing start your posts reach almost nobody, and publishing harder does not fix it.
15A substantive comment on a post that already has an audience puts your name, headline, and a
16paragraph of thinking in front of people already reading about your subject, for six minutes
17of work — the cheapest distribution on the platform, and the most badly used.
18 
19**Nothing here sends anything** — no credentials, no API calls. Automated connecting,
20messaging, commenting, liking, and sharing are prohibited by User Agreement §8.2.
21 
22## Workflow
23 
24**1. Build the comment roster.** Name 8-12 accounts they would read anyway, with audience
25overlap and rough size tier, then:
26 
27```bash
28python3 scripts/comment_target_planner.py --account "Priya Raman:5:4:larger" \
29 --account "Tomas Lind:5:3:peer" --minutes-per-day 18 --output human
30```
31 
32Tiers are `huge` (10x+, crowded), `larger` (2-10x, the best ratio), `peer` (~1x, where
33reciprocity compounds), `smaller` (goodwill). The roster caps any account at twice a week —
34commenting daily on one person reads as following them around — and keeps the huge tier under
35half of any day. It builds the roster, never the comments: a generated comment is exactly
36what §8.2 names, and it is recognisable anyway.
37 
38**2. Outreach — check the volume before writing anything.**
39 
40```bash
41python3 scripts/outreach_volume_guard.py --invites 20 --pending 5 --minutes 120 \
42 --acceptance 0.42 --output human
43```
44 
45Exit 0 safe / 2 tight / 3 over a cap or the time budget / **4 refused** above 40 invitations
46a day, because nobody reads that many profiles and writes that many specific lines. Pending
47invitations count against the weekly limit (observed around 100), and acceptance below 20% is
48a stop signal — it is the pattern LinkedIn reviews, and the targeting is wrong.
49 
50**3. Write one message, for one person.**
51 
52```bash
53python3 scripts/outreach_message_builder.py --type connection \
54 --recipient "Priya" --specific-line "..." --reason "..." --output human
55```
56 
57It refuses without a person-specific line, refuses an ask in a first-touch connection note,
58and enforces the 200-character cap (300 with `--premium`). In large third-party samples a
59note barely moves acceptance (~26.4% either way) but roughly doubles the post-accept reply
60rate: **the note earns the conversation, not the meeting.**
61 
62**4. The order that works.** Comment on their work for two weeks. Then invite, referencing
63something specific from that reading. Then, after acceptance and a pause, ask once, small.
64 
65## Rules
66 
67- **Nothing is auto-sent.** Ever. The user pastes and sends, one person at a time.
68- **No engagement pods.** Coordinated reciprocal commenting is inauthentic engagement under
69 §8.2 regardless of who pressed the key. Build a real reciprocity list instead.
70- **Every message carries a line that could only have been written for that person.**
71- **Never paste the same comment twice.** Identical comments at volume are the definition of
72 the thing §8.2 prohibits.
73- **One follow-up, a week later, only with something new to say.**
74- **Agreement is not a comment.** Add the counter-example, the number, or the case where it
75 breaks — or skip the slot.
76 
77## Scripts
78 
79| Script | Role |
80|---|---|
81| [`scripts/comment_target_planner.py`](scripts/comment_target_planner.py) | Weekly roster from scored accounts, inside a time budget, with per-account and per-tier caps. |
82| [`scripts/outreach_message_builder.py`](scripts/outreach_message_builder.py) | Assembles one message; refuses templates, premature asks, and 14 dead phrases. |
83| [`scripts/outreach_volume_guard.py`](scripts/outreach_volume_guard.py) | Caps invitations against the observed weekly limit, pending backlog, acceptance floor, and the hours available. |
84 
85## References and assets
86 
87- [`references/comment_strategy.md`](references/comment_strategy.md) — tiers, what a comment competes on, pods, replying to your own posts (7 sources)
88- [`references/outreach_ethics_and_benchmarks.md`](references/outreach_ethics_and_benchmarks.md) — the benchmark numbers with their provenance, and the personalisation claim corrected (7 sources)
89 
90- [`assets/outreach_worksheet.md`](assets/outreach_worksheet.md) — fillable per-person prep sheet
91- [`assets/example_outreach.json`](assets/example_outreach.json) — input shape for the builder
92 
93## Distinct from
94 
95- **`linkedin-content`** — writes posts. A comment is a different craft on a different budget.
96- **`marketing-skill/cold-email`** — email. Different channel, law, and caps.
97- **`business-growth/`, `commercial/`** — sales process and deal economics, not networking.
98 
99---
100**Version:** 1.0.0
101 

Discussion