OpenClaw · Skill
Access LinkedIn through the Unipile API using the CLI script.
Install
Start with the primary install command. Alternate entrypoints are included below for ClawHub and OpenClaw CLI users.
Primary command
clawhub install sudhanshu746/unipile-linkedinClawHub installer
npx clawhub@latest install sudhanshu746/unipile-linkedinOpenClaw CLI
openclaw skills install sudhanshu746/unipile-linkedinDirect OpenClaw install
openclaw install sudhanshu746/unipile-linkedinWhat this skill does
Access LinkedIn through the Unipile API using the CLI script.
Why it matters
LinkedIn has no public API for messaging or posting, so Unipile is the only programmatic path to automate these actions from an agent.
Typical use cases
- Message a job candidate after reviewing their LinkedIn profile
- Check unread LinkedIn conversations without opening a browser
- Send connection requests with personalized notes in bulk
- Post a LinkedIn update directly from the terminal
- React to a contact's post after a meeting
Source instructions
Unipile LinkedIn
Access LinkedIn through the Unipile API using the CLI script.
Setup
Requires environment variables in ~/.openclaw/workspace/TOOLS.md or shell:
UNIPILE_DSN- Your Unipile API endpoint (e.g.,https://api1.unipile.com:13111)UNIPILE_ACCESS_TOKEN- Your Unipile access token
Get credentials from dashboard.unipile.com.
Usage
Run commands via the CLI script:
./scripts/linkedin.mjs <command> [options]
Commands
Account Management
./scripts/linkedin.mjs accounts # List connected accounts
./scripts/linkedin.mjs account <account_id> # Get account details
Messaging
./scripts/linkedin.mjs chats [--account_id=X] [--limit=N] [--unread] # List chats
./scripts/linkedin.mjs chat <chat_id> # Get chat details
./scripts/linkedin.mjs messages <chat_id> [--limit=N] # List messages in chat
./scripts/linkedin.mjs send <chat_id> "<text>" # Send message
./scripts/linkedin.mjs start-chat <account_id> "<text>" --to=<user_id>[,<user_id>] [--inmail] # Start new chat
Profiles
./scripts/linkedin.mjs profile <account_id> <identifier> [--sections=experience,education,skills] [--notify]
./scripts/linkedin.mjs my-profile <account_id> # Your own profile
./scripts/linkedin.mjs company <account_id> <identifier> # Company profile
./scripts/linkedin.mjs relations <account_id> [--limit=N] # Your connections
Invitations
./scripts/linkedin.mjs invite <account_id> <provider_id> ["message"] # Send connection request
./scripts/linkedin.mjs invitations <account_id> [--limit=N] # List pending invites
./scripts/linkedin.mjs cancel-invite <account_id> <invitation_id> # Cancel invitation
Posts
./scripts/linkedin.mjs posts <account_id> <identifier> [--company] [--limit=N] # List posts
./scripts/linkedin.mjs post <account_id> <post_id> # Get post
./scripts/linkedin.mjs create-post <account_id> "<text>" # Create post
./scripts/linkedin.mjs comments <account_id> <post_id> [--limit=N] # List comments
./scripts/linkedin.mjs comment <account_id> <post_id> "<text>" # Add comment
./scripts/linkedin.mjs react <account_id> <post_id> [--type=like|celebrate|support|love|insightful|funny]
Attendees
./scripts/linkedin.mjs attendees [--account_id=X] [--limit=N] # List chat contacts
Examples
# List all chats, only unread
./scripts/linkedin.mjs chats --unread
# Send a message
./scripts/linkedin.mjs send "abc123" "Thanks for connecting!"
# View someone's profile with experience section
./scripts/linkedin.mjs profile "myaccount" "john-doe-123" --sections=experience,about
# Send connection request with note
./scripts/linkedin.mjs invite "myaccount" "jane-smith-456" "Hi Jane, let's connect!"
# Create a LinkedIn post
./scripts/linkedin.mjs create-post "myaccount" "Excited to announce our new product launch! 🚀"
# React to a post
./scripts/linkedin.mjs react "myaccount" "post789" --type=celebrate
Notes
identifiercan be a LinkedIn user ID or profile URL slugaccount_idis your connected LinkedIn account ID (get fromaccountscommand)- Use
--inmailflag when messaging non-connections (requires LinkedIn Premium)