# Abm Diy Campaign

> ABM 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 complet…

- **Type:** Skill
- **Install:** `agentstack add skill-explorium-ai-gtm-skills-abm-campaign`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [explorium-ai](https://agentstack.voostack.com/s/explorium-ai)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [explorium-ai](https://github.com/explorium-ai)
- **Source:** https://github.com/explorium-ai/gtm-skills/tree/main/skills/abm-campaign
- **Website:** https://www.explorium.ai

## Install

```sh
agentstack add skill-explorium-ai-gtm-skills-abm-campaign
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# ABM Campaign — DIY Playbook

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:**
1. A scored, filtered account list sourced from Vibe Prospecting
2. Segment-specific ad creatives (HTML templates + optional Figma assets)
3. LinkedIn matched audiences populated with your target accounts
4. Live LinkedIn campaigns with personalized ads
5. An ongoing monitoring and optimization loop

**No personal keys are stored in this skill.** You provide credentials at runtime via environment variables or interactive prompts. See [`setup.md`](references/setup.md) before starting.

---

## Prerequisites

Complete [`setup.md`](references/setup.md) first. It covers:
- Vibe Prospecting login (`npx @vibeprospecting/vpai@latest`)
- LinkedIn Ads API credentials
- Figma access token (optional)

---

## Campaign Phases

### Phase 1 — Build the Account List

**Goal:** Translate your ICP into a concrete list of target companies.

Read [`01-account-list.md`](references/01-account-list.md) before running any Vibe Prospecting commands.

**Quick steps:**
1. Define your ICP (industry, company size, geography, tech stack, funding stage, intent signals)
2. Use `autocomplete` to normalize filter values
3. Fetch matching companies with `fetch-entities` (sample 5 first, then full export)
4. Save to `abm-accounts-raw.csv`

```bash
# 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`

---

### Phase 2 — Enrich & Score the Accounts

**Goal:** Add firmographic and technographic data, then score and filter to your best-fit accounts.

Read [`02-enrich-score.md`](references/02-enrich-score.md) for scoring model details.

**Quick steps:**
1. Match raw companies to Vibe business IDs
2. Enrich with `firmographics`, `technographics`, `funding-and-acquisitions`
3. Apply ICP scoring formula (Claude computes a fit score 0–100)
4. Filter to accounts above your threshold (suggested: score ≥ 60)
5. Save to `abm-accounts-scored.csv` and `abm-accounts-final.csv`

```bash
# 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)

---

### Phase 3 — Create the Ad Templates

**Goal:** Generate reusable, segment-specific ad templates using Claude Code.

Read [`03-ad-templates.md`](references/03-ad-templates.md) for template structure and design system integration.

**Quick steps:**
1. Define your ad segments (e.g., "Enterprise Fintech", "Mid-Market SaaS", "Startup")
2. Specify your design system or brand colors/fonts (or use defaults)
3. Claude generates HTML/CSS templates for each LinkedIn ad format:
   - Single Image (1200×628 px)
   - Carousel cards (1080×1080 px)
   - Spotlight ad (300×250 px)
4. Templates use placeholders: `{{company_name}}`, `{{company_logo}}`, `{{headline}}`, `{{body_copy}}`
5. Output files saved under `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/-single.html`, `creative/templates/-carousel.html`

---

### Phase 4 — Personalize the Creative

**Goal:** Dynamically update creative elements per account using Figma MCP (or a code-based approach).

Read [`04-personalize-figma.md`](references/04-personalize-figma.md) for the Figma MCP workflow and code-based fallback.

**Option A — Figma MCP (recommended for polished output):**
1. Share your Figma design file URL
2. Claude reads the template frames via Figma MCP
3. For each account, Claude swaps: company logo, company name, segment headline
4. Exports PNG assets per account

**Option B — Code-based (no Figma):**
1. Claude uses the HTML templates from Phase 3
2. Injects per-account data using a Python/Node script
3. Renders to PNG using `puppeteer` or `playwright`
4. Saves under `creative/personalized//`

```bash
# Install rendering dependencies (Option B)
npm install -g playwright
playwright install chromium
```

**Output:** `creative/personalized//.png`

---

### Phase 5 — Push Audiences to LinkedIn Ads

**Goal:** Create a LinkedIn matched audience from your account list and upload company data.

Read [`05-linkedin-audiences.md`](references/05-linkedin-audiences.md) for the full API workflow.

**Quick steps:**
1. Set LinkedIn credentials as environment variables (see [`setup.md`](references/setup.md))
2. Create a DMP segment (matched audience)
3. Upload your company list (domain-based matching — LinkedIn matches ~40–60% of lists)
4. Wait for audience to populate (typically 24–48 hours for >300 companies)

```bash
# 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`

---

### Phase 6 — Create & Launch the Campaigns

**Goal:** Create campaign groups, campaigns, and ad creatives in LinkedIn Campaign Manager.

Read [`06-campaign-management.md`](references/06-campaign-management.md) for full campaign creation and monitoring.

**Quick steps:**
1. Create a campaign group per segment
2. Create campaigns targeting your matched audience + segment filters
3. Upload personalized creatives as sponsored content
4. Set budget, schedule, and bid strategy
5. Launch

**Monitoring loop (ongoing):**
- Claude checks campaign analytics daily
- Flags underperforming ads (CTR  $15)
- Suggests copy/creative tweaks
- Refreshes audience as new accounts are added

---

## Full Pipeline Checklist

```
[ ] 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 Outputs Reference

| 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 |

---

## Troubleshooting

| Problem | Solution |
|---------|----------|
| Vibe Prospecting auth fails | Run setup from [`setup.md`](references/setup.md) → Vibe section |
| LinkedIn 401 Unauthorized | Access token expired — re-run OAuth flow in [`setup.md`](references/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`](references/03-ad-templates.md) |

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [explorium-ai](https://github.com/explorium-ai)
- **Source:** [explorium-ai/gtm-skills](https://github.com/explorium-ai/gtm-skills)
- **License:** MIT
- **Homepage:** https://www.explorium.ai

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-explorium-ai-gtm-skills-abm-campaign
- Seller: https://agentstack.voostack.com/s/explorium-ai
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
