LinkedIn Skill
by @vprudnikoff
LinkedIn automation skill — search people and companies, fetch profiles, send messages and InMails, manage connections, create posts, react, comment. Support...
clawhub install linkedin-skill📖 About This Skill
name: linkedin description: LinkedIn automation skill — search people and companies, fetch profiles, send messages and InMails, manage connections, create posts, react, comment. Supports Sales Navigator.
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-cli
Authentication
If a command fails with exit code 2 (authentication error), ask the user to set up their account:
1. Go to app.linkedapi.io and sign up or log in 2. Connect their LinkedIn account 3. 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=TOKEN
Global Flags
Always use --json and -q for machine-readable output:
linkedin --json -q
| 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 [flags] --json -q
Optional 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 -qWith experience and education
linkedin person fetch https://www.linkedin.com/in/username --experience --education --json -qWith last 5 posts
linkedin person fetch https://www.linkedin.com/in/username --posts --posts-limit 5 --json -q
Search 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 -q
Fetch a Company
linkedin company fetch [flags] --json -q
Optional flags:
--employees – include employees--dms – include decision makers--posts – include company postsEmployee 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 -qWith employees filtered by position
linkedin company fetch https://www.linkedin.com/company/name --employees --employees-position "Engineer" --json -qWith decision makers and posts
linkedin company fetch https://www.linkedin.com/company/name --dms --posts --posts-limit 10 --json -q
Search 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 -q
Send a Message
linkedin message send '' --json -q
Text 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 -q
Get Conversation
linkedin message get [--since TIMESTAMP] --json -q
The 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 -q
Connection Management
#### Check connection status
linkedin connection status --json -q
#### Send connection request
linkedin connection send [--note 'text'] [--email user@example.com] --json -q
#### List 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 -q
#### List pending outgoing requests
linkedin connection pending --json -q
#### Withdraw a pending request
linkedin connection withdraw [--no-unfollow] --json -q
By default, withdrawing also unfollows the person. Use --no-unfollow to keep following.
#### Remove a connection
linkedin connection remove --json -q
Posts
#### Fetch a post
linkedin post fetch [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 -qWith 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 -q
#### Create a post
linkedin post create '' [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 -qWith a document
linkedin post create 'Our Q4 report' \
--attachments "https://example.com/report.pdf:document:Q4 Report" --json -qPost as a company
linkedin post create 'Company announcement' \
--company-url https://www.linkedin.com/company/name --json -q
#### React to a post
linkedin post react --type [--company-url ] --json -q
Reaction types: like, love, support, celebrate, insightful, funny.
linkedin post react https://www.linkedin.com/posts/username_activity-123 --type like --json -qReact 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 -q
#### Comment on a post
linkedin post comment '' [--company-url ] --json -q
Text up to 1000 characters.
linkedin post comment https://www.linkedin.com/posts/username_activity-123 'Great insights!' --json -qComment 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 -q
Statistics
# Social Selling Index
linkedin stats ssi --json -qPerformance analytics (profile views, post impressions, search appearances)
linkedin stats performance --json -qAPI usage for a date range
linkedin stats usage --start 2024-01-01T00:00:00Z --end 2024-01-31T00:00:00Z --json -q
Sales Navigator
Requires a LinkedIn Sales Navigator subscription. Uses hashed URLs for person/company lookups.
#### Fetch person
linkedin navigator person fetch --json -q
#### Search 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 -q
#### Fetch company
linkedin navigator company fetch [flags] --json -q
Optional flags:
--employees – include employees--dms – include decision makersEmployee 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 -q
#### Search 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 -q
#### Send InMail
linkedin navigator message send '' --subject '' --json -q
Text 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 -q
#### Get Sales Navigator conversation
linkedin navigator message get [--since TIMESTAMP] --json -q
Custom Workflows
Execute a custom workflow definition from a file, stdin, or inline:
# From file
linkedin workflow run --file workflow.json --json -qFrom stdin
cat workflow.json | linkedin workflow run --json -qInline
echo '{"actions":[...]}' | linkedin workflow run --json -q
Check workflow status or wait for completion:
linkedin workflow status --json -q
linkedin workflow status --wait --json -q
See 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 accounts
Important Behavior
limitExceeded error means the limit was reached.https://www.linkedin.com/... format without trailing slashes.null or [], not omitted.