Skill6 starsChanged 5 months agoMITView on GitHub
General-purpose LinkedIn automation – fetch profiles, search people and companies, send messages, manage connections, create posts, and more. Use when the user wants to interact with LinkedIn.
- Installs packages
23 other projects use a version of this, 2 of them edited.
Adopted by
Most recently taken up by
- YangsonHung/awesome-agent-skillstheir own version, first seen Nov 8, 2026
- ishandutta2007/Awesome-Agent-Skillsedited, first seen Nov 8, 2026
- Astorgato/asistente-cv-linkedintheir own version, first seen Nov 8, 2026
- nurmdrafi/pi-nativetheir own version, first seen Nov 1, 2026
- abhayla/claude-best-practicestheir own version, first seen Nov 1, 2026
- Bobagi/claude-skillstheir own version, first seen Oct 29, 2026
Used with
Projects with it also use reddit, instagram and 3 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ReScienceLabSkillreddit
Search and retrieve content from Reddit. Get posts, comments, subreddit info, and user profiles via the public JSON API. Use when user mentions Reddit, a subreddit, or r/ links.
Also in 6 projects that use this
refly-aiSkillinstagram
Integrate with Instagram for social media. Use when you need to: (1) post content to Instagram, (2) manage media and insights, or (3) automate Instagram publishing workflows.
Also in 4 projects that use this
G-HunterAiSkilltiktok
TikTok platform integration. Manage videos, view analytics, and track engagement.
Also in 3 projects that use this
anshul-garg27Skillnewsletter
Create engaging email newsletters with subject lines, sections, and CTAs for Substack, Beehiiv, ConvertKit, or plain email
Also in 3 projects that use this
refly-aiSkillyoutube
Integrate with YouTube for video management. Use when you need to: (1) upload videos to YouTube, (2) manage channel content, or (3) retrieve video analytics and insights.
Also in 3 projects that use this
Other versions23 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- Linked-API/linkedin-skills★ 10849% same
- ishandutta2007/Awesome-Agent-Skills★ 2187% same
Wrote their own version · 21
- sigcli/sigcli★ 293same name
- getnao/sylph★ 195same name
- hyperfx-ai/marketing-skills★ 112same name
- backpropagation6/claude-linkedin-automation★ 21same name
- YangsonHung/awesome-agent-skills★ 18same name
- AceDataCloud/Skills★ 17same name
- abhayla/claude-best-practices★ 9same name
- mediause/agent-skills★ 9same name
- kkoppenhaver/cc-skills★ 4same name
- manifoldmcp/marketing-skills★ 4same name
11 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository9 other files it gives its agents.
- mapbox-odp-mapsSkill
- nmdc-exploreSkill
- odp-data-consumeSkill
- odp-data-explorationSkill
- odp-data-ingestSkill
- odp-dataset-scoutSkill
- odp-stac-apiSkill
- scenario-analystSkill
- vannmiljoSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 6 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 19 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
If linkedin is not available, install it:
- Distinctive: line 20
If a command fails with exit code 2 (authentication error), ask the user to set up their account:
- Very specific: line 34
Always use --json and -q for machine-readable output:
- Very specific: line 40
When using this skill, run every linkedin ...
- Distinctive: line 94
Only request additional data when needed – each flag increases execution time.
- Distinctive: line 488
Check workflow status or wait for completion:
- Distinctive: line 509
Sequential execution: All operations for an account run one at a time.
- Distinctive: line 511
Timestamps in UTC: All dates and times are in UTC.
- Distinctive: line 512
Single quotes for text arguments: Use single quotes around message text, post text, and comments to avoid shell interpretation issues with …
- Very specific: line 514
URL normalization: All LinkedIn URLs in responses are normalized to https://www.linkedin.com/...
“Common” is measured: kept by at least 6 in 10 of the 19 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
LinkedIn Skill
You have access to linkedin – a CLI tool for LinkedIn automation. Use it to fetch profiles, search people and companies, send messages, manage connections, create posts, react, comment, and more.
Each command sends a request to Linked API, which runs a real cloud browser to perform the action on LinkedIn. Operations are not instant – expect 30 seconds to several minutes depending on complexity.
If linkedin is not available, install it:
npm install -g @linkedapi/linkedin-cliAuthentication
If a command fails with exit code 2 (authentication error), ask the user to set up their account:
- Go to app.linkedapi.io and sign up or log in
- Connect their LinkedIn account
- Copy the Linked API Token and Identification Token from the dashboard
Once the user provides the tokens, run:
linkedin setup --linked-api-token=TOKEN --identification-token=TOKENGlobal Flags
Always use --json and -q for machine-readable output:
LINKEDAPI_CLIENT=skill:linkedin linkedin <command> --json -qWhen using this skill, run every linkedin ... example below with the
LINKEDAPI_CLIENT=skill:linkedin prefix so Linked API can attribute usage to the skill.
| Flag | Description |
--json | Structured JSON output |
--quiet / -q | Suppress stderr progress messages |
--fields name,url,... | Select specific fields in output |
--no-color | Disable colors |
--account "Name" | Use a specific account for this command |
Output Format
Success:
{"success": true, "data": {"name": "John Doe", "headline": "Engineer"}}Error:
{"success": false, "error": {"type": "personNotFound", "message": "Person not found"}}Exit code 0 means the API call succeeded – always check the success field for the action outcome. Non-zero exit codes indicate infrastructure errors:
| Exit Code | Meaning |
| 0 | Success (check success field – action may have returned an error like "person not found") |
| 1 | General/unexpected error |
| 2 | Missing or invalid tokens |
| 3 | Subscription/plan required |
| 4 | LinkedIn account issue |
| 5 | Invalid arguments |
| 6 | Rate limited |
| 7 | Network error |
| 8 | Workflow timeout (workflowId returned for recovery) |
Commands
Fetch a Person Profile
linkedin person fetch <url> [flags] --json -qOptional flags to include additional data:
--experience– work history--education– education history--skills– skills list--languages– languages--posts– recent posts (with--posts-limit N,--posts-since TIMESTAMP)--comments– recent comments (with--comments-limit N,--comments-since TIMESTAMP)--reactions– recent reactions (with--reactions-limit N,--reactions-since TIMESTAMP)
Only request additional data when needed – each flag increases execution time.
# Basic profile
linkedin person fetch https://www.linkedin.com/in/username --json -q
# With experience and education
linkedin person fetch https://www.linkedin.com/in/username --experience --education --json -q
# With last 5 posts
linkedin person fetch https://www.linkedin.com/in/username --posts --posts-limit 5 --json -qSearch People
linkedin person search [flags] --json -q| Flag | Description |
--term | Search keyword or phrase |
--limit | Max results |
--first-name | Filter by first name |
--last-name | Filter by last name |
--position | Filter by job position |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--current-companies | Comma-separated current company names |
--previous-companies | Comma-separated previous company names |
--schools | Comma-separated school names |
linkedin person search --term "product manager" --locations "San Francisco" --json -q
linkedin person search --current-companies "Google" --position "Engineer" --limit 20 --json -qFetch a Company
linkedin company fetch <url> [flags] --json -qOptional flags:
--employees– include employees--dms– include decision makers--posts– include company posts
Employee filters (require --employees):
| Flag | Description |
--employees-limit | Max employees to retrieve |
--employees-first-name | Filter by first name |
--employees-last-name | Filter by last name |
--employees-position | Filter by position |
--employees-locations | Comma-separated locations |
--employees-industries | Comma-separated industries |
--employees-schools | Comma-separated school names |
| Flag | Description |
--dms-limit | Max decision makers to retrieve (requires --dms) |
--posts-limit | Max posts to retrieve (requires --posts) |
--posts-since | Posts since ISO timestamp (requires --posts) |
# Basic company info
linkedin company fetch https://www.linkedin.com/company/name --json -q
# With employees filtered by position
linkedin company fetch https://www.linkedin.com/company/name --employees --employees-position "Engineer" --json -q
# With decision makers and posts
linkedin company fetch https://www.linkedin.com/company/name --dms --posts --posts-limit 10 --json -qSearch Companies
linkedin company search [flags] --json -q| Flag | Description |
--term | Search keyword |
--limit | Max results |
--sizes | Comma-separated sizes: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
linkedin company search --term "fintech" --sizes "11-50,51-200" --json -qSend a Message
linkedin message send <person-url> '<text>' --json -qText up to 1900 characters. Wrap the message in single quotes to avoid shell interpretation issues.
linkedin message send https://www.linkedin.com/in/username 'Hey, loved your latest post!' --json -qGet Conversation
linkedin message get <person-url> [--since TIMESTAMP] --json -qThe first call for a conversation triggers a background sync and may take longer. Subsequent calls are faster.
linkedin message get https://www.linkedin.com/in/username --json -q
linkedin message get https://www.linkedin.com/in/username --since 2024-01-15T10:30:00Z --json -qConnection Management
Check connection status
linkedin connection status <url> --json -qSend connection request
linkedin connection send <url> [--note 'text'] [--email user@example.com] --json -qList connections
linkedin connection list [flags] --json -q| Flag | Description |
--limit | Max connections to return |
--since | Only connections made since ISO timestamp (only works when no filter flags are used) |
--first-name | Filter by first name |
--last-name | Filter by last name |
--position | Filter by job position |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--current-companies | Comma-separated current company names |
--previous-companies | Comma-separated previous company names |
--schools | Comma-separated school names |
linkedin connection list --limit 50 --json -q
linkedin connection list --current-companies "Google" --position "Engineer" --json -q
linkedin connection list --since 2024-01-01T00:00:00Z --json -qList pending outgoing requests
linkedin connection pending --json -qWithdraw a pending request
linkedin connection withdraw <url> [--no-unfollow] --json -qBy default, withdrawing also unfollows the person. Use --no-unfollow to keep following.
Remove a connection
linkedin connection remove <url> --json -qPosts
Fetch a post
linkedin post fetch <url> [flags] --json -q| Flag | Description |
--comments | Include comments |
--reactions | Include reactions |
--comments-limit | Max comments to retrieve (requires --comments) |
--comments-sort | Sort order: mostRelevant or mostRecent (requires --comments) |
--comments-replies | Include replies to comments (requires --comments) |
--reactions-limit | Max reactions to retrieve (requires --reactions) |
linkedin post fetch https://www.linkedin.com/posts/username_activity-123 --json -q
# With comments sorted by most recent, including replies
linkedin post fetch https://www.linkedin.com/posts/username_activity-123 \
--comments --comments-sort mostRecent --comments-replies --json -qCreate a post
linkedin post create '<text>' [flags] --json -q| Flag | Description |
--company-url | Post on behalf of a company page (requires admin access) |
--attachments | Attachment as url:type or url:type:name. Types: image, video, document. Can be specified multiple times. |
Attachment limits: up to 9 images, or 1 video, or 1 document. Cannot mix types.
linkedin post create 'Excited to share our latest update!' --json -q
# With a document
linkedin post create 'Our Q4 report' \
--attachments "https://example.com/report.pdf:document:Q4 Report" --json -q
# Post as a company
linkedin post create 'Company announcement' \
--company-url https://www.linkedin.com/company/name --json -qReact to a post
linkedin post react <url> --type <reaction> [--company-url <url>] --json -qReaction types: like, love, support, celebrate, insightful, funny.
linkedin post react https://www.linkedin.com/posts/username_activity-123 --type like --json -q
# React on behalf of a company
linkedin post react https://www.linkedin.com/posts/username_activity-123 --type celebrate \
--company-url https://www.linkedin.com/company/name --json -qComment on a post
linkedin post comment <url> '<text>' [--company-url <url>] --json -qText up to 1000 characters.
linkedin post comment https://www.linkedin.com/posts/username_activity-123 'Great insights!' --json -q
# Comment on behalf of a company
linkedin post comment https://www.linkedin.com/posts/username_activity-123 'Well said!' \
--company-url https://www.linkedin.com/company/name --json -qStatistics
# Social Selling Index
linkedin stats ssi --json -q
# Performance analytics (profile views, post impressions, search appearances)
linkedin stats performance --json -q
# API usage for a date range
linkedin stats usage --start 2024-01-01T00:00:00Z --end 2024-01-31T00:00:00Z --json -qSales Navigator
Requires a LinkedIn Sales Navigator subscription. Uses hashed URLs for person/company lookups.
Fetch person
linkedin navigator person fetch <hashed-url> --json -qSearch people
linkedin navigator person search [flags] --json -q| Flag | Description |
--term | Search keyword or phrase |
--limit | Max results |
--first-name | Filter by first name |
--last-name | Filter by last name |
--position | Filter by job position |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--current-companies | Comma-separated current company names |
--previous-companies | Comma-separated previous company names |
--schools | Comma-separated school names |
--years-of-experience | Comma-separated ranges: lessThanOne, oneToTwo, threeToFive, sixToTen, moreThanTen |
linkedin navigator person search --term "VP Marketing" --locations "United States" --json -q
linkedin navigator person search --years-of-experience "moreThanTen" --position "CEO" --json -qFetch company
linkedin navigator company fetch <hashed-url> [flags] --json -qOptional flags:
--employees– include employees--dms– include decision makers
Employee filters (require --employees):
| Flag | Description |
--employees-limit | Max employees to retrieve |
--employees-first-name | Filter by first name |
--employees-last-name | Filter by last name |
--employees-positions | Comma-separated positions |
--employees-locations | Comma-separated locations |
--employees-industries | Comma-separated industries |
--employees-schools | Comma-separated school names |
--employees-years-of-experience | Comma-separated experience ranges |
--dms-limit | Max decision makers to retrieve (requires --dms) |
linkedin navigator company fetch https://www.linkedin.com/sales/company/97ural --employees --dms --json -q
linkedin navigator company fetch https://www.linkedin.com/sales/company/97ural \
--employees --employees-positions "Engineer,Designer" --employees-locations "Europe" --json -qSearch companies
linkedin navigator company search [flags] --json -q| Flag | Description |
--term | Search keyword |
--limit | Max results |
--sizes | Comma-separated sizes: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--revenue-min | Min annual revenue in M USD: 0, 0.5, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000 |
--revenue-max | Max annual revenue in M USD: 0.5, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000, 1000+ |
linkedin navigator company search --term "fintech" --sizes "11-50,51-200" --json -q
linkedin navigator company search --revenue-min 10 --revenue-max 100 --locations "United States" --json -qSend InMail
linkedin navigator message send <person-url> '<text>' --subject '<subject>' --json -qText up to 1900 characters. Subject up to 80 characters.
linkedin navigator message send https://www.linkedin.com/in/username \
'Would love to chat about API integrations' --subject 'Partnership Opportunity' --json -qGet Sales Navigator conversation
linkedin navigator message get <person-url> [--since TIMESTAMP] --json -qCustom Workflows
Execute a custom workflow definition from a file, stdin, or inline:
# From file
linkedin workflow run --file workflow.json --json -q
# From stdin
cat workflow.json | linkedin workflow run --json -q
# Inline
echo '{"actions":[...]}' | linkedin workflow run --json -qCheck workflow status or wait for completion:
linkedin workflow status <id> --json -q
linkedin workflow status <id> --wait --json -qSee Building Workflows for the workflow JSON schema.
Account Management
linkedin account list # List accounts (* = active)
linkedin account switch "Name" # Switch active account
linkedin account rename "Name" --name "New Name" # Rename account
linkedin reset # Remove active account
linkedin reset --all # Remove all accountsImportant Behavior
- Sequential execution. All operations for an account run one at a time. Multiple requests queue up.
- Not instant. A real browser navigates LinkedIn – expect 30 seconds to several minutes per operation.
- Timestamps in UTC. All dates and times are in UTC.
- Single quotes for text arguments. Use single quotes around message text, post text, and comments to avoid shell interpretation issues with special characters.
- Action limits. Per-account limits are configurable on the platform. A
limitExceedederror means the limit was reached. - URL normalization. All LinkedIn URLs in responses are normalized to
https://www.linkedin.com/...format without trailing slashes. - Null fields. Fields that are unavailable are returned as
nullor[], not omitted.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

