← 返回 Skills 市场
vprudnikoff

LinkedIn Automation by Linked API

作者 Vlad Prudnikov · GitHub ↗ · v1.0.1
cross-platform ⚠ suspicious
546
总下载
1
收藏
0
当前安装
2
版本数
在 OpenClaw 中安装
/install linkedapi-linkedin
功能描述
LinkedIn automation skill — search people and companies, fetch profiles, send messages and InMails, manage connections, create posts, react, comment. Support...
使用说明 (SKILL.md)

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 \x3Ccommand> --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 \x3Curl> [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 -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 -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 \x3Curl> [flags] --json -q

Optional 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 -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 \x3Cperson-url> '\x3Ctext>' --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 \x3Cperson-url> [--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 \x3Curl> --json -q

Send connection request

linkedin connection send \x3Curl> [--note 'text'] [--email [email protected]] --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 \x3Curl> [--no-unfollow] --json -q

By default, withdrawing also unfollows the person. Use --no-unfollow to keep following.

Remove a connection

linkedin connection remove \x3Curl> --json -q

Posts

Fetch a post

linkedin post fetch \x3Curl> [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 -q

Create a post

linkedin post create '\x3Ctext>' [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 -q

React to a post

linkedin post react \x3Curl> --type \x3Creaction> [--company-url \x3Curl>] --json -q

Reaction 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 -q

Comment on a post

linkedin post comment \x3Curl> '\x3Ctext>' [--company-url \x3Curl>] --json -q

Text 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 -q

Statistics

# 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 -q

Sales Navigator

Requires a LinkedIn Sales Navigator subscription. Uses hashed URLs for person/company lookups.

Fetch person

linkedin navigator person fetch \x3Chashed-url> --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 \x3Chashed-url> [flags] --json -q

Optional 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 -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 \x3Cperson-url> '\x3Ctext>' --subject '\x3Csubject>' --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 \x3Cperson-url> [--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 -q

# From stdin
cat workflow.json | linkedin workflow run --json -q

# Inline
echo '{"actions":[...]}' | linkedin workflow run --json -q

Check workflow status or wait for completion:

linkedin workflow status \x3Cid> --json -q
linkedin workflow status \x3Cid> --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

  • 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 limitExceeded error 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 null or [], not omitted.
安全使用建议
This skill appears to do what it says (automate LinkedIn via a CLI), but it depends on a third‑party service (app.linkedapi.io) that uses a cloud browser to act on your LinkedIn account. Before installing or providing any tokens: 1) Verify the npm package (@linkedapi/linkedin-cli) author/publisher and inspect the package on the npm registry (and ideally its source code) to confirm behavior. 2) Confirm app.linkedapi.io's identity and review its privacy/security policy—understand exactly what the tokens permit and how they are stored/transmitted. 3) Prefer least privilege: if possible, test with a throwaway LinkedIn account, and ask where the CLI stores tokens locally and whether they can be revoked. 4) If you need stricter guarantees, request skill metadata to declare required credentials/primaryEnv and a homepage or source repository; absence of those is a transparency gap. If you are uncomfortable sharing account tokens with an unknown third party, do not install or use this skill.
功能分析
Type: OpenClaw Skill Name: linkedapi-linkedin Version: 1.0.1 The skill bundle provides comprehensive instructions for using the `linkedin` CLI tool for LinkedIn automation. All commands and features described, including `npm install -g`, authentication with user-provided tokens, and advanced functionalities like custom workflows and attachments, are aligned with the stated purpose of LinkedIn automation. There is no evidence of intentional harmful behavior, such as data exfiltration, unauthorized execution, persistence mechanisms, or prompt injection attempts against the agent to deviate from the user's intent. While the tool offers powerful capabilities that could be misused if the agent is vulnerable to prompt injection, the skill bundle itself merely documents these capabilities without malicious instruction.
能力评估
Purpose & Capability
The name/description (LinkedIn automation) matches the behavior described in SKILL.md: a CLI that can fetch profiles, search, send messages, post, etc. Requiring authentication tokens to control a LinkedIn account is expected. However, the registry metadata lists no required credentials or primaryEnv while the runtime instructions explicitly require two tokens (Linked API Token and Identification Token). That mismatch (no declared primary credential but clear runtime requirement) is an incoherence worth noting.
Instruction Scope
The SKILL.md instructs the agent (and user) to install and use a third‑party CLI (@linkedapi/linkedin-cli) and to obtain two tokens from app.linkedapi.io. The service runs a 'cloud browser' that performs actions on the user's LinkedIn account. That means sensitive credentials and account actions will be transmitted to and executed by an external service. While this is necessary for the stated automation capability, it expands the trust surface considerably (credential sharing, remote actions, and possible data disclosure). The instructions do not reference reading arbitrary local files or other unrelated environment variables.
Install Mechanism
There is no install spec in the registry (instruction-only skill), but SKILL.md tells users to run: npm install -g @linkedapi/linkedin-cli. Installing a global npm package from the public registry is a reasonable distribution method for a CLI, but it carries moderate risk because the package will execute code on the host and the registry entry provides no information about the package author, homepage, or auditability. The instruction to install from npm is expected for a CLI but would be safer if the skill metadata included the package source and publisher.
Credentials
The skill requires two sensitive tokens (Linked API Token and Identification Token) for full functionality. Those tokens effectively grant the third‑party service the ability to perform LinkedIn actions on the user's behalf (send messages, connect, post). The registry metadata lists no required env vars or primary credential, but the runtime flow expects tokens to be provided and stored via the CLI. That omission in metadata reduces transparency and makes it harder for users to spot the risk before installation.
Persistence & Privilege
The skill does not request 'always: true' and uses default model invocation settings. There is no instruction in SKILL.md to modify other skills or system-wide agent settings. The CLI will likely store tokens locally when run (per the setup command), which is normal for a CLI but should be checked by the user.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install linkedapi-linkedin
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /linkedapi-linkedin 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.1
Optimized description for better search discoverability
v1.0.0
Initial release of the LinkedIn skill for general-purpose LinkedIn automation. - Enables fetching and searching LinkedIn profiles and companies - Supports sending messages, getting message history, and managing connections - Allows users to create posts, react, and comment on LinkedIn content - Requires authentication via Linked API tokens - Provides structured JSON output for all command results - Includes robust CLI documentation and error handling via exit codes
元数据
Slug linkedapi-linkedin
版本 1.0.1
许可证
累计安装 0
当前安装数 0
历史版本数 2
常见问题

LinkedIn Automation by Linked API 是什么?

LinkedIn automation skill — search people and companies, fetch profiles, send messages and InMails, manage connections, create posts, react, comment. Support... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 546 次。

如何安装 LinkedIn Automation by Linked API?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install linkedapi-linkedin」即可一键安装,无需额外配置。

LinkedIn Automation by Linked API 是免费的吗?

是的,LinkedIn Automation by Linked API 完全免费(开源免费),可自由下载、安装和使用。

LinkedIn Automation by Linked API 支持哪些平台?

LinkedIn Automation by Linked API 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 LinkedIn Automation by Linked API?

由 Vlad Prudnikov(@vprudnikoff)开发并维护,当前版本 v1.0.1。

💬 留言讨论