Help us improve
Share bugs, ideas, or general feedback.
Run a full Account-Based Marketing (ABM) campaign DIY — from ICP to live LinkedIn Ads. Build a targeted account list with Vibe Prospecting, enrich and score companies, generate personalized ad creatives with Claude Code and Figma, push matched audiences to LinkedIn Ads, and monitor campaigns at scale. No agency needed.
npx claudepluginhub explorium-ai/public-skills --plugin explorium-public-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/explorium-public-skills:abm-campaignThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill walks you through a full ABM campaign end-to-end, using Claude Code as the orchestration layer. You bring your ICP definition and credentials; Claude handles the rest.
Applies 10 pre-set color/font themes or generates custom ones for slides, documents, reports, and HTML landing pages.
Share bugs, ideas, or general feedback.
This skill walks you through a full ABM campaign end-to-end, using Claude Code as the orchestration layer. You bring your ICP definition and credentials; Claude handles the rest.
What you'll build:
No personal keys are stored in this skill. You provide credentials at runtime via environment variables or interactive prompts. See setup.md before starting.
Complete setup.md first. It covers:
npx @vibeprospecting/vpai@latest)Goal: Translate your ICP into a concrete list of target companies.
Read 01-account-list.md before running any Vibe Prospecting commands.
Quick steps:
autocomplete to normalize filter valuesfetch-entities (sample 5 first, then full export)abm-accounts-raw.csv# Example: US SaaS companies, 100-1000 employees, using Salesforce
npx @vibeprospecting/vpai@latest autocomplete \
--args '{"field":"linkedin_category","query":"software"}' \
--tool-reasoning 'Building ABM account list for SaaS ICP'
npx @vibeprospecting/vpai@latest fetch-entities \
--args '{
"entity_type": "business",
"filters": {
"linkedin_category": {"values": ["Software Development"]},
"company_headcount_range": {"values": ["101-250","251-500","501-1000"]},
"company_country_code": {"values": ["US"]},
"company_tech_stack_tech": {"values": ["Salesforce"]}
},
"page_size": 5
}' \
--tool-reasoning 'Sample fetch for ABM account list'
Output: abm-accounts-raw.csv
Goal: Add firmographic and technographic data, then score and filter to your best-fit accounts.
Read 02-enrich-score.md for scoring model details.
Quick steps:
firmographics, technographics, funding-and-acquisitionsabm-accounts-scored.csv and abm-accounts-final.csv# Match company names to IDs
npx @vibeprospecting/vpai@latest match-business \
--args '{"businesses_to_match": [{"name":"Acme Corp","domain":"acme.com"}]}' \
--tool-reasoning 'Matching accounts for enrichment'
# Enrich firmographics + technographics
npx @vibeprospecting/vpai@latest enrich-business \
--args '{
"business_ids": ["biz_xxx"],
"enrichments": ["firmographics","technographics","funding-and-acquisitions"]
}' \
--tool-reasoning 'Enriching accounts for ABM scoring'
Output: abm-accounts-final.csv (scored, filtered list)
Goal: Generate reusable, segment-specific ad templates using Claude Code.
Read 03-ad-templates.md for template structure and design system integration.
Quick steps:
{{company_name}}, {{company_logo}}, {{headline}}, {{body_copy}}creative/templates/Tell Claude:
"Create LinkedIn ad templates for these segments: [list]. Use these brand colors: [hex]. Use this value prop: [text]."
Output: creative/templates/<segment>-single.html, creative/templates/<segment>-carousel.html
Goal: Dynamically update creative elements per account using Figma MCP (or a code-based approach).
Read 04-personalize-figma.md for the Figma MCP workflow and code-based fallback.
Option A — Figma MCP (recommended for polished output):
Option B — Code-based (no Figma):
puppeteer or playwrightcreative/personalized/<company_domain>/# Install rendering dependencies (Option B)
npm install -g playwright
playwright install chromium
Output: creative/personalized/<company_domain>/<format>.png
Goal: Create a LinkedIn matched audience from your account list and upload company data.
Read 05-linkedin-audiences.md for the full API workflow.
Quick steps:
setup.md)# Step 1: Create matched audience
curl -s -X POST "https://api.linkedin.com/v2/dmpSegments" \
-H "Authorization: Bearer $LINKEDIN_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "ABM Target Accounts — Q3 2025",
"accessPolicy": "PRIVATE",
"destinations": [{"destination": "urn:li:sponsoredAccount:'$LINKEDIN_AD_ACCOUNT_ID'"}],
"type": "COMPANY"
}'
# Note the returned segment ID, then upload company list (see 05-linkedin-audiences.md)
Output: LinkedIn DMP Segment ID saved to linkedin-audience-id.txt
Goal: Create campaign groups, campaigns, and ad creatives in LinkedIn Campaign Manager.
Read 06-campaign-management.md for full campaign creation and monitoring.
Quick steps:
Monitoring loop (ongoing):
[ ] setup.md — credentials configured
[ ] 01-account-list.md — account list built and exported
[ ] 02-enrich-score.md — accounts enriched, scored, filtered
[ ] 03-ad-templates.md — ad templates created per segment
[ ] 04-personalize-figma.md — creatives personalized per account
[ ] 05-linkedin-audiences.md — matched audience created and populated
[ ] 06-campaign-management.md — campaigns live and monitored
| File | Phase | Description |
|---|---|---|
abm-accounts-raw.csv | 1 | Raw account list from Vibe Prospecting |
abm-accounts-scored.csv | 2 | Accounts with enrichment + fit scores |
abm-accounts-final.csv | 2 | Filtered best-fit accounts (score ≥ threshold) |
creative/templates/ | 3 | HTML/CSS ad templates per segment |
creative/personalized/ | 4 | Per-account rendered ad images |
linkedin-audience-id.txt | 5 | LinkedIn DMP segment ID |
campaign-ids.json | 6 | Campaign group, campaign, creative IDs |
campaign-report.csv | 6 | Daily analytics export |
| Problem | Solution |
|---|---|
| Vibe Prospecting auth fails | Run setup from setup.md → Vibe section |
| LinkedIn 401 Unauthorized | Access token expired — re-run OAuth flow in setup.md |
| Audience too small (<300) | Broaden ICP filters in Phase 1; LinkedIn needs 300+ matched companies to serve ads |
| Low audience match rate | Use company domains (not just names) in Phase 5 upload for better matching |
| Figma MCP not available | Use Option B (code-based) in Phase 4 |
| Creatives rejected by LinkedIn | Check LinkedIn ad specs in 03-ad-templates.md |