linkedin-message-writer について
LinkedInの見込み客を調査し、複数形式のパーソナライズされたメッセージを作成するスキルです。Apifyでプロフィールと任意の投稿データを取得し、確認済みの文面を各種ツール向けのCSVに出力します。
主な機能
- 01ApifyによるLinkedInプロフィール調査
- 02任意で最近の投稿を取得
- 03複数形式のLinkedInメッセージ作成
- 04メッセージの文字数制限に対応
- 05アウトリーチ文面のCSV出力
活用シーン
- 01プロフィールに基づくコネクション申請の個別化
- 02InMailやフォローアップの作成
- 03アウトリーチツールへの取り込み用文面の準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ gooseworks-ai/ goose-skills --skill linkedin-message-writerインストール後、Claude Code で/linkedin-message-writerを入力して読み込まれたか確認します。
同梱ファイルskill.meta.json
詳細
LinkedIn メッセージライター
LinkedIn の見込み客を調査し、あらゆる種類の LinkedIn メッセージをパーソナライズして作成します。LinkedIn の URL を入力すると、Apify を使って各人物のプロフィールと最近の投稿を調査し、調査結果に基づいてメッセージを作成します。
LinkedIn の Cookie は不要です。データベースのセットアップも不要です。LinkedIn の URL を入力するだけで、パーソナライズされたメッセージが完成します。
自動読み込みするタイミング
次のような場合に、このスキルを読み込みます。
- ユーザーが「LinkedIn メッセージを書いて」「LinkedIn でアウトリーチして」「この見込み客たちと LinkedIn でつながって」「LinkedIn メッセージを送って」と言った場合
- ユーザーが LinkedIn の URL リストを持っていて、連絡を取りたい場合
- ユーザーがパーソナライズされたつながりリクエスト、InMail、DM、コメントを書きたい場合
前提条件
Apify API トークン
LinkedIn のプロフィールと投稿を調査するために必要です。.env に設定します。
APIFY_API_TOKEN=your_token_here
LinkedIn の Cookie、ログイン、セッショントークンは不要です。Apify は LinkedIn の認証情報なしでスクレイピングを行います。
必要なのはこれだけです。環境変数は 1 つ。他には何も必要ありません。
LinkedIn メッセージの種類
このスキルでは、テキストベースのあらゆる種類の LinkedIn メッセージを作成できます。種類ごとに制約が異なります。
| メッセージの種類 | 受信できる相手 | 文字数制限 | 使用するタイミング |
|---|---|---|---|
| つながりリクエスト | 2次・3次のつながり | 200(無料)/300(プレミアム) | 最初の接触。承認してもらえる内容にします。売り込みはしません。 |
| InMail | 誰でも(プレミアムクレジットが必要) | 件名:200、本文:1,900 | 冷たい状態からのつながり申請を承認しない相手への単独の売り込み。上級幹部や多忙な人向けです。 |
| DM | 1次のつながりのみ | 8,000 | つながりが承認された後のフォローアップ。会話調にし、一斉送信のような文面にはしません。 |
| メッセージリクエスト | グループメンバー、イベント参加者、#OpenToWork の利用者 | 8,000 | 共通のグループやイベントがあるという、温かい接点。共通の接点に言及します。 |
| 投稿へのコメント | 誰でも(公開投稿) | 1,250 | つながり申請の前に関係を築きます。相手のコンテンツを読んだことを示します。売り込みではありません。 |
| コメントへの返信 | 誰でも(スレッド内) | 1,250 | 相手が始めた会話に参加します。売り込むのではなく、価値を加えます。 |
種類ごとの主なルール
つながりリクエスト(200/300 文字):
- これは関門です。承認されなければ、その先には進めません。
- 相手の注意を引いた行動、発言、投稿など、きっかけから書き始めます。
- 関連性を示す一文だけにします。売り込み、CTA、「ぜひ〜したいです」などは入れません。
- 必ず文字数制限内に収めます。すべての文字を数えます。超過したら書き直し、省略して切り詰めることはしません。
- 無料アカウントは 200 文字、プレミアム/Sales Navigator は 300 文字です。どちらを利用しているか、ユーザーに確認します。
InMail(件名 200 文字+本文 1,900 文字):
- つながりが承認されていない相手にも、単独で内容が通じる必要があります。
- 件名は、売り込みではなく好奇心を引くものにします。「ちょっと質問です」や「提携のご提案」は避けます。
- 本文には、連絡した理由となるきっかけを含めます。具体的に書きます。
- プレミアムクレジットを使うため、より踏み込んだ依頼でも問題ありません。
DM(8,000 文字):
- 会話調にします。メールではなく、DM として読める文面にします。
- ほとんどの場合、短いほうが効果的です。5 文のメッセージより、2 文のメッセージのほうがよい結果につながります。
- つながりが承認された後のフォローアップシーケンスに適しています。
- シーケンスの構成:0 日目につながり申請 → 3 日目に価値を最優先したメッセージ → 7 日目にソーシャルプルーフ → 14 日目に最後の連絡。
メッセージリクエスト(8,000 文字):
- 共通の接点(グループ名、イベント名、OpenToWork のステータス)に必ず言及します。
- 共通点があるため、InMail よりカジュアルな文面にします。
投稿へのコメント(1,250 文字):
- 本当に価値のある内容を加えます。知見を共有したり、鋭い質問をしたり、相手の主張を発展させたりします。
- 「素晴らしい投稿ですね!」や「いいですね!」は避けます。情報としての価値がありません。
- これは売り込みではなく、関係を築くための一手です。つながり申請の前に相手に気づいてもらうことが目的です。
コメントへの返信(1,250 文字):
- 会話を続けます。相手が言ったことに具体的に言及します。
- 単独のコメントより短くします。最大 2~3 文です。
ワークフロー
フェーズ 0:受付
ユーザーに以下の質問をします。すでに回答済みの項目は省略してください。
見込み客:
- 見込み客の情報はどこにありますか?(CSV ファイル、LinkedIn の URL の貼り付け、データベース、CRM など、利用できるものをお知らせください)
- 見込み客は何件ありますか?(費用の見積もりや、投稿スクレイパーを使うかどうかに影響します)
メッセージの種類: 3. どのような LinkedIn メッセージを作成しますか?(つながりリクエスト、InMail、DM、メッセージリクエスト、投稿へのコメント、コメントへの返信、または複数の種類を組み合わせたシーケンス) 4. つながりリクエストの場合:LinkedIn の無料アカウントとプレミアムアカウントのどちらをお持ちですか?(文字数制限に影響します:200 文字または 300 文字)
目標: 5. 目的は何ですか?(ミーティングの予約、デモのリクエスト促進、返信の獲得、関係構築、コンテンツの宣伝、アプローチ前の関係づくり) 6. 切り口やフックは何ですか?(課題に基づくもの、採用の兆候、競合からの乗り換え、イベントに基づくもの、コンテンツへの反応、共通のつながり、コールド)
トーン: 7. どのトーンにしますか?選択肢を提示します。
- カジュアル・プロフェッショナル — 親しみやすく、人間味があり、ややくだけた表現です。同僚にメッセージを送るようなトーンです。(デフォルト)
- ソートリーダー — 洞察や通説に反する見解から始めます。送信者を専門家として位置づけます。
- 挑発的 — 前提に異議を唱え、意表を突きます。リスクもリターンも高くなります。
- エンタープライズ向けフォーマル — 洗練され、構成が整った表現です。規制の厳しい業界や経営幹部を対象とする場合に適しています。
- カスタム — 効果があった参考メッセージを貼り付けるか、希望する雰囲気を説明します。
- 効果があった参考メッセージはありますか?(こちらを優先し、トーンのプリセットに代えて使用します)
背景情報: 9. 会社や製品では何を提供していますか?(AI が使える一文で説明してください) 10. 裏付けとなる実績はありますか?(参照できる顧客名、指標、ケーススタディなど)
出力: 11. どの LinkedIn アウトリーチツールを使っていますか?(Dripify / Expandi / Botdog / PhantomBuster / CSV を作成)
フェーズ 1:見込み客の読み込み
ユーザーが提供するあらゆる情報源から見込み客を受け付けます。
- CSV ファイル: CSV を読み込みます。LinkedIn の URL が含まれる列を探します(一般的な列名:
linkedin_url、LinkedIn URL、LinkedIn、profile_url、url)。列が特定できない場合は、どの列かユーザーに確認します。 - URL の貼り付け: ユーザーが LinkedIn の URL を直接貼り付けます。URL を解析します。
- リストの貼り付け: ユーザーが名前と会社名などの情報を貼り付けます。利用可能な情報を抽出します。
- データベース/CRM: アクセス方法をユーザーに確認します。ユーザーが提供するツールやエクスポートデータを使います。
最低限必要な情報: 見込み客 1 件につき、LinkedIn の URL が 1 つ以上必要です。
見込み客の件数をユーザーに伝え、リサーチを始める前に確認を取ります。
フェーズ 2:リサーチ
2 つの Apify アクターを使って、各見込み客をリサーチします。どちらも必要なのは APIFY_API_TOKEN のみです。LinkedIn の Cookie は不要です。
ステップ 1:プロフィールデータ
harvestapi/linkedin-profile-scraper を使って、すべての見込み客のプロフィールデータを取得します。
API 呼び出し:
curl -X POST "https://api.apify.com/v2/acts/harvestapi~linkedin-profile-scraper/runs?token=$APIFY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"urls": [
{"url": "https://www.linkedin.com/in/PROFILE_1/"},
{"url": "https://www.linkedin.com/in/PROFILE_2/"}
]
}'
費用: プロフィール 1 件あたり $0.003。見込み客 100 件で $0.30 です。
見込み客ごとに取得される情報:
- firstName、lastName、headline
- jobTitle、companyName、companySize、companyIndustry
- 職歴全体(役職、会社、説明、在籍期間を含む positions 配列)
- 学歴(学校、学位)
- スキル(推薦数を含む)
- 所在地、フォロワー数、つながりの数
- isCreator、isPremium、isVerified の各フラグ
結果のポーリング:
# Check run status
curl "https://api.apify.com/v2/acts/harvestapi~linkedin-profile-scraper/runs/{RUN_ID}?token=$APIFY_API_TOKEN"
# When status is SUCCEEDED, fetch results
curl "https://api.apify.com/v2/datasets/{DATASET_ID}/items?token=$APIFY_API_TOKEN"
ステップ 2:最近の投稿(任意)
harvestapi/linkedin-profile-posts を使って、最近の投稿を取得します。次の場合に実行します。
- ユーザーが深いパーソナライズを希望している
- 見込み客の件数が少なく(50 件未満)、予算に余裕がある
- ユーザーが見込み客の投稿内容に言及することを明示的に希望している
次の場合は省略します。
- 見込み客の件数が多く(100 件以上)、ユーザーが深さより速度を重視している
- ユーザーが基本的なパーソナライズで問題ないと述べている
API 呼び出し:
curl -X POST "https://api.apify.com/v2/acts/harvestapi~linkedin-profile-posts/runs?token=$APIFY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profileUrls": [
"https://www.linkedin.com/in/PROFILE_1/",
"https://www.linkedin.com/in/PROFILE_2/"
]
}'
費用: 投稿 1 件あたり $0.002。プロフィール 1 件あたり約 20 件の投稿で、見込み客 1 件あたり約 $0.04 です。見込み客 50 件で $2.00 です。
投稿ごとに取得される情報:
- content(投稿全文)
- engagement(いいね、コメント、シェア、リアクションの内訳)
- postedAt(タイムスタンプ)
- postImages(該当する場合)
- 投稿者情報(名前、headline)
ポーリング: ステップ 1 と同じ方法です。
ステップ 3: 調査サマリーの提示
調査が完了したら、サマリーテーブルを提示します:
Leads researched: {count}
Profile data: {count} profiles retrieved
Posts scraped: {count} posts from {count} leads (or "skipped")
Research cost: ~${total}
Sample leads:
| Name | Title | Company | Recent Post Topic | Personalization Angle |
|------|-------|---------|-------------------|----------------------|
| Jane Smith | VP Sales | Acme Corp | Posted about AI in sales | Reference her AI post |
| ... | ... | ... | ... | ... |
ユーザーがリードの絞り込み/適格性評価を求めた場合は、プロフィールデータ (役職、企業、業界など) に基づいてここで実施し、基準を満たしたリードを提示します。
フェーズ 3: メッセージの作成
調査に基づいて、各リード向けのパーソナライズされたメッセージを生成します。
パーソナライズの優先順位
各リードについて、利用可能な最良のシグナルを使用します。強度の高い順に:
- 最近の投稿内容 — その人が書いた特定の投稿を参照します。最も強いシグナルです。
- 職務経歴の詳細 — プロフィールから特定の実績を参照します (例: 「あなたは共同創業者です」よりも「0 から $8M GMV まで拡大」のほうが優れています)。
- クリエイターのトピック/ハッシュタグ — その人が広く投稿している内容を参照します。
- 現在の役職 + 企業 — 現在の役職とその企業が何をしているかを参照します。
- 学歴/バックグラウンド — 同じ学校、共通のバックグラウンド。最も弱いですが、それでもパーソナルです。
ユーザーが成果を上げた参考メッセージを提供した場合は、それらをトーン、長さ、構成、語彙の観点で分析します。それらをテンプレートとして使用し、デフォルトで上書きしないでください。
作成プロセス
- まずサンプルを生成します。 シグナルの豊富さが異なる 3~5 件のリード向けにメッセージを作成します。ユーザーに提示します。
- 反復します。 ユーザーがレビューし、フィードバックを提供します。トーン/アプローチを調整します。最大 3 ラウンドです。
- 一括生成します。 承認後、残りのすべてのリード向けにメッセージを作成します。
文字数制限の徹底
メッセージを生成したら、文字数をカウントします。制限を超えている場合:
- ゼロから書き直します。切り詰めないでください。
- 切り詰められたメッセージは壊れているように見え、プロフェッショナルではありません。
- コネクションリクエスト (200/300 文字) では、1 文字 1 文字が重要です。容赦なく削ってください。
フェーズ 4: エクスポート
ユニバーサル CSV 形式
以下の列を持つ CSV を生成します:
linkedin_url, first_name, last_name, company, title, message_type, message_subject, message_body
シーケンスベースのキャンペーン (コネクション + フォローアップ) の場合は、次を使用します:
linkedin_url, first_name, last_name, company, title, connection_request, followup_1, followup_2, followup_3, inmail_subject, inmail_body
ツール固有のフォーマット
Dripify:
- 列:
Profile URL、Note、Message 1、Message 2、Message 3 - リードごとに 1 行で、すべてのメッセージを別々の列に配置します
Expandi:
- 列:
LinkedIn URL、Connection message、Follow-up #1、Follow-up #2、Follow-up #3、InMail subject、InMail message
Botdog:
- 列:
linkedin_profile_url、connection_note、message_1、message_2、message_3
PhantomBuster:
- 列:
profileUrl、message - PhantomBuster は通常一度に 1 つのアクションを処理します — コネクション用とフォローアップ用に別々の CSV が必要になる場合があります
汎用 CSV / その他:
- ユニバーサル形式を使用します
- ユーザーに使用ツールが期待する形式を尋ね、必要に応じて調整します
ファイルの保存
現在の作業ディレクトリに保存します:
{campaign-name}-{YYYY-MM-DD}.csv
フェーズ 5: レビューと納品
最終サマリーを提示します:
Campaign: {name}
Message type: {type}
Leads: {count}
Tool: {dripify/expandi/etc.}
Personalization: {profile-only / profile+posts}
Research cost: ~${amount}
Export file: {file_path}
最終レビュー用に、エクスポートから 3~5 件のサンプルメッセージを表示します。
ユーザーの明示的な確認なしに完了とマークしないでください。 次のように尋ねます: 「メッセージは問題ないでしょうか? インポートする前に調整したい点はありますか?」
確認後:
- ファイルパスを提供します
- ツール固有のインポート手順を提示します
- インポート後に最初のいくつかのメッセージを確認するようユーザーに促します
コスト見積もり
| リード数 | プロフィールのみ | プロフィール + 投稿 |
|---|---|---|
| 10 | 約 $0.03 | 約 $0.43 |
| 50 | 約 $0.15 | 約 $2.15 |
| 100 | 約 $0.30 | 約 $4.30 |
| 500 | 約 $1.50 | 約 $21.50 |
プロフィールスクレイパー: $0.003/プロフィール。投稿スクレイパー: 約 $0.04/リード (20 投稿 × $0.002)。
エラー処理
| エラー | 対処 |
|---|---|
APIFY_API_TOKEN が設定されていない | ユーザーに .env への追加を依頼します |
| Apify の実行が失敗またはタイムアウトする | 一度再試行します。それでも失敗する場合は、そのリードをスキップして記録します。 |
| LinkedIn URL が無効、またはプロフィールが見つからない | リードをスキップし、ユーザーに報告します |
| プロフィールが 0 件返された | URL 形式を確認します — https:// を含む完全な LinkedIn URL である必要があります |
| 投稿スクレイパーが 0 件の投稿を返す | その人は公開投稿をしていません。パーソナライズにはプロフィールデータのみを使用します。 |