create-image-fal
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Find decision-makers at a specific company using Apollo, Crustdata, Fiber, and PDL people search via Gooseworks MCP. Given a company name and target titles, returns a list of contacts with name, title, LinkedIn URL, and location.
$ npx -y skills add gooseworks-ai/goose-skills --skill company-contact-finder --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/company-contact-finderContext preview
The summary Claude sees to decide when to auto-load this skill.
Find decision-makers at a specific company using Apollo, Crustdata, Fiber, and PDL people search via Gooseworks MCP. Given a company name and target titles, returns a list of contacts with name, title, LinkedIn URL, and location.
name: company-contact-finder description: > Find decision-makers at a specific company using Apollo, Crustdata, Fiber, and PDL people search via Gooseworks MCP. Given a company name and target titles, returns a list of contacts with name, title, LinkedIn URL, and location. tags: [lead-generation]
Find decision-makers at a specific company by name and target titles. Uses Gooseworks MCP tools (Apollo, Crustdata, Fiber, PDL) with a layered fallback strategy to maximize results while minimizing cost.
| Input | Required | Default | Description | |-------|----------|---------|-------------| | company_name | Yes | -- | The company to search (e.g., "EisnerAmper") | | company_linkedin_url | No | -- | Company LinkedIn URL for disambiguation | | target_titles | Yes | -- | List of titles to find (e.g., ["Partner", "Controller", "VP Finance"]) | | num_results | No | 10 | How many contacts to return |
Parse the user's request to extract:
If the user does not provide target titles, ask for them. Suggest common senior titles based on context:
Apollo is the cheapest search provider. Start here for all searches.
**Call:**
apollo_person_search( person_titles: ["Partner", "Controller", "VP Finance"], organization_domains: ["eisneramper.com"], per_page: 25 )
If you don't have the company domain, use `q_keywords` with the company name:
apollo_person_search( person_titles: ["Partner", "Controller", "VP Finance"], q_keywords: "EisnerAmper", per_page: 25 )
**Parse the response:** Each result contains: name, title, company, LinkedIn URL, location, email, and other profile fields. Extract and collect all results into a working list.
Check how many results from Step 2 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:**
Fiber supports natural-language queries and may have profiles Apollo does not.
**Call:**
fiber_person_search( query: "[title1] OR [title2] OR [title3] at [company_name]", page_size: 25 )
**After results return:** 1. Parse results (extract name, title, company, LinkedIn URL, location) 2. Merge with all previous results 3. Deduplicate by LinkedIn URL
**Decision:**
Use Crustdata's structured filter search for more precise matching. Run one search per target title, then merge results.
**For each target title, call:**
crustdata_person_search(
conditions: [
{"column": "current_employers.name", "type": "in", "value": "[company_name]"},
{"column": "current_employers.title", "type": "(.)", "value": "[target_title]"}
],
filter_op: "and",
limit: 25
)**Example for "Partner" at EisnerAmper:**
crustdata_person_search(
conditions: [
{"column": "current_employers.name", "type": "=", "value": "EisnerAmper"},
{"column": "current_employers.title", "type": "(.)", "value": "Partner"}
],
filter_op: "and",
limit: 25
)**Optional seniority filter:** If the user requests senior decision-makers broadly (rather than specific titles), add:
{"column": "current_employers.seniority_level", "type": "in", "value": "VP,C-Level,Director"}**TIP:** Use `preview: true` first to check result count for free before fetching full data.
**After all title searches complete:** 1. Merge all results into one list 2. Deduplicate by LinkedIn URL (keep the first occurrence) 3. Combine with results from previous steps
**Decision:**
PeopleDataLabs is the most expensive search provider. Only use as a last resort when other sources have insufficient results.
**Call:**
pdl_person_search( job_titles: ["Partner", "Controller", "VP Finance"], company_names: ["EisnerAmper"], num_results: 10 )
**After results return:** 1. Parse results (extract name, title, company, LinkedIn URL, location) 2. Merge with all previous results 3. Deduplicate by LinkedIn URL
Present the final deduplicated contact list.
**Table format (for the user):**
| # | Name | Title | Company | LinkedIn URL | Location | |---|------|-------|---------|--------------|----------| | 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 format (for downstream skills):**
{
"company": "EisnerAmper",
"search_titles": ["Partner", "Controller", "VP Finance"],
"contacts": [
{
"name": "Jane Smith",
"title": "Partner",
"company": "EisnerAmper",
"linkedin_url": "hPut your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…
Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.