Blitz GTM Brainstorm
Turn a fuzzy GTM goal into a precise, validated GTM brief (gtm-brief.yaml) that
blitz-create-script compiles into a runnable script with no silent failures. Blitz returns
verified B2B decision-makers from a 380M+ LinkedIn-based dataset; the brief is the spec.
Quick start
Ask the user for their goal in one sentence ("reach Heads of Sales at US Series-B SaaS"), then
work the steps below and output gtm-brief.yaml. Do not write code here — that is
blitz-create-script's job.
scripts/ and references/ paths below are relative to this skill's own directory — run the
helpers from there (e.g. bash <skill-dir>/scripts/pull_enums.sh list), not the user's project root.
Workflow
Pick the motion and the endpoint. Map the goal to exactly one endpoint. Details and
request shapes: references/endpoint-decision.md.
- Many companies, by ICP → Find People (
/v2/search/people)
- One named account, best decision-maker → Waterfall ICP (
/v2/search/waterfall-icp-keyword)
- Every person at one company → Employee Finder (
/v2/search/employee-finder)
- Companies, not people → Company Search (
/v2/search/companies)
Draft the filters — recall-first. Read references/strategy.md
first, then build the backbone from the dense fields nearly every record has: job_title
(full-text — spray synonyms, long/short forms, multilingual variants), company keywords
(searches the description), city, headcount, min_connections. Add the sparse enums
(industry, job_level, job_function, type, revenue) only as precision knobs — each can
silently shrink the result to tagged-only records. Only fill the keys the chosen endpoint uses.
Validate every enum you do use — live. Case-sensitive enums silently return 0 results on
any typo ("SaaS" ≠ "Software Development"). For each industry / job_level /
job_function / employee_range / sales_region / country_code / type value in the brief,
confirm an EXACT match with bash scripts/pull_enums.sh search <enum> "<value>" (e.g.
search industry "health"; list shows all enums, get <enum> dumps the small ones). Fix any
miss with the user. The script pulls live from the Blitz OpenAPI spec — the same source the SDK
generates its enums from; if offline it falls back to the committed
references/enums.json (may be stale — re-verify). Set
enums_verified: true once the enums you use all match (a keyword-only search that uses no enums
is trivially verified). This guards typos — it is not a nudge to lean on enums; prefer the
keyword backbone from step 2.
Probe volume, decide partitioning. Run
echo '<request-json>' | BLITZ_API_KEY=... bash scripts/probe_volume.sh /v2/search/people
to read total_results (Find People / Company Search) or total_pages (Employee Finder). If
the population exceeds the reachable ceiling (~50k people/companies, ~10k per company), set
volume.exceeds_ceiling: true and a partition_plan. See
references/volume-and-partition.md.
Enrichment, output, language. email (any leads plan), phone (US-only — warn if the
targets are not US), reverse lookups. Output: csv / json / stdout. Language: python,
typescript, or javascript — record the user's choice as-is (don't default a JS user to TS).
Emit the brief. Write gtm-brief.yaml per
references/gtm-brief-schema.md and offer to save it in the
user's working directory. Then tell the user to run blitz-create-script.
Rules
- Never guess an enum value you use. Pull live and match exactly, on every run (the dataset
changes) — but prefer the dense keyword backbone, so you depend on enums as little as possible.
- Never put the API key in the brief. It lives in
BLITZ_API_KEY / .env only.
- If the user already knows their ICP, skip ahead — but still validate enums (step 3).
1---2name: blitz-gtm-brainstorm3description: Interviews the user about a go-to-market goal and produces a validated GTM brief covering the motion, the Blitz endpoint choice (Find People, Waterfall ICP, Company Search, or Employee Finder), an ICP/account definition with case-sensitive enum-validated filters, an enrichment plan (email/phone), an output target, the language, and a volume estimate. Use when the user wants to find leads, build a prospect or account list, define an ICP, plan outreach sourcing, or scope a Blitz API search before writing code, or says "who should I target", "build me a lead list", or "plan a GTM motion". Produces gtm-brief.yaml and hands off to blitz-create-script.4---56# Blitz GTM Brainstorm78Turn a fuzzy GTM goal into a precise, validated **GTM brief** (`gtm-brief.yaml`) that9`blitz-create-script` compiles into a runnable script with no silent failures. Blitz returns10verified B2B decision-makers from a 380M+ LinkedIn-based dataset; the brief is the spec.1112## Quick start1314Ask the user for their goal in one sentence ("reach Heads of Sales at US Series-B SaaS"), then15work the steps below and output `gtm-brief.yaml`. Do not write code here — that is16`blitz-create-script`'s job.1718`scripts/` and `references/` paths below are relative to this skill's own directory — run the19helpers from there (e.g. `bash <skill-dir>/scripts/pull_enums.sh list`), not the user's project root.2021## Workflow22231. **Pick the motion and the endpoint.** Map the goal to exactly one endpoint. Details and24 request shapes: [references/endpoint-decision.md](references/endpoint-decision.md).25 - Many companies, by ICP → **Find People** (`/v2/search/people`)26 - One named account, best decision-maker → **Waterfall ICP** (`/v2/search/waterfall-icp-keyword`)27 - Every person at one company → **Employee Finder** (`/v2/search/employee-finder`)28 - Companies, not people → **Company Search** (`/v2/search/companies`)29302. **Draft the filters — recall-first.** Read [references/strategy.md](references/strategy.md)31 first, then build the backbone from the **dense** fields nearly every record has: `job_title`32 (full-text — spray synonyms, long/short forms, multilingual variants), company `keywords`33 (searches the description), city, headcount, `min_connections`. Add the **sparse** enums34 (`industry`, `job_level`, `job_function`, `type`, `revenue`) only as precision knobs — each can35 silently shrink the result to tagged-only records. Only fill the keys the chosen endpoint uses.36373. **Validate every enum you *do* use — live.** Case-sensitive enums silently return 0 results on38 any typo (`"SaaS"` ≠ `"Software Development"`). For each `industry` / `job_level` /39 `job_function` / `employee_range` / `sales_region` / `country_code` / `type` value in the brief,40 confirm an EXACT match with `bash scripts/pull_enums.sh search <enum> "<value>"` (e.g.41 `search industry "health"`; `list` shows all enums, `get <enum>` dumps the small ones). Fix any42 miss with the user. The script pulls live from the Blitz OpenAPI spec — the same source the SDK43 generates its enums from; if offline it falls back to the committed44 [references/enums.json](references/enums.json) (may be stale — re-verify). Set45 `enums_verified: true` once the enums you use all match (a keyword-only search that uses no enums46 is trivially verified). This guards typos — it is **not** a nudge to lean on enums; prefer the47 keyword backbone from step 2.48494. **Probe volume, decide partitioning.** Run50 `echo '<request-json>' | BLITZ_API_KEY=... bash scripts/probe_volume.sh /v2/search/people`51 to read `total_results` (Find People / Company Search) or `total_pages` (Employee Finder). If52 the population exceeds the reachable ceiling (~50k people/companies, ~10k per company), set53 `volume.exceeds_ceiling: true` and a `partition_plan`. See54 [references/volume-and-partition.md](references/volume-and-partition.md).55565. **Enrichment, output, language.** `email` (any leads plan), `phone` (US-only — warn if the57 targets are not US), reverse lookups. Output: `csv` / `json` / `stdout`. Language: `python`,58 `typescript`, or `javascript` — record the user's choice as-is (don't default a JS user to TS).59606. **Emit the brief.** Write `gtm-brief.yaml` per61 [references/gtm-brief-schema.md](references/gtm-brief-schema.md) and offer to save it in the62 user's working directory. Then tell the user to run **blitz-create-script**.6364## Rules6566- Never guess an enum value you use. Pull live and match exactly, on every run (the dataset67 changes) — but prefer the dense keyword backbone, so you depend on enums as little as possible.68- Never put the API key in the brief. It lives in `BLITZ_API_KEY` / `.env` only.69- If the user already knows their ICP, skip ahead — but still validate enums (step 3).