gtmclaude-codeskillset

A GTM Engineer's Claude Code Skillset Tour: 8 APIs, No SaaS

The open-source 8-API GTM skillset that replicates Clay, Apollo, Instantly and Smartlead. 5-8x cost reduction at volume.

6 min read

A popular post on r/gtmengineering this week: someone open-sourced their GTM setup as a Claude Code skillset bundling 8 APIs with no SaaS subscriptions. The point: a GTM engineer in 2026 can replicate most of what Clay/Apollo/Instantly/Smartlead do as a local skillset, for the cost of underlying API calls.

Here is the anatomy of that kind of skillset and where each piece lives.

The 8-API Skillset

Typical stack in one ~/.claude/skills/gtm folder:

  1. Scavio — Google + Reddit + YouTube signals per target account
  2. Apollo — contact identity (name, email, title)
  3. Hunter — email verification before send
  4. HubSpot / Salesforce API — CRM write-back
  5. Gmail / Outlook API — send + thread tracking
  6. OpenAI / Anthropic — drafting + classification
  7. Slack — reply notifications
  8. Airtable / Notion — lead database

None of this requires a visual workflow tool. Claude Code orchestrates the whole pipeline with a natural-language prompt, and the skill metadata tells it which tools exist and when to call them.

Skill Folder Shape

Text
~/.claude/skills/gtm/
├── skill.md              # description + when to invoke
├── src/
│   ├── scavio.ts         # search per account
│   ├── apollo.ts         # contact enrichment
│   ├── hunter.ts         # email verify
│   ├── crm.ts            # hubspot read/write
│   ├── draft.ts          # LLM compose
│   ├── send.ts           # gmail send
│   └── loop.ts           # orchestrator
└── prompts/
    ├── draft-opener.md
    └── classify-reply.md

The Orchestrator

The loop.ts file ties everything together. Claude Code calls it once per session; the loop pulls contacts, enriches, drafts, queues for send.

export async function runGtmLoop({ limit = 50 }: { limit?: number }) {
  const contacts = await crm.getContactsToContact(limit);

  for (const contact of contacts) {
    const signals = await scavio.liveSignalsFor(contact.company);
    const enriched = await apollo.enrich(contact.email);
    const verified = await hunter.verify(enriched.email);
    if (!verified) continue;

    const draft = await llm.draftOpener({ contact, signals, enriched });
    await crm.queueDraft(contact.id, draft);
  }
}

Why This Beats Clay

Clay is a great product. It's also $800-5000/month, locks you into its workflow UI, and every new field is a per-row credit. A Claude Code skillset calling the underlying APIs directly costs whatever the APIs cost — nothing on top. For a team sending 10-20k emails/month, the difference is $10k+/year.

The tradeoff is real: you lose the Clay UI, the templates, and the non-engineer accessibility. For GTM engineers comfortable in a terminal, the tradeoff is favorable. For non-technical RevOps teams, Clay still wins on time-to-ship.

Cost Per Contact

  • Scavio signals: ~$0.003
  • Apollo enrichment: ~$0.05
  • Hunter verify: ~$0.03
  • LLM drafting: ~$0.02
  • Total: ~$0.10 per contact

vs Clay at ~$0.50-0.80 per similar-depth enrichment. 5-8x cost reduction at volume.

Full open-source skillset is referenced in the GTM engineer stack solution. Clone it, plug in your keys, run.