AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Gtm Pipeline:company Search

skill-vivekkhimani-gtm-tools-template-gtm-company-search · by vivekkhimani

Build a list of companies matching ICP criteria. Use when a client needs a company list — no existing list, wants to expand, or signal-based discovery needs enrichment. Providers: Sales Navigator + PhantomBuster, Parallel FindAll, Firecrawl Agent, BC/FE byproduct, web scraping. Also triggers on "build company list", "find companies", "company search".

No reviews yet
0 installs
10 views
0.0% view→install

Install

$ agentstack add skill-vivekkhimani-gtm-tools-template-gtm-company-search

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-vivekkhimani-gtm-tools-template-gtm-company-search)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Gtm Pipeline:company Search? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Company Search

Build a list of companies matching ICP criteria. Returns a CSV with domains and LinkedIn URLs.

Read .agents/skills/_shared/conventions.md before executing.


When to Use

  • Workflow 1 (Company-First): Client needs a company list — no existing list, or wants to expand beyond what they have
  • Workflow 2 (Signal-First): Signal-based discovery has found companies — this skill enriches the initial list with domains/LinkedIn URLs if missing

Inputs

| Input | Required | Source | |-------|----------|--------| | ICP definition | Yes | User prompt, context/icp.md, or discovery questions | | SN search URL | Optional | Sales Navigator saved search | | Existing partial list | Optional | User-provided CSV |


Provider Selection

Ask the user which provider to use.

From Sales Navigator (most comprehensive B2B data)

  1. SN Account Search → PhantomBuster SN Account Scraper
  • Rich data: name, industry, headcount, location, LinkedIn URL, SN URL, employee search URLs, revenue range, growth metrics, department headcounts
  • PhantomBuster agent: Sales Navigator Account Scraper
  • Input: SN search URL
  • Output: full company profile data
  1. SN Lead Search → PhantomBuster Employee Export
  • When you want contacts directly (skip separate people search)
  • PhantomBuster agent: Sales Navigator Employee Export
  • Input: spreadsheet of company URLs

From Parallel FindAll (signal-based discovery)

Endpoint: POST https://api.parallel.ai/v1beta/findall/runs Required header: parallel-beta: findall-2025-09-15 Auth: x-api-key: $PARALLEL_API_KEY

Always ask which processor to use: core, core2x, pro, ultra

Best when combined with signal criteria in the objective. Returns matched companies with reasoning and confidence.

{
  "objective": "Find all DACH-based B2B SaaS companies with 10-200 employees that have shown signals of operational scaling challenges, digital transformation initiatives, or recent funding in the last 4 months. Focus on non-technical sectors: e-commerce, professional services, recruiting agencies, marketing agencies.",
  "entity_type": "companies",
  "match_conditions": [
    {"name": "location", "description": "Company must be headquartered in DACH region (Germany, Austria, Switzerland)"},
    {"name": "size", "description": "Company must have between 10 and 200 employees"},
    {"name": "recent_signals", "description": "Company must have shown at least one buying signal in the last 4 months"}
  ],
  "generator": "core",
  "match_limit": 25
}

Writing good objectives:

  • Write like a research brief — detailed, with source guidance
  • Describe what signals/sources to start from
  • Include geographic, industry, and size constraints in text AND as match_conditions
  • Include a LinkedIn URL condition if needed downstream

Polling:

GET /v1beta/findall/runs/{findall_id}         # status
GET /v1beta/findall/runs/{findall_id}/result   # results

Timeout: 15 min for core/core2x, 30 min for pro/ultra

Enrich FindAll results to add missing fields:

POST /v1beta/findall/runs/{findall_id}/enrich

Always include company_website and linkedin_company_url in output schema.

Always check latest docs via context7 (libraryName: parallel-web).

From Firecrawl Agent (web agent)

POST https://api.firecrawl.dev/v2/agent with spark-1-pro

  • Include structured schema with citation fields for traceability
  • Good for niche criteria or specific industry directories

From BetterContact or FullEnrich (people search as company source)

When running people search via BC Lead Finder or FE Finder, company data is returned as a byproduct — no extra API cost:

  • BC Lead Finder: company_name, company_domain, company_linkedin_url per lead result
  • FE Finder: current_company_name, current_company_domain per result

Use this when you already need contacts AND want to build/verify the company list simultaneously.

Both tools also offer free dashboard search for one-time manual company lookups.

From Pipe0 Amplemarket (company search)

Endpoint: POST https://api.pipe0.com/v1/searches/run/sync Search ID: companies:profiles:amplemarket@1 Auth: Authorization: Bearer $PIPE0_API_KEY

{
  "config": {"environment": "production", "dedup": {"strategy": "default"}},
  "searches": [{
    "search_id": "companies:profiles:amplemarket@1",
    "config": {
      "limit": 100,
      "filters": {}
    }
  }]
}

Response fields:

results = response.get("results", [])
for r in results:
    name    = r.get("company_name", {}).get("value", "")
    website = r.get("company_website_url", {}).get("value", "")
    desc    = r.get("company_description", {}).get("value", "")
    li_url  = r.get("company_profile_url", {}).get("value", "")
    match   = r.get("amplemarket_company_match", {}).get("value", "")

Cost: 2.00 credits per page (100 results), per-search billing


From Web Scraping

  • Industry directories, association member lists, competitor customer lists
  • Firecrawl scrape or manual collection

Missing Data Recovery

| Have | Missing | Solution | |------|---------|----------| | Names / LinkedIn URLs | Domains | SerpAPI domain lookup (see people-search Step 0) | | Names / domains | LinkedIn URLs | PhantomBuster URL Finder | | LinkedIn company URLs | SN URLs | PhantomBuster can derive |

SerpAPI Domain Lookup

GET https://serpapi.com/search
  ?engine=google_light
  &q={company_name}
  &location={target_country}
  &google_domain={country_google}
  &api_key=$SERPAPI_API_KEY

Extract: urllib.parse.urlparse(organic_results[0]["link"]).netloc.lstrip("www.")

Always spot-check domains — SerpAPI returns wrong results for generic names and global brands.


PhantomBuster API

Auth: X-Phantombuster-Key-1: 
Launch:  POST /api/v2/agents/launch  (agent ID + override arguments)
Poll:    GET /api/v2/agents/fetch?id=  (status == "finished")
Result:  GET /api/v2/containers/fetch-result-object  (or download S3 CSV)

Agent IDs and detailed API: see PhantomBuster API learnings doc (requested at runtime if needed).


Execution Protocol

1. Clarify ICP

Before searching, ensure these are defined:

  • Industry / vertical
  • Company size (headcount range)
  • Location / geography
  • Revenue range (if relevant)
  • Exclusions (e.g. no software companies)

2. Select Provider

Present options to user with estimated costs. Get approval.

3. Test Run

  • For FindAll: start with match_limit: 10, review results
  • For SN+PB: export 10–20 companies, verify data quality
  • For Firecrawl Agent: test with a small prompt

4. Review

  • Check company names, domains, LinkedIn URLs, industries
  • Flag mismatches or low confidence results
  • Get approval for full run

5. Full Run

  • Submit full search
  • Save results to csv/input/companies_raw.csv

Output

CSV at csv/input/companies_raw.csv:

company_name, company_domain, company_linkedin_url,
industry, location, country, headcount, headcount_range,
source

Additional fields from SN (if available):

salesNavigatorCompanyUrl, employeeSearchUrl, decisionMakersSearchUrl,
yearFounded, revenue_range, growth_6m, growth_1y, growth_2y,
headcount_engineering, headcount_sales, headcount_operations, headcount_IT

What's Missing (To Document)

  • PhantomBuster API: full launch/poll/download flow for each agent (SN Account Scraper, Employee Export, URL Finder)
  • Firecrawl Agent (POST /v2/agent): request/response format with structured schema
  • Exa Websets via Pipe0: company discovery endpoint
  • n8n workflow API: export/import existing flows for new client instances

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.