MCPInstall

company-contact-finder

Find decision-makers at a specific company using Fiber, Crustdata and PDL people search inside the GooseWorks coworker. Given a company name and target titles, returns a list of contacts with name, title, LinkedIn URL, and location.

Installs
58
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/gooseworks-ai/goose-skills --skill company-contact-finder
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads company-contact-finder automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

company-contact-finder

Find decision-makers at a specific company by name and target titles. Uses the GooseWorks coworker's people-search tools (Fiber, Crustdata, PDL) with a layered fallback, so you only pay for the next source when the last one came up short.

Where this runs

This skill runs only inside the GooseWorks coworker (the coworker in the GooseWorks app). The people-search tools it uses exist only there. They are not on the GooseWorks server that Claude, ChatGPT and other outside agents connect to.

If fiber_person_search, crustdata_person_search and pdl_person_search are not in your tool list, you are outside the coworker. Tell the user that this contact search runs only inside the GooseWorks coworker, and stop. Do not try other tools in their place.

Spend rule

Every search in this skill is paid. Before each paid search or page, tell the customer what it costs and wait for their yes.

  • Take the price from the tool's own description, for the page size you are about to ask for. Do not quote a price from memory or from this file.
  • Ask again before every next page or next source. A yes covers one search, not the whole fallback chain.
  • If they say no, stop and show what you have so far.

Inputs

InputRequiredDefaultDescription
company_nameYes--The company to search (e.g., "EisnerAmper")
company_linkedin_urlNo--Company LinkedIn URL for disambiguation
target_titlesYes--List of titles to find (e.g., ["Partner", "Controller", "VP Finance"])
num_resultsNo10How many contacts to return

Procedure

Step 1: Understand the Request

Parse the user's request to extract:

  • company_name (required) -- the company to search at
  • company_linkedin_url (optional) -- helps disambiguate common names
  • target_titles (required) -- list of job titles or roles to find (e.g., ["Partner", "Controller", "VP Finance", "CFO"])
  • num_results (optional, default 10) -- how many contacts to return

If the user does not provide target titles, ask for them. Suggest common senior titles based on context:

  • For accounting/CPA firms: Partner, Managing Director, Controller, CFO, VP Finance
  • For tech companies: VP Engineering, CTO, Head of Product, Director of Engineering
  • For general B2B: VP, Director, C-Level, Head of

Step 2: Fiber Search (Primary)

Fiber takes a natural-language query and charges per record returned, so ask only for as many records as you need.

Quote the price for this page size and get the customer's yes. Then use fiber_person_search:

fiber_person_search(
  query: "[title1] OR [title2] OR [title3] at [company_name]",
  page_size: 10
)

Set page_size to num_results (at most 100). For a next page, pass the cursor from the previous response, after a new yes.

You can pass structured filters in search_params instead of query (for example {"job_titles": ["CFO"], "locations": ["New York"]}). If you pass both, query wins.

Parse the response: Extract name, title, company, LinkedIn URL and location from each result into a working list.

Step 3: Evaluate Results

Check how many results so far match the target titles at the target company.

Quality checks:

  1. Filter out results where the company name does not match (fuzzy match is fine -- "EisnerAmper LLP" matches "EisnerAmper")
  2. Filter out results where the title does not reasonably match any target title
  3. Count remaining high-quality matches

Decision:

  • If 3+ quality matches found: skip to Step 6 (Output)
  • If fewer than 3 quality matches: proceed to Step 4

Step 4: Crustdata Structured Search (Fallback 1)

Crustdata's filter search matches company and title more precisely. It charges per page, whatever the page size, so set limit to the most results you would use (at most 100).

Quote the price for one page and get the customer's yes. Then use 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
)

(.) is a contains / pattern match, so one search can cover several titles joined with |. If that finds nothing, run one search per title instead; each is its own paid page, so quote and ask for each. Use (.) on the company name too if the exact name finds nothing (e.g. "EisnerAmper LLP").

Example for Partners and Controllers at 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
)

Senior leaders broadly: if the user wants senior decision-makers rather than specific titles, match on the title instead of a seniority field:

{"column": "current_employers.title", "type": "(.)", "value": "Chief|VP|Vice President|Director|Head of|Partner"}

For a next page, pass the cursor from the previous response, after a new yes.

After results return:

  1. Merge with all previous results
  2. Deduplicate by LinkedIn URL (keep the first occurrence)

Decision:

  • If 3+ total unique quality matches: skip to Step 6 (Output)
  • If still fewer than 3: proceed to Step 5

Step 5: PDL Search (Fallback 2, last resort)

PeopleDataLabs costs the most per record of the three. Use it only when the other sources came up short, and ask for only the records still missing.

Quote the price for this number of records and get the customer's yes. Then use pdl_person_search:

pdl_person_search(
  job_titles: ["Partner", "Controller", "VP Finance"],
  company_names: ["EisnerAmper"],
  num_results: 5
)

num_results defaults to 1 and is at most 25. Use structured fields; query is only a fallback when they cannot express the search.

After results return:

  1. Parse results (extract name, title, company, LinkedIn URL, location)
  2. Merge with all previous results
  3. Deduplicate by LinkedIn URL

Step 6: Output

Present the final deduplicated contact list.

Table format (for the user):

#NameTitleCompanyLinkedIn URLLocation
1Jane SmithPartnerEisnerAmperhttps://linkedin.com/in/janesmithNew York, NY
2John DoeControllerEisnerAmperhttps://linkedin.com/in/johndoeChicago, IL
...

JSON format (for downstream skills):

{
  "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"]
}

Summary line:

Found X contacts matching [titles] at [company]. Sources used: [list of sources that returned results].

If fewer than 3 contacts were found after all fallbacks, tell the user:

Only found X contacts. The company may be small, the titles may be uncommon, or the databases may have limited coverage for this company. Consider broadening the target titles or trying alternate company name spellings.


People-search tools reference

All three are on the GooseWorks coworker only, and all are paid. Each tool's description states its price; quote it before every search.

ToolPurposeHow it chargesArguments
fiber_person_searchNatural-language or structured people searchPer record returnedquery (natural language), search_params (structured), page_size (1-100, default 25), cursor
crustdata_person_searchStructured filter searchPer page, whatever the limitconditions (list of column / type / value), filter_op (and or or), limit (1-100, default 25), cursor
pdl_person_searchPremium people search, last resortPer record returnedjob_titles, company_names, job_title_levels, job_title_role, location_country, location_region, location_locality, num_results (1-25, default 1), query (fallback)

Apollo people search is deprecated in GooseWorks: it hides surnames, so it cannot be used for outreach. Do not use it.

Crustdata Filter Columns

ColumnTypesExample Values
current_employers.name= (exact), (.) (contains)"EisnerAmper"
current_employers.title(.) (contains / pattern), = (exact)"Partner", "CFO|Controller"
region="San Francisco"
country="United States"
skills(.)"python"
years_of_experience>, <, between ("min,max")"8"
headline(.)"fractional CFO"

Examples

Basic: Find Partners and Controllers at EisnerAmper

Find Partners and Controllers at EisnerAmper

Agent quotes the Fiber price for 10 records, gets a yes, then runs the Fiber search (Step 2) with query: "Partner OR Controller at EisnerAmper", page_size: 10.

With more titles: Find VP Finance and CFO at Sage Intacct users

Find VP Finance and CFO at companies using Sage Intacct

Agent builds the Fiber query "VP Finance OR CFO at companies using Sage Intacct".

Senior leaders at a specific kind of firm

Find Managing Directors at CPA firms in San Francisco

Agent builds the Fiber query "Managing Director at CPA firm San Francisco".

With a LinkedIn URL for disambiguation

Find Partners at EisnerAmper (https://linkedin.com/company/eisneramper)

Agent searches by the company name "EisnerAmper" and uses the LinkedIn URL to tell it apart from similar names when checking results.


Troubleshooting

People-search tools not available

You are outside the GooseWorks coworker. Tell the user this contact search runs only inside the GooseWorks coworker, and stop (see "Where this runs").

No results returned

  • Try alternate spellings of the company name (e.g., "EisnerAmper" vs "Eisner Amper" vs "EisnerAmper LLP"), or (.) instead of = on the Crustdata company column
  • Broaden target titles (e.g., add "Managing Director" alongside "Partner")
  • Move to the next source (Steps 4-5), after the customer's yes to its price

Too many irrelevant results

  • Add more specific title terms rather than broad ones
  • In Crustdata, use = for an exact title match instead of (.)
  • Add a region or country condition

Duplicate contacts across sources

The skill deduplicates by LinkedIn URL. If you see near-duplicates with slightly different URLs (e.g., trailing slashes), normalize URLs before deduplication by stripping trailing slashes and query parameters.


Metadata

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"

FAQ

What does the company-contact-finder skill do?

Find decision-makers at a specific company using Fiber, Crustdata and PDL people search inside the GooseWorks coworker. Given a company name and target titles, returns a list of contacts with name, title, LinkedIn URL, and location.

How do I install company-contact-finder?

Run npx skills add https://github.com/gooseworks-ai/goose-skills --skill company-contact-finder in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/company-contact-finder/ (personal) or .claude/skills/company-contact-finder/ (project).

Which AI agents can use company-contact-finder?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is company-contact-finder safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains company-contact-finder?

It is published by gooseworks-ai in gooseworks-ai/goose-skills. It has 58 recorded installs.

More from gooseworks-ai/goose-skills

View all →

restaurant-booking

gooseworks-ai/goose-skills

Book restaurant reservations via browser automation. Use when asked to make dinner reservations, book a table, or find availability at restaurants. Supports OpenTable, Resy, and direct restaurant booking sites.

send-sms-textbelt

gooseworks-ai/goose-skills

Send SMS text messages to phone numbers. Use when the user asks to send a text, send an SMS, text someone, message a phone number, or send a notification via text message.

245 installs

job-scraper

gooseworks-ai/goose-skills

Search for job postings across LinkedIn and Indeed. Use when users want to find open roles, monitor hiring signals, identify companies hiring for specific positions, or research competitor hiring activity. Returns job title, company, location, salary, description, seniority level, and direct apply URLs. No login or cookies required.

Business & Finance149 installs

linkedin-outreach

gooseworks-ai/goose-skills

End-to-end LinkedIn outreach campaign builder. Takes leads from Supabase, upstream skills, or CSV. Aligns on campaign goal and tone, writes personalized LinkedIn message sequences (connection request + follow-ups + optional InMail), presents for review, and exports for the user's outreach tool (Dripify, Botdog, Expandi, or manual CSV). Logs to Supabase outreachlog.

Marketing & SEO112 installs

find-skill

gooseworks-ai/goose-skills

Find and install skills from the Orthogonal skill library. Use when you need capabilities you don't have, want to discover available skills, or need to add new tools to your agent.

106 installs

linkedin-job-scraper

gooseworks-ai/goose-skills

Scrapes LinkedIn job postings using the JobSpy library (python-jobspy). Use this skill whenever the user wants to find jobs on LinkedIn, search for open roles, pull job listings, build a job pipeline, source job targets for GTM research, or monitor hiring signals. Even if the user just says "find me some jobs" or "what roles is [company] hiring for", use this skill. It runs a local Python script that outputs a CSV of job postings with title, company, location, salary, job type, description, and direct URLs.

Marketing & SEO102 installs

Popular marketing & seo skills

View category →

reddit-automation

flowkit-labs/skills

Find Reddit threads where people are genuinely asking for what you offer, then draft short, genuinely helpful replies — disclosing your affiliation honestly and naming your product only when it truly answers the question. Two moves: discovery — scan the right subreddits for real needs (recommendation asks, expressed pain, competitor mentions) and rank the few threads where you can actually help; drafting — write from real experience, respect each community's self-promo rules, and keep a human in the loop to review and post. This markets on Reddit the honest way: contribute value, disclose who you are, never astroturf. Distilled from the playbook behind doany.ai's Reddit agent. Triggers on "find reddit opportunities", "reddit marketing", "reddit automation", "reply on reddit for my product", "reddit community engagement", "reddit lead gen", or any ask to turn Reddit threads into genuine, disclosed marketing replies.

Marketing & SEO1.1M installs

twitter-automation

101-skills/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO880K installs

twitter-automation

magentosh/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO771.7K installs

twitter-automation

qu-skills/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO564.3K installs

product-launch-video

heygen-com/hyperframes

Turn a product or marketing URL, pasted script, or brief into a product launch / promo video — SaaS promos, feature reveals, product demos, app and company launches. Use when the user wants to market, launch, promote, or reveal a product; the default for any commercial URL. Site tours / showcases of a website route here too — the brief carries the show-it-as-is intent. Unclear → /hyperframes.

Marketing & SEO538.7K installs

twitter-automation

skills-shell/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO453.7K installs