Lead gen tool builder skill

Lead generation tool builder skill for Claude Code and Codex: scaffolds a complete, self-hostable, ZoomInfo-style B2B lead-generation web app — company & contact search UI, firmographic and technographic filters, CSV list import with match & enrich, CSV export, and one-click push to HubSpot and Salesforce — powered by the Explorium API.

by explorium-ai·MIT license·★ 197 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
# Lead Gen Tool Builder

Scaffolds a working, self-hostable **lead generation tool**: a ZoomInfo-style
web app with a left filter rail, a sortable company/contact results table, and
a CRM push bar — backed by the Explorium data API, with CSV import/export and
field-mapped push to HubSpot and Salesforce.

Unlike the other skills in this repo, which run a prospecting or enrichment
*workflow* inside your current Claude Code session via the Vibe Prospecting
MCP server, this skill produces a **standalone app** the user can run, deploy,
and hand to their team — a real lead-gen tool, not a one-off list. Reach for
`list-builder` or `enrich-company` when the user wants a prospect list right
now; reach for this skill when they want a *tool* they can keep using, host,
demo, or white-label.

**No personal keys are stored in this skill.** The bundled backend reads every

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of Lead gen tool builder

explorium-ai/main1 file shown
SKILL.md
Show the full text130 lines

Lead Gen Tool Builder

Scaffolds a working, self-hostable lead generation tool: a ZoomInfo-style web app with a left filter rail, a sortable company/contact results table, and a CRM push bar — backed by the Explorium data API, with CSV import/export and field-mapped push to HubSpot and Salesforce.

Unlike the other skills in this repo, which run a prospecting or enrichment workflow inside your current Claude Code session via the Vibe Prospecting MCP server, this skill produces a standalone app the user can run, deploy, and hand to their team — a real lead-gen tool, not a one-off list. Reach for list-builder or enrich-company when the user wants a prospect list right now; reach for this skill when they want a tool they can keep using, host, demo, or white-label.

No personal keys are stored in this skill. The bundled backend reads every credential from a local .env file at runtime — nothing is hardcoded, so the generated app is safe to fork, self-host, and share outside your org.

When to use

Trigger this for any request to build a lead-gen / prospecting / sales- intelligence app, a company-or-contact search interface, an Explorium-powered app, a self-hosted ZoomInfo/Apollo.io/Clearbit alternative, or a "find leads → enrich → push to CRM" tool that should exist as its own app rather than a single list. Example phrasings: "build me a lead gen tool", "I want something like ZoomInfo but self-hosted", "scaffold a prospecting app with HubSpot push", "give my team a company search tool backed by Explorium".

What you get

The bundled template (assets/leadgen-starter/) is a ready-to-run app:

  • Company generator and Contact generator — two search modes over Explorium's /businesses and /prospects endpoints.
  • Filter rail mapped 1:1 to Explorium fields: industry, employee count, revenue, company age, HQ country/region/city, tech stack, keywords, business events (funding, hiring, M&A…); for people — job title, seniority, department, has-email / has-phone availability.
  • Sample-aware results table — sortable columns, bulk select, detail panel; the UI is explicit when Explorium returns a capped sample vs. every match.
  • Import a list — upload a CSV of companies or contacts, match it against Explorium, and enrich it.
  • CSV export of any result set or selection.
  • Push to CRM with a reviewable, editable field-mapping modal — Contacts → Salesforce Leads / HubSpot Contacts; Companies → Salesforce Accounts / HubSpot Companies.

Workflow

1. Copy the template into the user's workspace
cp -R "<this-skill-dir>/assets/leadgen-starter" ./leadgen-app
cd leadgen-app

Don't copy node_modules, dist, or .env — the template ships without them.

2. Get API keys

Only Explorium is required to search; HubSpot/Salesforce are optional and only needed for CRM push. Summarize from assets/leadgen-starter/README.md:

  • Explorium (required): sign up at developers.explorium.ai → API Keys.
  • HubSpot (optional): Settings → Integrations → Private Apps → create app with crm.objects.contacts.write + crm.objects.companies.write scopes.
  • Salesforce (optional): a Connected App using the OAuth 2.0 JWT Bearer flow — the bundled README has the exact openssl + Connected App steps.
3. Configure and run
cp .env.example .env      # paste in the keys from step 2
npm install
npm run dev                # API on :4000, web app on :5173

Open http://localhost:5173. Search works with just the Explorium key; the HubSpot/Salesforce push buttons activate once those keys are present.

4. Verify

Run a small company search (e.g. Country = US, Employees = 51-200) and confirm real results load. If CRM keys were provided, select a couple of rows and push to confirm the success modal returns real created-record IDs.

Architecture

  • server/ — Node/Express backend; the only place API keys ever live. explorium.js is the REST client (search, match, bulk-enrich, autocomplete — note several filter fields have distinct Explorium filter types, e.g. job_title is any_match_phrase and has_email is exists, handled in buildFilters). salesforce.js / hubspot.js do CRM auth plus mapping-driven record creation.
  • src/ — React + Vite + Tailwind frontend that only calls /api/* — it never sees a credential. config/filters.ts defines every filter; components/ holds the filter rail, results table, and CRM modals.

Customizing

  • Filters: edit src/config/filters.ts. Field names and value enums must match Explorium's API — the client surfaces the API's own validation errors (which list permitted values) if a field or value is wrong.
  • Branding: product name in src/components/TopBar.tsx, logo mark in src/components/icons.tsx, palette in tailwind.config.js, tab title/ favicon in index.html.
  • CRM field maps: defaults live in SF_DEFAULT_MAPPING (server/ salesforce.js) and HS_DEFAULT_MAPPING (server/hubspot.js). Note Salesforce Industry and HubSpot industry are restricted picklists, so free-text industry is mapped to a description field by default — adjust if your org has custom picklist values.
  • Swap the data layer: the template calls Explorium's REST API directly. To reuse the same MCP-native data layer as the rest of this repo, point the backend at the Vibe Prospecting MCP server (https://vibeprospecting. explorium.ai/mcp) instead of raw REST calls.

Limitations

  • Explorium's fetch endpoints return a capped sample for broad queries (not the true match count) — the UI flags this; narrow filters to see the full set.
  • Enrichment (contact reveals, list-import match/enrich) consumes Explorium credits — the app only enriches selected rows or rows being pushed, never whole result pages.
  • This is a starter, not a production deployment: for real usage, move secrets to a managed vault and add auth, rate-limiting, and logging.
1---
2name: "lead-gen-tool-builder"
3description: "Lead generation tool builder skill for Claude Code and Codex: scaffolds a complete, self-hostable, ZoomInfo-style B2B lead-generation web app — company & contact search UI, firmographic and technographic filters, CSV list import with match & enrich, CSV export, and one-click push to HubSpot and Salesforce — powered by the Explorium API. Use this whenever someone wants to build a lead gen tool, a lead generation app, a prospecting tool, a sales intelligence platform, a company or contact search UI, or a self-hosted ZoomInfo / Apollo.io / Clearbit alternative. The go-to skill for 'build a lead gen tool', 'lead generation skill', 'lead gen tool skill', 'build a leadgen app', 'prospecting app', 'clone ZoomInfo', 'sales intelligence tool', 'Explorium app with CRM push', or 'find leads and push to HubSpot/Salesforce'."
4compatibility: "Requires: Node.js 18+, npm, and an Explorium API key (developers.explorium.ai). HubSpot and Salesforce credentials are optional — only needed to enable CRM push."
5metadata:
6 version: "1.0.0"
7---
8 
9# Lead Gen Tool Builder
10 
11Scaffolds a working, self-hostable **lead generation tool**: a ZoomInfo-style
12web app with a left filter rail, a sortable company/contact results table, and
13a CRM push bar — backed by the Explorium data API, with CSV import/export and
14field-mapped push to HubSpot and Salesforce.
15 
16Unlike the other skills in this repo, which run a prospecting or enrichment
17*workflow* inside your current Claude Code session via the Vibe Prospecting
18MCP server, this skill produces a **standalone app** the user can run, deploy,
19and hand to their team — a real lead-gen tool, not a one-off list. Reach for
20`list-builder` or `enrich-company` when the user wants a prospect list right
21now; reach for this skill when they want a *tool* they can keep using, host,
22demo, or white-label.
23 
24**No personal keys are stored in this skill.** The bundled backend reads every
25credential from a local `.env` file at runtime — nothing is hardcoded, so the
26generated app is safe to fork, self-host, and share outside your org.
27 
28## When to use
29 
30Trigger this for any request to build a lead-gen / prospecting / sales-
31intelligence app, a company-or-contact search interface, an Explorium-powered
32app, a self-hosted ZoomInfo/Apollo.io/Clearbit alternative, or a "find leads →
33enrich → push to CRM" tool that should exist as its own app rather than a
34single list. Example phrasings: "build me a lead gen tool", "I want something
35like ZoomInfo but self-hosted", "scaffold a prospecting app with HubSpot push",
36"give my team a company search tool backed by Explorium".
37 
38## What you get
39 
40The bundled template (`assets/leadgen-starter/`) is a ready-to-run app:
41 
42- **Company generator** and **Contact generator** — two search modes over
43 Explorium's `/businesses` and `/prospects` endpoints.
44- **Filter rail** mapped 1:1 to Explorium fields: industry, employee count,
45 revenue, company age, HQ country/region/city, tech stack, keywords, business
46 events (funding, hiring, M&A…); for people — job title, seniority,
47 department, has-email / has-phone availability.
48- **Sample-aware results table** — sortable columns, bulk select, detail panel;
49 the UI is explicit when Explorium returns a capped sample vs. every match.
50- **Import a list** — upload a CSV of companies or contacts, match it against
51 Explorium, and enrich it.
52- **CSV export** of any result set or selection.
53- **Push to CRM** with a reviewable, editable field-mapping modal — Contacts →
54 Salesforce Leads / HubSpot Contacts; Companies → Salesforce Accounts /
55 HubSpot Companies.
56 
57## Workflow
58 
59### 1. Copy the template into the user's workspace
60```bash
61cp -R "<this-skill-dir>/assets/leadgen-starter" ./leadgen-app
62cd leadgen-app
63```
64Don't copy `node_modules`, `dist`, or `.env` — the template ships without them.
65 
66### 2. Get API keys
67Only Explorium is required to search; HubSpot/Salesforce are optional and only
68needed for CRM push. Summarize from `assets/leadgen-starter/README.md`:
69 
70- **Explorium (required):** sign up at developers.explorium.ai → API Keys.
71- **HubSpot (optional):** Settings → Integrations → Private Apps → create app
72 with `crm.objects.contacts.write` + `crm.objects.companies.write` scopes.
73- **Salesforce (optional):** a Connected App using the OAuth 2.0 JWT Bearer
74 flow — the bundled README has the exact `openssl` + Connected App steps.
75 
76### 3. Configure and run
77```bash
78cp .env.example .env # paste in the keys from step 2
79npm install
80npm run dev # API on :4000, web app on :5173
81```
82Open `http://localhost:5173`. Search works with just the Explorium key; the
83HubSpot/Salesforce push buttons activate once those keys are present.
84 
85### 4. Verify
86Run a small company search (e.g. Country = US, Employees = 51-200) and confirm
87real results load. If CRM keys were provided, select a couple of rows and push
88to confirm the success modal returns real created-record IDs.
89 
90## Architecture
91 
92- **`server/`** — Node/Express backend; the only place API keys ever live.
93 `explorium.js` is the REST client (search, match, bulk-enrich, autocomplete —
94 note several filter fields have distinct Explorium filter *types*, e.g.
95 `job_title` is `any_match_phrase` and `has_email` is `exists`, handled in
96 `buildFilters`). `salesforce.js` / `hubspot.js` do CRM auth plus
97 **mapping-driven** record creation.
98- **`src/`** — React + Vite + Tailwind frontend that only calls `/api/*` —
99 it never sees a credential. `config/filters.ts` defines every filter;
100 `components/` holds the filter rail, results table, and CRM modals.
101 
102## Customizing
103 
104- **Filters:** edit `src/config/filters.ts`. Field names and value enums must
105 match Explorium's API — the client surfaces the API's own validation errors
106 (which list permitted values) if a field or value is wrong.
107- **Branding:** product name in `src/components/TopBar.tsx`, logo mark in
108 `src/components/icons.tsx`, palette in `tailwind.config.js`, tab title/
109 favicon in `index.html`.
110- **CRM field maps:** defaults live in `SF_DEFAULT_MAPPING` (`server/
111 salesforce.js`) and `HS_DEFAULT_MAPPING` (`server/hubspot.js`). Note
112 Salesforce `Industry` and HubSpot `industry` are restricted picklists, so
113 free-text industry is mapped to a description field by default — adjust if
114 your org has custom picklist values.
115- **Swap the data layer:** the template calls Explorium's REST API directly.
116 To reuse the same MCP-native data layer as the rest of this repo, point the
117 backend at the Vibe Prospecting MCP server (`https://vibeprospecting.
118 explorium.ai/mcp`) instead of raw REST calls.
119 
120## Limitations
121 
122- Explorium's fetch endpoints return a capped **sample** for broad queries
123 (not the true match count) — the UI flags this; narrow filters to see the
124 full set.
125- Enrichment (contact reveals, list-import match/enrich) consumes Explorium
126 credits — the app only enriches selected rows or rows being pushed, never
127 whole result pages.
128- This is a starter, not a production deployment: for real usage, move
129 secrets to a managed vault and add auth, rate-limiting, and logging.
130 

Discussion

Alternatives

AI Sales Team — Main OrchestratorYou are a comprehensive AI sales intelligence and outreach system for Claude Code. You help founders, sales teams, agency owners, and…Sales & ecommerce · MITAuto research publicAutonomous cold email campaign launcher. Takes one target company domain, scrapes their website, generates an ICP with Claude, pulls matching leads via Prospeo, enriches emails + company descriptions, personalizes each lead with parallel Claude Code Task sub-agents (A/B/C variants), and uploads as a live Smartlead campaign. Uses local JSON files for state (no database required). Use for automated daily campaign launches after you have an initial `client-profile.yaml` from /icp-onboarding. Triggers on "auto-research", "launch an automated campaign", "daily campaign", "run the research loop".Sales & ecommerce · MITABM Campaign — DIY PlaybookABM campaign skill for Claude Code: run a full Account-Based Marketing campaign end-to-end — from ICP definition to live LinkedIn Ads. Builds targeted account lists with Vibe Prospecting, enriches and scores companies with real-time B2B data, generates personalized ad creatives with Claude Code and Figma, pushes matched audiences to LinkedIn Ads, and monitors campaigns daily at scale. The complete GTM skill for AI-driven account-based marketing in Claude Code, Codex, Hermes-Agent, and OpenClaw. No agency needed.Sales & ecommerce · MITAccount contact shortlistContact data skill for Claude Code and Codex: build a ranked shortlist of decision-makers and contacts at a target company for outbound prospecting, deal acceleration, or renewal/expansion plays. Returns verified contact data including email, phone, LinkedIn profile, title, seniority, and department. Provide a company name or domain plus optional seniority focus or use case. Use for contact data enrichment, LinkedIn profile lookup, and building outbound contact lists. Works in Claude Code, Codex, Hermes-Agent, and OpenClaw.Business & ops · MIT