company-contact-finder について
company-contact-finderは、指定した会社と職種から意思決定者を探す、GooseWorks coworker専用のスキルです。まずFiberで検索し、結果が不足する場合は有料のCrustdataとPDLを使い、複数の情報源の結果を重複排除します。
主な機能
- 01会社名と職種による検索
- 02Fiberを優先する段階的検索
- 03CrustdataとPDLによる補完検索
- 04連絡先の絞り込みと重複排除
- 05有料検索前の承認確認
活用シーン
- 01指定企業の財務責任者を探す
- 02対象職種から経営幹部を特定
- 03最初の情報源で結果が少ない場合に検索を続行
MCP 対応
このスキルはGooseWorks coworkerの人物検索ツールを必要とし、GooseWorks coworker内でのみ動作します。外部エージェントが接続するGooseWorksサーバーでは、これらのツールを利用できません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ gooseworks-ai/ goose-skills --skill company-contact-finderインストール後、Claude Code で/company-contact-finderを入力して読み込まれたか確認します。
同梱ファイルskill.meta.json
詳細
company-contact-finder
特定の企業で、名前と対象の役職を指定して意思決定者を見つけます。GooseWorks の同僚が使う人物検索ツール(Fiber、Crustdata、PDL)を段階的にフォールバックさせるため、前の検索元で結果が不足した場合にのみ、次の検索元の費用が発生します。
実行場所
このスキルは GooseWorks の同僚(GooseWorks アプリ内の同僚)でのみ実行されます。 このスキルが使用する人物検索ツールは、その環境でのみ利用できます。Claude、ChatGPT、その他の外部エージェントが接続する GooseWorks サーバーにはありません。
fiber_person_search、crustdata_person_search、pdl_person_search がツール一覧にない場合は、同僚の環境外です。この連絡先検索は GooseWorks の同僚の環境でのみ実行されることをユーザーに伝え、そこで終了してください。代わりに他のツールを試してはいけません。
費用に関するルール
このスキルでの検索はすべて有料です。有料検索またはページを実行する前に、費用を顧客に伝え、承諾を待ってください。
- これからリクエストするページサイズの料金は、ツール自身の説明から取得してください。記憶やこのファイルに記載された価格を伝えてはいけません。
- 次のページや検索元に進む前に、毎回あらためて確認してください。承諾は1回の検索に対するものであり、フォールバックの全工程を対象とするものではありません。
- 承諾が得られなかった場合は、そこで終了し、これまでに得られた結果を提示してください。
入力
| 入力 | 必須 | デフォルト | 説明 |
|---|---|---|---|
| company_name | はい | -- | 検索する企業(例:「EisnerAmper」) |
| company_linkedin_url | いいえ | -- | 同名企業の判別に使う企業の LinkedIn URL |
| target_titles | はい | -- | 検索する役職の一覧(例:["Partner", "Controller", "VP Finance"]) |
| num_results | いいえ | 10 | 返す連絡先の件数 |
手順
Step 1: リクエストを把握する
ユーザーのリクエストを解析し、次の情報を抽出します。
- company_name(必須)-- 検索対象の企業
- company_linkedin_url(任意)-- 同名企業の判別に役立ちます
- target_titles(必須)-- 検索する役職または職種の一覧(例:["Partner", "Controller", "VP Finance", "CFO"])
- num_results(任意、デフォルトは10)-- 返す連絡先の件数
ユーザーが対象の役職を指定していない場合は、役職を尋ねてください。状況に応じて、一般的な上級職を提案します。
- 会計事務所/CPA 事務所の場合:Partner、Managing Director、Controller、CFO、VP Finance
- テック企業の場合:VP Engineering、CTO、Head of Product、Director of Engineering
- 一般的な B2B の場合:VP、Director、C-Level、Head of
Step 2: Fiber 検索(優先)
Fiber は自然言語のクエリを受け付け、返されるレコードごとに課金されるため、必要な件数だけリクエストしてください。
このページサイズの料金を伝え、顧客の承諾を得てから fiber_person_search を使います。
fiber_person_search(
query: "[title1] OR [title2] OR [title3] at [company_name]",
page_size: 10
)
page_size を num_results に設定します(最大100)。次のページを取得する場合は、新たに承諾を得てから、前回のレスポンスに含まれる cursor を渡してください。
query の代わりに、search_params で構造化フィルターを渡すこともできます(例:{"job_titles": ["CFO"], "locations": ["New York"]})。両方を渡した場合は query が優先されます。
レスポンスを解析します: 各結果から名前、役職、企業、LinkedIn URL、所在地を抽出し、作業用リストに追加します。
Step 3: 結果を評価する
ここまでの結果のうち、対象企業で対象の役職に該当するものがいくつあるかを確認します。
品質チェック:
- 企業名が一致しない結果を除外します(あいまい一致でもかまいません。「EisnerAmper LLP」は「EisnerAmper」と一致します)
- 役職が対象の役職のいずれにも妥当に該当しない結果を除外します
- 残った質の高い一致件数を数えます
判断:
- 質の高い一致が3件以上見つかった場合:Step 6(出力)に進みます
- 質の高い一致が3件未満の場合:Step 4に進みます
ステップ 4:Crustdata の構造化検索(フォールバック 1)
Crustdata のフィルター検索では、会社名と役職をより正確に照合できます。ページサイズにかかわらずページ単位で課金されるため、limit は利用する可能性のある最大の結果数に設定してください(最大 100 件)。
1 ページ分の料金を提示して、顧客の同意を得ます。その後、crustdata_person_search を使用します。
crustdata_person_search(
conditions: [
{"column": "current_employers.name", "type": "=", "value": "[company_name]"},
{"column": "current_employers.title", "type": "(.)", "value": "[title1]|[title2]|[title3]"}
],
filter_op: "and",
limit: 25
)
(.) は部分一致/パターン一致なので、複数の役職を | でつないで、1 回の検索でまとめて照合できます。結果が見つからない場合は、役職ごとに検索を 1 回ずつ実行してください。それぞれが個別に課金されるページなので、検索ごとに料金を提示し、同意を得てください。会社名を完全一致で検索しても見つからない場合は、会社名にも (.) を使用してください(例:「EisnerAmper LLP」)。
EisnerAmper のパートナーとコントローラーの例:
crustdata_person_search(
conditions: [
{"column": "current_employers.name", "type": "=", "value": "EisnerAmper"},
{"column": "current_employers.title", "type": "(.)", "value": "Partner|Controller"}
],
filter_op: "and",
limit: 25
)
上級職を幅広く検索する場合: 特定の役職ではなく上級の意思決定者をユーザーが求めている場合は、職位レベルのフィールドではなく役職で照合します。
{"column": "current_employers.title", "type": "(.)", "value": "Chief|VP|Vice President|Director|Head of|Partner"}
次のページを取得するには、新たに同意を得てから、前回のレスポンスの cursor を渡します。
結果が返された後:
- これまでのすべての結果と統合します
- LinkedIn URL で重複を排除します(最初に出現した結果を残します)
判断:
- 品質条件を満たす固有の結果が合計 3 件以上ある場合:ステップ 6(出力)に進みます
- 3 件未満の場合:ステップ 5 に進みます
ステップ 5:PDL 検索(フォールバック 2、最終手段)
PeopleDataLabs は、3 つのデータソースの中でレコードあたりの料金が最も高額です。他のソースで十分な結果が得られなかった場合にのみ使用し、不足しているレコードのみを検索してください。
この件数分の料金を提示して、顧客の同意を得ます。その後、pdl_person_search を使用します。
pdl_person_search(
job_titles: ["Partner", "Controller", "VP Finance"],
company_names: ["EisnerAmper"],
num_results: 5
)
num_results のデフォルトは 1 件で、最大 25 件です。構造化フィールドを使用してください。検索条件を表現できない場合にのみ、query をフォールバックとして使用します。
結果が返された後:
- 結果を解析します(名前、役職、会社名、LinkedIn URL、所在地を抽出します)
- これまでのすべての結果と統合します
- LinkedIn URL で重複を排除します
ステップ 6:出力
重複を排除した最終的な連絡先リストを提示します。
表形式(ユーザー向け):
| # | 名前 | 役職 | 会社名 | LinkedIn URL | 所在地 |
|---|---|---|---|---|---|
| 1 | Jane Smith | Partner | EisnerAmper | https://linkedin.com/in/janesmith | New York, NY |
| 2 | John Doe | Controller | EisnerAmper | https://linkedin.com/in/johndoe | Chicago, IL |
| ... |
JSON 形式(後続スキル向け):
{
"company": "EisnerAmper",
"search_titles": ["Partner", "Controller", "VP Finance"],
"contacts": [
{
"name": "Jane Smith",
"title": "Partner",
"company": "EisnerAmper",
"linkedin_url": "https://linkedin.com/in/janesmith",
"location": "New York, NY"
}
],
"total_found": 10,
"sources": ["fiber", "crustdata", "pdl"]
}
要約行:
[会社名]の[役職]に該当する連絡先を X 件見つけました。使用したソース:[結果が返されたソースの一覧]。
すべてのフォールバックを試しても連絡先が 3 件未満の場合は、ユーザーに次のように伝えます。
連絡先は X 件のみ見つかりました。会社の規模が小さい、役職が一般的ではない、またはこの会社に関するデータベースのカバレッジが限られている可能性があります。対象とする役職を広げるか、会社名の別の表記をお試しください。
人物検索ツールのリファレンス
3 つのツールはいずれも GooseWorks の coworker でのみ利用でき、すべて有料です。各ツールの説明に料金が記載されています。検索のたびに、事前に料金を提示してください。
| ツール | 目的 | 課金方法 | 引数 |
|---|---|---|---|
fiber_person_search | 自然言語または構造化条件による人物検索 | 返されたレコードごと | query(自然言語)、search_params(構造化条件)、page_size(1~100、デフォルト 25)、cursor |
crustdata_person_search | 構造化フィルター検索 | limit の値にかかわらずページごと | conditions(column/type/value のリスト)、filter_op(and または or)、limit(1~100、デフォルト 25)、cursor |
pdl_person_search | プレミアム人物検索、最終手段 | 返されたレコードごと | job_titles、company_names、job_title_levels、job_title_role、location_country、location_region、location_locality、num_results(1~25、デフォルト 1)、query(フォールバック) |
GooseWorks では Apollo の人物検索は非推奨です。姓が非表示になるため、アウトリーチには使用できません。使用しないでください。
Crustdata フィルター列
| 列 | 型 | 値の例 |
|---|---|---|
current_employers.name | = (完全一致), (.) (部分一致) | "EisnerAmper" |
current_employers.title | (.) (部分一致/パターン), = (完全一致) | "Partner", "CFO|Controller" |
region | = | "San Francisco" |
country | = | "United States" |
skills | (.) | "python" |
years_of_experience | >, <, between ("min,max") | "8" |
headline | (.) | "fractional CFO" |
例
基本:EisnerAmper のパートナーとコントローラーを検索する
Find Partners and Controllers at EisnerAmper
エージェントは10件分のFiberの料金を提示し、承認を得てから、query: "Partner OR Controller at EisnerAmper", page_size: 10 を指定してFiber検索(ステップ2)を実行します。
タイトルを追加する場合:Sage Intacct の利用企業で財務担当副社長とCFOを検索する
Find VP Finance and CFO at companies using Sage Intacct
エージェントはFiberクエリ "VP Finance OR CFO at companies using Sage Intacct" を作成します。
特定の種類の企業に所属する上級幹部
Find Managing Directors at CPA firms in San Francisco
エージェントはFiberクエリ "Managing Director at CPA firm San Francisco" を作成します。
判別のためにLinkedInのURLを指定する場合
Find Partners at EisnerAmper (https://linkedin.com/company/eisneramper)
エージェントは会社名「EisnerAmper」で検索し、結果を確認する際、類似した名前と区別するためにLinkedInのURLを使用します。
トラブルシューティング
人物検索ツールを利用できない
GooseWorksの同僚向け環境の外にいます。この連絡先検索はGooseWorksの同僚向け環境内でのみ実行できることをユーザーに伝え、そこで終了してください(「実行場所」を参照)。
結果が返されない
- 会社名の別表記を試す(例:「EisnerAmper」、「Eisner Amper」、「EisnerAmper LLP」)、またはCrustdataの会社列で
=の代わりに(.)を使用します - 対象の役職を広げる(例:「Partner」に「Managing Director」を追加します)
- 顧客が料金を承認した後、次の情報源(ステップ4~5)に進みます
関連性の低い結果が多すぎる
- 広範な役職名ではなく、より具体的な役職名を追加します
- Crustdataでは、部分一致の
(.)ではなく、完全一致する役職名に=を使用します regionまたはcountryの条件を追加します
情報源間で連絡先が重複している
このスキルはLinkedInのURLを使って重複を排除します。末尾のスラッシュの有無など、わずかに異なるURLを持つ類似の連絡先が表示された場合は、重複を排除する前に末尾のスラッシュとクエリパラメーターを取り除いてURLを正規化してください。
メタデータ
metadata:
requires:
mcp_servers: ["gooseworks"]
runs_in: "GooseWorks coworker only"
cost: "Paid per search; quote the price the tool states and get the customer's yes first"