Install
$ agentstack add skill-keinsaasforever-gtm-pipeline-skills-gtm-demo ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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 No
- ✓ 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
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 →About
Demo
Generate a demo lead list of ~10 enriched contacts with personalized message examples, triggered by a webhook prompt.
Read ~/.claude/skills/gtm-pipeline/_shared/conventions.md before executing.
When to Use
- Webhook trigger: user submits a free demo form describing their target audience
- Goal: prove the AI agent writes authentic, non-generic outreach using real leads
- Scope: ~10 contacts, enriched with LinkedIn + email, 2–4 message examples
Demo Restrictions
- No phone enrichment — email only
- ~10 contacts (request 10–15, expect enrichment drop-off)
- Message generation is optional but recommended
- Signal search is opt-in — off by default. Enable via
--with-signalsflag or explicit user request. See Step 5.5.
Step 1 — Parse the Prompt & Ask Discovery Questions
The webhook prompt describes the user's target audience. Before running anything, extract or ask for:
Must have:
- What do you sell / offer?
- Who is your ideal customer? (industry, role, company size, location)
- What's your value proposition?
- What tone? (formal vs. casual, examples if possible)
- Is this for recruiting OR selling to customers?
If not in the prompt, infer or ask:
- Target job titles
- Target location
- Target company size or type
Do NOT proceed to search until ICP is clear enough to build a meaningful filter.
Save ICP to: {client-slug}-gtm/context/icp.md
Step 2 — Create Working Directory
Create the {client-slug}-gtm/ directory structure as defined in conventions.md. Write the ICP definition to context/icp.md.
Step 3 — People Search (10 contacts)
Use the people-search skill to find ~10–15 contacts.
Provider selection for demo:
- Prefer BetterContact Lead Finder or FullEnrich Finder — both return LinkedIn URLs directly, needed for email enrichment
- If no company list (persona-based prompt), use Parallel FindAll or BC Search
Key fields to collect:
full_name, first_name, last_name,
job_title, company_name, company_domain,
linkedin_profile_url, location
Follow the people-search execution protocol: sandbox → test → review → run.
Step 4 — Contact Filter (ICP Ranking)
Run contact-filter on the 10–15 contacts found. Even small batches benefit from ICP ranking — it ensures the enrichment step focuses on the best-fit contacts.
- Applies job tier, industry tier, location tier, and company size classification
- Rejects hard non-ICP contacts
- Ranks passed contacts by priority
- Output:
csv/intermediate/contacts_filtered.csv
For demos: use a relaxed hard-reject threshold (allow tiers 1–5 to pass), prioritize ranking over filtering.
Step 5 — People Enrichment (Email Only)
Run people-enrichment on the filtered contacts. Demo mode: email only, no phone.
Recommended flow:
- FullEnrich v2 (email) — all contacts
- Pipe0 waterfall — for FE misses only
Additional enrichment for message personalization (if available):
- LinkedIn headline and summary (from LinkedIn scrape via PhantomBuster)
- Recent LinkedIn posts (2–3 per contact) — significantly improves message quality
Minimum viable fields for message generation:
name, job_title, company_name, linkedin_profile_url,
headline (optional), summary (optional), recent_posts (optional)
Step 5.5 — Signal Search (Optional)
Default: OFF. Enable when:
- The user explicitly asks for signal-anchored messages
- The webhook prompt mentions buying triggers (funding, hiring, transformation, recent news)
- The client's offering depends on timing signals to make sense (e.g. "we help post-Series-A companies scale ops")
- A
--with-signalsflag is passed to the demo invocation
Cost note: adds ~$0.01–0.05 per unique company (web search + scoring). On a 10-contact demo, that's typically 5–10 unique companies, so = 70 signal anchored in real recent news is the strongest hook the demo can produce.
Generation Process
- Write a client-specific system prompt (save to
prompts/message_prompt.md) - Generate 2–4 samples — include contacts with and without LinkedIn posts
- Review against quality checklist above
- If issues found, refine the system prompt and regenerate
- Only batch generate once quality is approved
System Prompt Template (key sections)
- Client context: what they sell, who they target, their value prop, tone
- Forbidden rules: no profile repetition, no generic flattery
- Message structure: hook → bridge → offer → CTA
- Hook examples: with posts / without posts
- Character limit: 320–450
Step 7 — Output
Deliver:
- CSV at
csv/output/contacts_enriched.csv: lead data + generated messages - Google Sheet (optional): formatted for easy review
Output CSV Columns
name, first_name, last_name, location, headline, summary,
linkedin_url, email, email_status,
company_name, job_title,
post_1_content, post_1_date,
post_2_content, post_2_date,
generated_message, char_count, has_posts
Messages saved separately to csv/output/messages.csv.
Quality Checklist (Before Delivering)
- [ ] Messages feel personal, not templated
- [ ] No profile info repetition
- [ ] Clear value proposition in every message
- [ ] Proper formatting (line breaks, character count 320–450)
- [ ] Hook differs between contacts (no copy-paste structure)
- [ ] All data fields populated correctly
- [ ] Client-specific context incorporated
Trigger Context
Webhook (demo form): Free demo trigger — user describes their ICP in a text prompt. Run this skill with ~10 contacts and 2–4 message samples.
Stripe payment (full list): After successful payment, run the full pipeline via the pipeline skill. See pipeline skill for orchestration.
What's Missing (To Document)
- LinkedIn post scraping via PhantomBuster API (launch, poll, download)
- Automated webhook integration (currently manual trigger)
- Stripe payment trigger integration
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: keinsaasforever
- Source: keinsaasforever/gtm-pipeline-skills
- License: MIT
- Homepage: https://www.keinsaas.com/de/research-agent
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.