Install
openclaw skills install inkedin-automation-that-really-worksLinkedIn automation — post (with image upload), comment (with @mentions), edit/delete comments, repost, read feed, analytics, like monitoring, engagement tracking, and content calendar with approval workflow. Uses Playwright with persistent browser profile. Use for any LinkedIn task including content strategy, scheduled publishing, engagement analysis, and audience growth.
openclaw skills install inkedin-automation-that-really-worksAuthor: Community Contributors
⚠️ DISCLAIMER — PERSONAL USE ONLY This skill is provided for personal, non-commercial use only. It automates your own LinkedIn account for personal productivity and engagement. Do NOT use this skill for spam, mass outreach, scraping other users' data, or any commercial automation service. Use responsibly and in accordance with LinkedIn's User Agreement. The author assumes no liability for misuse or account restrictions.
Automate LinkedIn interactions via headless Playwright browser with a persistent session.
pip install playwright && playwright install chromium)scripts/lib/browser.py to match your setupCLI={baseDir}/scripts/linkedin.py
# Check if session is valid
python3 $CLI check-session
# Read feed
python3 $CLI feed --count 5
# Create a post (text only)
python3 $CLI post --text "Hello world"
# Create a post with image (handles LinkedIn's image editor modal automatically)
python3 $CLI post --text "Hello world" --image /path/to/image.png
# Comment on a post (supports @Mentions — see below)
python3 $CLI comment --url "https://linkedin.com/feed/update/..." --text "Great insight @Betina Weiler!"
# Edit a comment (match by text fragment)
python3 $CLI edit-comment --url "https://..." --match "old text" --text "new text"
# Delete a comment
python3 $CLI delete-comment --url "https://..." --match "text to identify"
# Repost with thoughts
python3 $CLI repost --url "https://..." --thoughts "My take..."
# Engagement analytics for recent posts
python3 $CLI analytics --count 10
# Profile-level stats (followers, views)
python3 $CLI profile-stats
# Monitor your likes for new ones (for comment suggestions)
python3 $CLI scan-likes --count 15
# Scrape someone's activity
python3 $CLI activity --profile-url "https://linkedin.com/in/someone/" --count 5
All commands output JSON. Enable debug logging: LINKEDIN_DEBUG=1.
Comments support @FirstName LastName syntax. The skill:
@FirstName → waits for typeahead dropdownmention_failed warning)Check mentions in the JSON result to see if mentions succeeded.
The scan-likes command checks your recent likes/reactions activity and returns any new likes since the last check. State is persisted to avoid duplicate alerts. Ideal for cron/heartbeat integration:
# In HEARTBEAT.md or cron job:
python3 $CLI scan-likes → if new likes found → suggest comment for each
NEVER post, comment, repost, edit, or delete anything without EXPLICIT user approval.
Always show the user exactly what will be posted and get a clear "yes" before executing. Read-only actions (feed, analytics, check-session, scan-likes) are safe to run freely.
Full approval-based publishing workflow with auto-posting. See references/content-calendar.md for setup.
scripts/cc-webhook.py): Receives approve/edit/skip from a frontend UI"old text -> new text") applied instantly by webhook# Start the webhook (or install as systemd service)
python3 scripts/cc-webhook.py
# Env vars for config:
# CC_DATA_FILE=/path/to/cc-data.json
# CC_ACTIONS_FILE=/path/to/actions.json
# CC_WEBHOOK_PORT=8401
| Action | Daily Max | Weekly Max |
|---|---|---|
| Posts | 2–3 | 10–15 |
| Comments | 20–30 | — |
| Likes | 100 | — |
| Connection requests | 30 | 100 |
pip install playwright && playwright install chromiumscripts/lib/browser.py (or set LINKEDIN_BROWSER_PROFILE env var)python3 scripts/linkedin.py check-session to verifypython3 scripts/linkedin.py learn-profile — this scans your recent posts and comments to learn your tone, topics, language, and style. The agent uses this profile when suggesting comments/posts so they sound like you, not like a generic bot.On first setup, learn-profile analyzes your content and saves a style profile (~/.linkedin-style.json) containing:
The agent should ALWAYS read this profile (get-style) before drafting any comment or post suggestion. Never impose a foreign voice — match the user's natural style.
CRITICAL: Before suggesting a comment on any post, check how old the post is:
Commenting on old posts makes it look like you're mining someone's history with a bot. Always flag post age.
references/dom-patterns.md and update scripts/lib/selectors.py/tmp/linkedin_debug_*.png on failure