Claude Code

How to Build ABM Target Lists in Claude Code for Campaign-Ready Decision-Maker Coverage

Learn how to build campaign-ready ABM target lists in Claude Code using the Vibe Prospecting Plugin. Covers account enrichment, decision-maker search, cove

Vibe Team16 min readMay 18, 2026
How to Build ABM Target Lists in Claude Code for Campaign-Ready Decision-Maker Coverage

TL;DR

  • Campaign-ready ABM lists require three distinct layers — accounts, decision-makers, and campaign routing fields — not just a spreadsheet of company names or a random senior contact per row.
  • Vibe Prospecting Plugin gives Claude Code direct access to Explorium's 150M+ company, 800M+ people, and 50+ source B2B database so enrichment, matching, and export all run inside one structured workflow.
  • Always enrich accounts before searching for contacts — finding decision-makers inside unvalidated accounts wastes effort and corrupts the final export with weak account logic.
  • Buying-committee coverage beats raw contact count: an ABM list with 2,000 rows can still be thin where it matters if every account has only one irrelevant senior title.
  • Define the export schema — including persona tags, account tier, inclusion reason, and CRM routing fields — before the contact search starts, or you will do spreadsheet surgery at the end.
  • Claude Code handles the structured workflow steps — matching, enrichment, filtering, coverage checks, and file exports — while Claude Cowork is the better fit for desktop-based research and non-coding knowledge work.
  • Start free with 400 credits at vibeprospecting.ai to run your first campaign-ready ABM list without needing a data team or a six-figure enrichment contract.

Introduction

Most ABM programs fail at the list, not the message. You have sharp positioning, a well-designed campaign, and a CRM ready to go — but the account list is a spreadsheet of company names with one VP of Something per row. That is not a campaign-ready ABM list. That is research debt that your SDRs and demand gen team will quietly absorb for weeks.

A real ABM list has three things: validated accounts with enough context to justify the spend, decision-makers mapped to the buying committee by function and seniority, and structured export fields that let the list move into HubSpot, Salesforce, Outreach, Salesloft, or Clay without last-minute surgery. Building all three in a single workflow — with repeatable logic and clean output — is what this article is about.

This guide covers how to build that workflow end-to-end in Claude Code using the Vibe Prospecting Plugin, powered by Explorium's B2B data foundation. You will see the exact steps: setting up the plugin, building or uploading the account layer, enriching and filtering for fit, finding decision-makers without over-relying on job titles, checking coverage, and exporting a final dataset your campaign team can actually use.

Q1: What Makes an ABM Target List Actually Campaign-Ready?

❌ The "List of Companies" Mistake

A spreadsheet with 500 company names and one contact each is not an ABM list — it is a starting point for one. Without context about why each account fits, which function owns the buying decision, and how many relevant contacts exist per account, your sales team still has to do the hard research manually. You have moved the problem, not solved it.

✅ What Campaign-Ready Actually Means

Campaign-ready means the list can move directly into execution without a data cleanup sprint. Every account should answer five questions without anyone having to dig: Why does this account fit the campaign? Which tier or segment does it belong to? Which functions matter inside the buying committee? Are there enough contacts to run multi-threaded outreach? Where should this account be routed after export?

🏗️ The Three-Layer Structure

The most reliable ABM datasets are organized in three distinct layers:

  • Account layer: Company name, domain, industry, employee count, revenue range, tech stack, CRM/MAP indicator, ICP fit score, account tier (Tier 1 / Tier 2 / Tier 3), inclusion reason, and exclusion reason for accounts that were considered but removed.
  • Decision-maker layer: Full name, title, LinkedIn URL, work email, direct phone (when available), function tag (Revenue Ops, Demand Gen, Marketing Leadership, etc.), seniority level, persona label, and confidence score.
  • Campaign layer: CRM owner field, routing tag, campaign track, persona-to-message mapping, and any custom fields your sales engagement platform requires on import.

📊 ABM List vs. Basic Prospect List

Dimension Basic Prospect List Campaign-Ready ABM List
Account selection logic Broad ICP filters, no documented reason Explicit fit criteria, inclusion reason per account
Contact coverage 1–2 contacts per account, title-based Multi-threaded by function and seniority
Account enrichment Name, domain, maybe industry Technographics, revenue, headcount, CRM/MAP fit
Tiering None or binary (in/out) Tier 1 / Tier 2 / Tier 3 with campaign treatment implications
Persona tags Absent or ad hoc Structured, mapped to messaging tracks
Export readiness Needs cleanup before CRM import Clean schema, routing fields included
Workflow repeatability One-off manual process Repeatable, updatable on a schedule

Q2: How Do You Set Up the Vibe Prospecting Plugin in Claude Code?

🔄 Installation Steps

Open your Claude Code environment and navigate to the Connectors section — type /connectors in the command bar or find it in the sidebar. Search for "Vibe Prospecting" in the marketplace, select it, and click Install. The plugin will prompt you to authenticate with your Explorium account via a browser OAuth flow. Sign in with your Google account and grant the requested permissions. The plugin saves credentials to ~/.config/vpai/config.json for future sessions.

Once installed, verify the setup by asking Claude Code to list available tools. You should see tools like match-business, fetch-entities, enrich-company, and export-list available in the tool registry. If authentication fails, re-run the browser flow or check that your Explorium account has the correct plan permissions.

💡 Plan Your Output Before You Start

The single biggest time-saver in an ABM workflow is defining the output schema before the first tool call. Decide what your final CSV or JSON file needs to contain — account fields, contact fields, fit scores, persona tags, campaign routing fields — and write that down as a comment or preamble in your Claude Code session. That decision shapes every step that follows. If you skip it, you will be adding columns at the end after enrichment is already done.

⚠️ Input Format Options

Your starting point can be any of the following: a named account CSV from your CRM, a JSON list from a RevOps export, a spreadsheet from the sales team, or a natural-language ICP brief with no pre-existing list. The plugin handles all four. If you are starting from a CSV, confirm the column names match what Claude Code expects — domain or company name fields are required for matching. If you are starting from an ICP brief, you will use the plugin's discovery tools rather than the matching tools.

Q3: How Do You Build the Account Layer Before Touching Contacts?

❌ The Contacts-First Trap

The most common ABM workflow mistake is running the contact search too early. If you find decision-makers before cleaning the account list, you waste enrichment quota on companies that will never enter the campaign. You also make the final export harder to trust because contact data is attached to accounts that failed the fit check. Fix the account layer first. Every other step depends on it.

🔄 Starting from a Named Account List

If your sales team or RevOps has already supplied a list of target accounts, start by matching and enriching those companies before doing anything else. A prompt like the following gives the workflow something specific to act on:

Claude Code
I have a CSV of 200 named accounts at /data/target-accounts.csv.
The file has columns: company_name, domain, salesforce_id.

Step 1: Match each row to the Explorium company database using the domain field.
Step 2: For each matched company, enrich with: industry, sub-industry, employee count,
  revenue range, HQ country, HQ state, tech stack (CRM, MAP, sales engagement tools),
  founding year, last funding round and date, and LinkedIn URL.
Step 3: Flag any rows where match confidence is below 0.85 for manual review.
Step 4: Export the enriched account list to /data/accounts-enriched.csv.

Do not search for contacts yet. The account layer needs to be clean first.

✅ Building a Fresh Account List from ICP Criteria

If your team has targeting criteria but no existing list, use the plugin's discovery tools to build the account set from scratch. Write out the criteria explicitly — vague requests produce noisy lists. A useful prompt looks like this:

Claude Code
Build a target account list using the following ICP criteria:
- Industry: B2B SaaS, B2B software, or cloud-native software
- Geography: United States and Canada
- Employee count: 200–2,000
- Revenue range: $20M–$500M estimated annual revenue
- Technology signals: must have at least one of — Salesforce, HubSpot, Marketo, Pardot,
  or Eloqua in their tech stack
- Buying signals: companies that have posted Revenue Operations, Demand Generation,
  or Marketing Operations roles in the last 90 days

Return up to 300 accounts. For each account include: company name, domain, industry,
employee count, revenue estimate, matched tech stack tools, and match confidence score.
Export to /data/accounts-from-icp.csv and show a 5-row preview before saving.

💡 Useful Enrichment Fields for ABM Fit Logic

Not all enrichment fields are equal for ABM. The fields that most reliably support fit decisions are: employee count and revenue range (to enforce segment boundaries), tech stack (to confirm platform alignment), recent job postings (as a buying signal proxy), funding stage (to assess budget availability), and CRM or MAP presence (to confirm the account will have a buying committee, not just a single decision-maker). Add all of these before you tier the accounts.

Q4: How Do You Find Decision-Makers Without Over-Relying on Job Titles?

❌ Why Title-Only Searches Break ABM Lists

Filtering by "VP+" or "Director+" sounds rigorous but is actually one of the weaker ways to build a buying committee list. A VP of Strategic Partnerships at a 300-person SaaS company may be completely irrelevant to a Revenue Operations campaign. A Senior Manager of Demand Generation at the same company may be the most important contact in the account. Seniority and title keywords alone do not tell you whether a contact is relevant to the campaign.

Define the buying committee by function, seniority, and role context — not just title keywords. For a campaign focused on Revenue Operations and GTM tooling, the relevant contact functions might include: Revenue Operations and Sales Operations (Director and above), Demand Generation and Marketing Operations (Manager and above), Marketing leadership (VP and above, with attribution or pipeline focus), and Sales leadership (VP of Sales or CRO at accounts where the buying decision sits with the sales org).

A well-structured contact search prompt looks like this:

Claude Code
Using the validated account list at /data/accounts-tiered.csv, find decision-makers
for each account using the following buying committee definition:

Persona 1 — Revenue Operations Lead
  Functions: Revenue Operations, Sales Operations, GTM Operations
  Seniority: Director, Senior Director, VP, SVP, Head of
  Max contacts per account: 2

Persona 2 — Demand Generation Lead
  Functions: Demand Generation, Marketing Operations, Growth Marketing
  Seniority: Manager, Senior Manager, Director, VP
  Max contacts per account: 2

Persona 3 — Marketing Leadership
  Functions: Marketing (general), CMO, VP Marketing
  Seniority: VP and above
  Max contacts per account: 1

For each contact, return: full name, title, LinkedIn URL, work email
(verified preferred), function tag (use the persona names above), seniority level,
account name, account domain, and data source confidence score.

Apply persona tags based on function, not title keywords.
Export to /data/contacts-raw.csv. Show coverage summary before saving.

💡 Backed by Explorium's 800M+ People Database

Vibe Prospecting draws on Explorium's database of over 800 million people records and 150 million company profiles aggregated from 50+ sources. That depth matters for ABM specifically because decision-maker data at mid-market companies — where buying committees exist but LinkedIn profiles are often thin — is harder to find via single-source tools. The multi-source aggregation means fewer "no contacts found" results for accounts that actually belong in your campaign.

Q5: How Do You Check Coverage Before Calling the List Done?

⚠️ Why "Every Account Has a Contact" Is the Wrong Metric

A list can have 2,000 rows and still be thin where it matters most. If your Tier 1 accounts — the 30 or 40 accounts where you are planning outbound, paid social, and direct mail — each have only one contact in a non-decision-making role, the list is not ready. Coverage should be evaluated per tier, not just across the full list. One contact per Tier 3 account is fine. One contact per Tier 1 account is a problem.

🔄 Running a Coverage Check

Before exporting the final list, run a structured coverage check. Ask Claude Code to summarize the distribution by account tier and persona type, flag accounts with fewer contacts than your minimum threshold, and surface any accounts where the only contacts found are in non-buying roles. A simple coverage check prompt might be:

Claude Code
Analyze contact coverage in /data/contacts-raw.csv using the account tiers
in /data/accounts-tiered.csv.

For each account tier, report:
  - Total accounts in tier
  - Accounts with 0 contacts
  - Accounts with 1 contact only
  - Accounts with 2+ contacts across different personas
  - Accounts with 3+ contacts (multi-threaded ready)

Flag all Tier 1 accounts with fewer than 2 contacts as "Coverage Gap — Priority".
Flag all Tier 2 accounts with 0 contacts as "Coverage Gap — Standard".
Export the coverage report to /data/coverage-report.csv.

✅ Assigning Coverage Status Before Export

Add a coverage_status field to every account before the final export. Use consistent values your team can filter on: Multi-Threaded (3+ contacts across personas), Adequate (2 contacts, different functions), Thin (1 contact only), and No Coverage (0 contacts found). Tier 1 accounts with Thin or No Coverage status should trigger a manual review step before the list goes to campaign. This one field stops weak lists from slipping into campaigns because they look complete in a row count.

Q6: What Does a Full ABM Workflow Prompt Look Like in Claude Code?

🔄 End-to-End Workflow Prompt

The following prompt chains the full ABM workflow from account criteria through export. It is designed to run as a single Claude Code session, with previews at key steps before writing files. Adapt the ICP criteria, persona definitions, and file paths to your specific campaign.

Claude Code
## ABM List Build — Revenue Operations Campaign

### Step 1: Build Target Account List
Find B2B SaaS companies in North America with 200–2,000 employees,
$20M–$500M estimated ARR, and at least one of: Salesforce, HubSpot, Marketo,
or Pardot in their tech stack.

Enrich each company with: employee count, revenue estimate, tech stack,
recent job postings (RevOps / Demand Gen / Marketing Ops roles in last 90 days),
funding stage, HQ location, and LinkedIn URL.

Return up to 250 accounts. Export to /data/abm-accounts-raw.csv.

### Step 2: Apply Fit Rules and Tier Accounts
Apply the following fit logic:
- Tier 1: 500–2,000 employees + MAP in stack + RevOps job posting in last 90 days
- Tier 2: 200–500 employees + CRM in stack + any marketing role posting in last 90 days
- Tier 3: Remaining accounts that meet the base criteria

Add fields: account_tier, inclusion_reason, fit_score (1–100).
Remove any account with fit_score below 40. Export to /data/abm-accounts-tiered.csv.

### Step 3: Find Decision-Makers
For each account in /data/abm-accounts-tiered.csv, find contacts for these personas:

Persona: RevOps Lead — Functions: Revenue Ops, Sales Ops, GTM Ops
  Seniority: Director and above — Max 2 per account

Persona: Demand Gen Lead — Functions: Demand Gen, Marketing Ops, Growth
  Seniority: Manager and above — Max 2 per account

Persona: Marketing Leader — Functions: CMO, VP Marketing
  Seniority: VP and above — Max 1 per account

Return: full name, title, LinkedIn, verified work email, function tag,
seniority, account name, account domain, data confidence score.

Export to /data/abm-contacts-raw.csv. Show a 5-row preview before saving.

### Step 4: Coverage Check
Generate a coverage report by account tier. Flag Tier 1 accounts with fewer
than 2 contacts as priority gaps. Assign coverage_status field to each account.
Export coverage report to /data/abm-coverage-report.csv.

### Step 5: Final Export
Merge account data and contact data into a single campaign-ready file.
Add fields: campaign_track (based on tier and persona), crm_routing (leave blank
for team to fill), export_date, data_source: "Vibe Prospecting / Explorium".

Export final merged file to /data/abm-final-export.csv.
Show summary: total accounts, total contacts, coverage breakdown by tier,
persona distribution.

💡 Why This Prompt Structure Works

The prompt works because it forces sequential execution — accounts before contacts, enrichment before filtering, coverage check before final export — and it specifies exact output fields and file paths at each step. That specificity removes ambiguity from every tool call. The more precisely you define the workflow logic, the less cleanup your team needs to do on the other end.

Q7: How Should the Final ABM Dataset Be Structured for Export?

The final ABM dataset should support inspection, segmentation, and direct import without manual reformatting. A practical schema separates account-level fields from contact-level fields but keeps them in the same row for CRM import compatibility. The essential fields are:

Account fields: account_name, domain, industry, sub_industry, employee_count, revenue_estimate, hq_country, hq_state, tech_stack, funding_stage, linkedin_url, account_tier, fit_score, inclusion_reason, coverage_status, crm_owner, crm_routing.

Contact fields: contact_full_name, contact_title, contact_linkedin, contact_email, contact_phone, function_tag, persona_label, seniority_level, data_confidence_score.

Campaign fields: campaign_track, persona_to_message_mapping, export_date, data_source.

💡 Don't Skip the Fit Logic Fields

The inclusion_reason, account_tier, and fit_score fields feel optional until three weeks later when a sales leader asks why a specific company is in the campaign. Without those fields, someone has to reverse-engineer the targeting logic from scratch. Keep the audit trail in the file. It also makes it dramatically easier to refresh the list in 60 days — you can see exactly which logic produced which segment and update the criteria accordingly.

⚠️ CRM Import Compatibility

Before the final export, confirm the column names match the import template for your target CRM or sales engagement platform. HubSpot, Salesforce, Outreach, and Salesloft all have slightly different required fields and naming conventions. A list that is perfectly structured for HubSpot may need three column renames before it imports cleanly into Outreach. Add that check as the last step in your Claude Code session rather than discovering it after the export is already distributed to the team.

Q8: What Are the Most Common ABM List-Building Mistakes?

❌ Searching for Contacts Before Cleaning the Account Set

This wastes enrichment effort and quota on companies that should never enter the campaign. Every contact found against a weak account is a row that has to be deleted later — or worse, one that makes it into the campaign. Always validate and tier the account list before running the contact search. The account layer is not a warm-up step; it is the foundation everything else sits on.

❌ Title Keyword Filters Without Function Logic

Searching for "VP" or "Director" without specifying function produces contacts that look senior but may be completely irrelevant to the buying committee. A Director of Customer Education and a Director of Revenue Operations are both "Directors" — only one belongs in a RevOps-focused ABM campaign. Use function tags and role context, not just title seniority.

❌ One Contact Per Account as a Completion Metric

ABM is designed for multi-threaded outreach. One contact per account creates a fragile campaign — a single no-response or wrong-person reply stalls the account entirely. Your minimum viable coverage for Tier 1 accounts is two contacts in different functions. Three or more is better. Track this explicitly with a coverage status field.

❌ Exporting Without Persona Tags and Campaign Track Fields

Persona tags connect contacts to the right message sequence. Without them, your demand gen team either sends everyone the same email — which degrades performance — or manually re-segments the list before every campaign run. Add persona tags and campaign track fields during the contact search step, not after.

❌ Mixing All Account Tiers in One Undifferentiated List

Tier 1, Tier 2, and Tier 3 accounts rarely deserve the same campaign treatment. Tier 1 accounts typically get higher-touch outreach, direct mail, and executive-level messaging. Tier 3 accounts might only receive broad digital campaigns. If the tier field is absent or if all tiers are exported in a single unsorted file, your campaign team has to re-segment before they can do anything. Keep the tier visible and make it the first sort key.

⚠️ Forgetting CRM Routing Fields

A beautifully enriched list can still create two weeks of friction if nobody knows who owns each account in the CRM or which sequence it should enter in the sales engagement tool. Add CRM owner, routing tag, and sequence assignment fields before export — even if some values are blank and need to be filled by the RevOps team. A field with a blank value is infinitely easier to fill than a field that does not exist.

Q9: When Should You Use Claude Cowork Instead of Claude Code?

🔄 When Claude Code Is the Right Fit

Claude Code is purpose-built for workflows that need structure, repeatability, file output, and downstream system integration. For ABM list building specifically, Claude Code with the Vibe Prospecting Plugin is the better choice when you need to: process a CRM export or named account CSV, run multi-step enrichment with previews, export clean structured files for import into HubSpot or Salesforce, run the same workflow on a weekly or monthly refresh schedule, or integrate the output with other tools via API or webhook.

💡 When Claude Cowork Is the Better Choice

Claude Cowork is an agentic AI system designed for desktop-based knowledge work — it connects to local files and applications and completes multi-step tasks without requiring a developer environment. It is a better fit when the ABM workflow is primarily about research and review rather than structured data processing. If you are auditing an existing list, researching accounts manually, reviewing enriched data for quality, or working in a non-technical team environment, Claude Cowork removes the friction of working in a CLI-based tool.

📊 Choosing Based on Workflow, Not Preference

The honest answer is that the tool matters less than the workflow logic. A precise, well-defined ABM workflow in Claude Cowork will outperform a vague, poorly-scoped workflow in Claude Code every time. Define your account criteria, contact rules, export schema, and coverage thresholds before you open either tool. The clarity of the prompt is the actual leverage — the environment is secondary. That said, if the output needs to be a clean, import-ready file that moves into a CRM without manual reformatting, Claude Code with the plugin is the stronger choice for that specific task.

How Vibe Prospecting Enables This

Here is what this workflow looks like in practice. You are targeting B2B SaaS companies with 200–2,000 employees in North America for a Revenue Operations-focused ABM campaign. Your sales team has given you 80 named accounts from their CRM, and you need to expand that to 200–250 total accounts, enrich everything, find the buying committee, and export a file that the demand gen team can import into Outreach by end of week.

You open Claude Code, authenticate into the Vibe Prospecting Plugin, and drop your 80-account CSV into the working directory. In the first step, you match those accounts against Explorium's 150M+ company database, enrich them with tech stack, revenue estimate, and job posting signals, and immediately flag 12 accounts that do not meet the employee count or technology criteria. You remove those 12 and ask the plugin to find 180 additional accounts that match the same criteria — you end up with 248 total validated accounts.

In the second step, you apply tiering logic: 38 accounts qualify as Tier 1 (500+ employees, MAP in stack, RevOps job posting in last 90 days), 94 as Tier 2, and the remaining 116 as Tier 3. Each account now has a fit_score and inclusion_reason. In the third step, you run the persona-based contact search against all 248 accounts using the RevOps Lead, Demand Gen Lead, and Marketing Leader personas. The plugin returns 712 contacts across 231 of the 248 accounts. The 17 accounts with zero contacts get a No Coverage flag for manual review.

Coverage check shows that all 38 Tier 1 accounts have at least 2 contacts, and 29 of them have 3 or more. The final export is a 712-row CSV with account fields, contact fields, persona tags, campaign tracks, and a blank CRM routing column for RevOps to fill. The demand gen team imports it into Outreach that afternoon. No spreadsheet surgery. That is what campaign-ready means in practice.

Conclusion

ABM list building breaks at the same places every time: contacts searched before accounts are validated, title filters instead of function logic, one contact per account called "coverage," and a clean-looking export that still needs reformatting before it can be used. The workflow in this guide fixes all four by forcing the right sequence — accounts first, enrichment and tiering second, decision-makers third, coverage check fourth, export last — and by specifying the exact fields and logic at each step.

Vibe Prospecting gives Claude Code access to the data layer that makes each step executable: Explorium's 150M+ company profiles, 800M+ people records, and 50+ aggregated sources mean fewer gaps in the account enrichment and fewer "no contacts found" results for the accounts that matter most. The plugin handles matching, enrichment, filtering, and export as structured workflow steps, not one-off searches.

The output is a three-layer dataset your campaign team can actually use — accounts with fit logic, decision-makers mapped to the buying committee, and export fields that move cleanly into whatever CRM or sales engagement platform you are using. No data team required. No six-week enrichment cycle. Just a repeatable workflow you can run, update, and hand off.

Ready to build your first campaign-ready ABM list? Start free with 400 credits → vibeprospecting.ai
FAQs

Frequently Asked Questions

Get Started Banner

Get Started for free

Sign Up
Build ABM Target Lists in Claude Code | Vibe Prospecting