00-gtm-router
Plan and run the full API-first GTM chain - the orchestrator (step 00) that turns an ICP description plus optional budget, volume, and urgency into the right…
Find local-business (SMB) prospects via Google Maps using the Apify Compass actor. Use for Zevenue Step-2 Discovery (Vertical) when the ICP is Maps-addressable - laundromats, salons, HVAC, yoga studios, gyms, clinics - and you need a normalized list of name, domain, address,
$ npx -y skills add Zevenue/headless-gtm --skill 02-apify-maps-discover --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/02-apify-maps-discoverContext preview
The summary Claude sees to decide when to auto-load this skill.
Find local-business (SMB) prospects via Google Maps using the Apify Compass actor. Use for Zevenue Step-2 Discovery (Vertical) when the ICP is Maps-addressable - laundromats, salons, HVAC, yoga studios, gyms, clinics - and you need a normalized list of name, domain, address,
name: 02-apify-maps-discover description: >- Find local-business (SMB) prospects via Google Maps using the Apify Compass actor. Use for Zevenue Step-2 Discovery (Vertical) when the ICP is Maps-addressable - laundromats, salons, HVAC, yoga studios, gyms, clinics - and you need a normalized list of name, domain, address, phone, rating, and review count ready for enrichment. Estimates cost and prompts before any run over $10. Requires APIFY_API_TOKEN.
Turn a vertical + a place into a clean prospect list, scraped from Google Maps via the maintained **Apify Compass** actor (`compass~crawler-google-places`). We wrap the best existing actor rather than build our own scraper - Compass already handles proxies, anti-bot, and layout drift, and offers built-in email/contact enrichment. Output is the normalized Zevenue ProspectRecord schema (JSON + CSV).
1. **Confirm inputs.** Need `search_term` (the vertical) and `geo` (the area). Defaults: `max_results=200`, `min_rating=4.0`. Ask only if missing/ambiguous. 2. **Estimate cost and gate.** The skill prints an estimate before calling the API. If it exceeds **$10**, it requires explicit confirmation (`--yes` or an interactive y/N). Never bypass this silently. 3. **Run the actor.** Calls the Compass sync endpoint with the built input (`searchStringsArray`, `locationQuery`, `maxCrawledPlacesPerSearch`, `placeMinimumStars`). Add enrichment only when asked (see flags). 4. **Normalize.** Each raw place is mapped to the shared 15-field ProspectRecord so it's comparable with the Outscraper / Google Places skills. 5. **Write the run folder.** Writes `runs/<run-id>/` per `headless-gtm-shared/CONVENTIONS.md`: `records.jsonl` (the shared chain format 03+ consume - `company`, `domain`, `person`, plus the firmographic fields), `tracker.json`, `meta.json` (count + spend estimate), `prospects.json` (all 15 ProspectRecord fields), and `records.csv` for humans. Report the row count and path; downstream skills read `runs/<run-id>/records.jsonl` (e.g. 05's `collect --records`).
# install deps once (use a venv - system Python is externally-managed) pip install -r ../headless-gtm-shared/requirements.txt export APIFY_API_TOKEN=... # console.apify.com → Settings → Integrations python discover.py \ --search-term "yoga studios" \ --geo "California" \ --max-results 200 \ --min-rating 4.0 \ [--include-emails] [--with-review-dates] \ [--out DIR] [--estimate-only] [--yes]
| Flag | Maps to | Default | |---|---|---| | `--search-term` | actor `searchStringsArray` | required | | `--geo` | actor `locationQuery` | required | | `--max-results` | `maxCrawledPlacesPerSearch` | 200 | | `--min-rating` | `placeMinimumStars` | 4.0 | | `--include-emails` | `scrapeContacts` (+$2/1K) | off | | `--with-review-dates` | `scrapePlaceDetailPage` (extra cost) | off | | `--estimate-only` | print cost, no API call | - | | `--yes` | skip the >$10 prompt | - |
`name, domain, website, phone, full_address, city, region, rating, reviews_count, latitude, longitude, place_id, category, last_review_date, source` → see [../headless-gtm-shared/schema.py](../headless-gtm-shared/schema.py).
| Mode | Flags | Est. price | |---|---|---| | Discovery | (default) | ~$2.10 / 1K | | Discovery + emails | `--include-emails` | ~$4.10 / 1K | | Typical 2K-record run | either | **$4–8** |
`last_review_date` is **off by default** - it needs Compass's per-place detail page (`--with-review-dates`), which adds cost and latency. The cheap default pull leaves it blank. Edit the cost constants at the top of `discover.py` if your account pricing differs from the doc's $2.10/1K figure.
count usually means the `geo` was too narrow or the term too specific.
skill.
validation skills.
distributable Maps tool** chosen here. Google Places was rejected (60-result per-query cap + Enterprise-tier cost for contact fields).
Deeper detail lives in the `reference/` folder - load the file you need:
async endpoints, the full input schema (every field + type), raw output fields, and limits.
15-field ProspectRecord, the raw→normalized field map, domain-extraction and dedup-key rules, and JSON/CSV samples.
$10 gate is computed, worked cost examples, and how to edit the constants.
`search_term` phrasings per Zevenue vertical, `geo` formatting, and how to size `max_results` / `min_rating`.
jobs (quick test, full 2K list with emails, multi-city, estimate-only dry run).
auth/token errors, timeouts, rate limits, the 300s sync cap, and field-name caveats.
GTM without the SaaS layer. An outbound pipeline built as agent skills for Claude Code and Codex: describe an ICP in plain English and the chain takes it from company discovery to verified, signal-ranked contacts - every step running on raw vendor APIs, not
Plan and run the full API-first GTM chain - the orchestrator (step 00) that turns an ICP description plus optional budget, volume, and urgency into the right…
The qualification gate of the GTM chain - judges every discovered company against the client's ICP before any paid enrichment, so credits are spent only on…
B2B company discovery and list building via the Prospeo search API. Use when the user wants to find companies from an ICP, build a prospect or TAM list, search…
Seed-based B2B company discovery via the Prospeo company-lookalike API. Use when the user has example companies and wants more like them - "find companies…
Scrapes a company website into clean, page-typed markdown using Firecrawl map + scrape + extract. Triggers on: "scrape this company", "read their website",…
Enriches company domains with structured signals from CrustData - funding rounds, headcount growth, department growth, and recent hires. Use when the user…