linkedin について
linkedin は Linked API を基盤とする LinkedIn 自動化用コマンドラインツールです。プロフィールの取得、つながりの管理、投稿やリアクションを行いたいユーザー向けで、クラウドブラウザー経由で操作し、JSON 出力にも対応します。
主な機能
- 01個人・企業プロフィールの取得
- 02人物・企業の検索
- 03メッセージ送信とつながり管理
- 04投稿の作成とリアクション
- 05項目選択可能な JSON 出力
活用シーン
- 01職種や地域で見込み連絡先を検索
- 02企業の従業員、意思決定者、投稿を確認
- 03プロフィールと最近の活動を取得
- 04LinkedIn のメッセージと申請を管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bobmatnyc/ claude-mpm-skills --skill linkedinインストール後、Claude Code で/linkedinを入力して読み込まれたか確認します。
同梱ファイルmetadata.json
詳細
LinkedIn - Linked API 自動化 CLI
概要
linkedin は Linked API 上に構築された、LinkedIn 自動化用の CLI ツールです。プロフィールの取得、人物や企業の検索、メッセージの送信、つながりの管理、投稿の作成、リアクションやコメント、Sales Navigator やカスタムワークフローの実行に使用できます。
各コマンドは Linked API にリクエストを送信し、Linked API は実際のクラウドブラウザーを動かして LinkedIn 上で操作を実行します。操作は即時には完了しません。複雑さに応じて、30 秒から数分かかることがあります。
linkedin が使用できない場合は、CLI をインストールしてください。
npm install -g @linkedapi/linkedin-cli
安全性とコンプライアンス
コマンドを実行する前にお読みください。
- LinkedIn ユーザー契約上のリスク。 自動化されたつながりリクエスト、メッセージ送信、スクレイピング、投稿は、LinkedIn のユーザー契約に違反する可能性があり、アカウントの制限や停止につながるおそれがあります。LinkedIn の利用規約および適用される法律を遵守する責任は、アカウント所有者にあります。大規模な書き込み操作を行う前に、ユーザーがこのリスクを承知していることを確認してください。
- 書き込み操作とアウトリーチ操作を確認してください。 メッセージ、つながりリクエスト、InMail、投稿、リアクション、コメントを送信する前に、ユーザーから明示的な承認を得てください。まず正確な宛先と内容を提示してください。
- 認証情報のみを使用してください。 ダッシュボードから発行された Linked API トークンと識別トークンを使用してください。LinkedIn のパスワード、2FA コード、Cookie、セッションのエクスポート、リカバリーコード、ブラウザープロフィールデータを決して要求しないでください。
- 操作の制限を守ってください。 アカウントごとの制限はプラットフォーム上で設定できます。
limitExceededエラーが発生した場合は、制限に達したことを意味します。再試行せずに停止し、ユーザーに報告してください。
認証
CLI は環境変数から認証情報を読み取ります。シークレットがシェル履歴やプロセス一覧に残らないよう、認証情報をエクスポートしてください。トークンを CLI 引数として渡さないでください。
コマンドが終了コード 2(認証エラー)で失敗した場合は、ユーザーにセットアップ手順を案内してください。
- app.linkedapi.io にアクセスして、サインアップまたはログインします。
- LinkedIn アカウントを接続します。
- ダッシュボードから Linked API トークン と 識別トークン をコピーします。
トークンをエクスポートしてセットアップを実行してください。
export LINKEDAPI_TOKEN="your-linked-api-token"
export LINKEDAPI_IDENTIFICATION_TOKEN="your-identification-token"
linkedin setup
漏えいしたトークンは侵害されたものとして扱い、Linked API ダッシュボードでローテーションしてください。トークンをソースファイル、コミットするサンプル、Issue の本文、チャットの記録、スクリーンショット、ログに記載しないでください。
グローバルフラグ
機械可読な出力を得るため、常に --json と -q を使用してください。
linkedin <command> --json -q
必要に応じて、環境変数に LINKEDAPI_CLIENT=skill:linkedin を一度設定すると、Linked API はこのスキルの利用状況を識別できます。各コマンドで繰り返し指定する必要はありません。
| フラグ | 説明 |
|---|---|
--json | 構造化された JSON 出力 |
--quiet / -q | stderr の進行状況メッセージを抑制 |
--fields name,url,... | 出力する特定のフィールドを選択 |
--no-color | 色を無効化 |
--account "Name" | このコマンドで特定のアカウントを使用 |
出力形式
成功:
{"success": true, "data": {"name": "John Doe", "headline": "Engineer"}}
エラー:
{"success": false, "error": {"type": "personNotFound", "message": "Person not found"}}
終了コード 0 は API 呼び出しが成功したことを意味します。アクションの結果を確認するには、必ず success フィールドを確認してください。0 以外の終了コードは、インフラストラクチャのエラーを示します。
| 終了コード | 意味 |
|---|---|
| 0 | 成功(success フィールドを確認してください。アクションが「person not found」のようなエラーを返している場合があります) |
| 1 | 一般エラー/予期しないエラー |
| 2 | トークンがない、または無効 |
| 3 | サブスクリプション/プランが必要 |
| 4 | LinkedIn アカウントの問題 |
| 5 | 引数が無効 |
| 6 | レート制限 |
| 7 | ネットワークエラー |
| 8 | ワークフローのタイムアウト(復旧用に workflowId が返されます) |
コマンド
人物プロフィールを取得する
linkedin person fetch <url> [flags] --json -q
追加データを含めるための任意のフラグ:
--experience- 職歴--education- 学歴--skills- スキル一覧--languages- 言語--posts- 最近の投稿(--posts-limit N、--posts-since TIMESTAMPを指定)--comments- 最近のコメント(--comments-limit N、--comments-since TIMESTAMPを指定)--reactions- 最近のリアクション(--reactions-limit N、--reactions-since TIMESTAMPを指定)
必要な場合にのみ追加データをリクエストしてください。フラグを指定するたびに実行時間が長くなります。
# 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
人物を検索する
linkedin person search [flags] --json -q
| フラグ | 説明 |
|---|---|
--term | 検索キーワードまたはフレーズ |
--limit | 最大結果数 |
--first-name | 名で絞り込み |
--last-name | 姓で絞り込み |
--position | 職位で絞り込み |
--locations | カンマ区切りの勤務地 |
--industries | カンマ区切りの業界 |
--current-companies | カンマ区切りの現職の会社名 |
--previous-companies | カンマ区切りの以前の会社名 |
--schools | カンマ区切りの学校名 |
linkedin person search --term "product manager" --locations "San Francisco" --json -q
linkedin person search --current-companies "Google" --position "Engineer" --limit 20 --json -q
会社を取得する
linkedin company fetch <url> [flags] --json -q
任意のフラグ:
--employees- 従業員を含める--dms- 意思決定者を含める--posts- 会社の投稿を含める
従業員の絞り込み(--employees が必要です):
| フラグ | 説明 |
|---|---|
--employees-limit | 取得する従業員の最大数 |
--employees-first-name | 名で絞り込み |
--employees-last-name | 姓で絞り込み |
--employees-position | 職位で絞り込み |
--employees-locations | カンマ区切りの勤務地 |
--employees-industries | カンマ区切りの業界 |
--employees-schools | カンマ区切りの学校名 |
| フラグ | 説明 |
|---|---|
--dms-limit | 取得する意思決定者の最大数(--dms が必要です) |
--posts-limit | 取得する投稿の最大数(--posts が必要です) |
--posts-since | ISO タイムスタンプ以降の投稿(--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
会社を検索する
linkedin company search [flags] --json -q
| フラグ | 説明 |
|---|---|
--term | 検索キーワード |
--limit | 最大結果数 |
--sizes | カンマ区切りの規模:1-10、11-50、51-200、201-500、501-1000、1001-5000、5001-10000、10001+ |
--locations | カンマ区切りの所在地 |
--industries | カンマ区切りの業界 |
linkedin company search --term "fintech" --sizes "11-50,51-200" --json -q
メッセージを送信する
linkedin message send <person-url> '<text>' --json -q
テキストは最大1900文字です。シェルによる解釈の問題を避けるため、メッセージをシングルクォートで囲んでください。
linkedin message send https://www.linkedin.com/in/username 'Hey, loved your latest post!' --json -q
会話を取得する
linkedin message get <person-url> [--since TIMESTAMP] --json -q
会話に対する最初の呼び出しではバックグラウンド同期が実行されるため、時間がかかります。以降の呼び出しはより速くなります。
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
つながりの管理
つながりの状態を確認する
linkedin connection status <url> --json -q
つながりリクエストを送信する
linkedin connection send <url> [--note 'text'] [--email [email protected]] --json -q
つながりを一覧表示する
linkedin connection list [flags] --json -q
| フラグ | 説明 |
|---|---|
--limit | 返すつながりの最大数 |
--since | ISO タイムスタンプ以降に作成されたつながりのみ(絞り込みフラグを使用していない場合のみ有効) |
--first-name | 名で絞り込み |
--last-name | 姓で絞り込み |
--position | 職位で絞り込み |
--locations | カンマ区切りの勤務地 |
--industries | カンマ区切りの業界 |
--current-companies | カンマ区切りの現職の会社名 |
--previous-companies | カンマ区切りの以前の会社名 |
--schools | カンマ区切りの学校名 |
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
送信済みの保留中リクエストを一覧表示する
linkedin connection pending --json -q
保留中のリクエストを取り消す
linkedin connection withdraw <url> [--no-unfollow] --json -q
デフォルトでは、取り消すと相手のフォローも解除されます。フォローを続けるには --no-unfollow を使用してください。
つながりを削除する
linkedin connection remove <url> --json -q
投稿
投稿を取得する
linkedin post fetch <url> [flags] --json -q
| フラグ | 説明 |
|---|---|
--comments | コメントを含めます |
--reactions | リアクションを含めます |
--comments-limit | 取得するコメントの最大数(--comments が必要です) |
--comments-sort | 並べ替え順:mostRelevant または mostRecent(--comments が必要です) |
--comments-replies | コメントへの返信を含めます(--comments が必要です) |
--reactions-limit | 取得するリアクションの最大数(--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
投稿を作成する
linkedin post create '<text>' [flags] --json -q
| フラグ | 説明 |
|---|---|
--company-url | 会社ページを代表して投稿します(管理者アクセスが必要です) |
--attachments | url:type または url:type:name 形式の添付ファイル。タイプ:image、video、document。複数回指定できます。 |
添付ファイルの上限:画像は最大9枚、動画は1本、またはドキュメントは1件です。異なるタイプを組み合わせることはできません。
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
投稿にリアクションする
linkedin post react <url> --type <reaction> [--company-url <url>] --json -q
リアクションの種類: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
投稿にコメントする
linkedin post comment <url> '<text>' [--company-url <url>] --json -q
テキストは最大1000文字です。
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
統計
# 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
LinkedIn Sales Navigator のサブスクリプションが必要です。人物や会社の検索にはハッシュ化された URL を使用します。
人物を取得する
linkedin navigator person fetch <hashed-url> --json -q
人物を検索する
linkedin navigator person search [flags] --json -q
| フラグ | 説明 |
|---|---|
--term | 検索キーワードまたはフレーズ |
--limit | 結果の最大数 |
--first-name | 名で絞り込みます |
--last-name | 姓で絞り込みます |
--position | 職位で絞り込みます |
--locations | カンマ区切りの所在地 |
--industries | カンマ区切りの業種 |
--current-companies | カンマ区切りの現在の会社名 |
--previous-companies | カンマ区切りの以前の会社名 |
--schools | カンマ区切りの学校名 |
--years-of-experience | カンマ区切りの範囲: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
会社を取得する
linkedin navigator company fetch <hashed-url> [flags] --json -q
任意のフラグ:
--employees- 従業員を含めます--dms- 意思決定者を含めます
従業員の絞り込み条件(--employees が必要です):
| フラグ | 説明 |
|---|---|
--employees-limit | 取得する従業員の最大数 |
--employees-first-name | 名で絞り込みます |
--employees-last-name | 姓で絞り込みます |
--employees-positions | カンマ区切りの職位 |
--employees-locations | カンマ区切りの所在地 |
--employees-industries | カンマ区切りの業種 |
--employees-schools | カンマ区切りの学校名 |
--employees-years-of-experience | カンマ区切りの経験年数の範囲 |
--dms-limit | 取得する意思決定者の最大数(--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
会社を検索する
linkedin navigator company search [flags] --json -q
| フラグ | 説明 |
|---|---|
--term | 検索キーワード |
--limit | 結果の最大数 |
--sizes | カンマ区切りの規模:1-10、11-50、51-200、201-500、501-1000、1001-5000、5001-10000、10001+ |
--locations | カンマ区切りの所在地 |
--industries | カンマ区切りの業種 |
--revenue-min | 年間売上高の最小値(百万米ドル):0、0.5、1、2.5、5、10、20、50、100、500、1000 |
--revenue-max | 年間売上高の最大値(百万米ドル):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
InMail を送信する
linkedin navigator message send <person-url> '<text>' --subject '<subject>' --json -q
テキストは最大1900文字です。件名は最大80文字です。
linkedin navigator message send https://www.linkedin.com/in/username \
'Would love to chat about API integrations' --subject 'Partnership Opportunity' --json -q
Sales Navigator の会話を取得する
linkedin navigator message get <person-url> [--since TIMESTAMP] --json -q
カスタムワークフロー
ファイル、標準入力、またはインラインからカスタムワークフロー定義を実行します。
# 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
ワークフローのステータスを確認するか、完了まで待機します。
linkedin workflow status <id> --json -q
linkedin workflow status <id> --wait --json -q
ワークフローの JSON スキーマについては、ワークフローの作成を参照してください。
アカウント管理
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
重要な動作
- 逐次実行です。 1 つのアカウントに対するすべての操作は、1 回に 1 つずつ実行されます。複数のリクエストはキューに入ります。
- すぐには完了しません。 実際のブラウザーで LinkedIn に移動するため、操作ごとに 30 秒から数分かかることを想定してください。
- タイムスタンプは UTC です。 すべての日付と時刻は UTC です。
- テキスト引数にはシングルクォートを使用してください。 特殊文字によるシェルの解釈の問題を避けるため、メッセージ本文、投稿本文、コメントはシングルクォートで囲んでください。
- 操作の上限があります。 アカウントごとの上限はプラットフォームで設定できます。
limitExceededエラーは、上限に達したことを意味します。 - URL の正規化。 レスポンス内のすべての LinkedIn URL は、末尾のスラッシュを除いた
https://www.linkedin.com/...形式に正規化されます。 - null フィールド。 利用できないフィールドは省略されず、
nullまたは[]として返されます。
避けるべきパターン
- トークンを CLI 引数(
--linked-api-token=...)として渡さないでください。シェルの履歴やプロセス一覧に残らないよう、代わりに環境変数としてエクスポートしてください。 - LinkedIn のパスワード、2FA コード、Cookie、セッションデータを要求したり、受け取ったりしないでください。ダッシュボードで発行されたトークンのみを使用してください。
- ユーザーが LinkedIn User Agreement に関するリスクを受け入れることを確認せずに、一括でのアウトリーチやスクレイピングを実行しないでください。
limitExceededエラーまたはレート制限エラーの後に、書き込み操作を自動で再試行しないでください。処理を止めて、エラーを報告してください。