Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Build Your Claude Sales Team (for B2B GTM)

Three Claude Code subagents with separate jobs, separate tools and a hard records cap. About 40 minutes.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

A Claude sales team is three Claude Code subagents that share one data source and split the work. This guide builds them, caps the records they can spend and shows the real output of the first step.

TL;DR

  • A Claude sales team is a set of subagents, each a markdown file with its own job and its own tool list. Three is enough: a sizer, a researcher and a drafter.
  • It takes about 40 minutes. The example run spends about 13 of your 1,000 free LeadOcean records. The sizer spends none.
  • Give only the researcher a tool that spends records. The cap then lives in the file, not in your prompt.

Prerequisites

  • A LeadOcean account from app.leadocean.io. The free plan has no card and 1,000 records, one-off.
  • Claude Code installed and signed in, and an empty project folder.
  • Optional, for the REST check: curl, jq and your key in the shell.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"
mkdir sales-team && cd sales-team && mkdir -p .claude/agents

Step 1: Connect the data source

Claude has no live people or company data. Add LeadOcean as an HTTP MCP server so every agent reads the same source.

bash
claude mcp add --transport http leadocean https://api.leadocean.io/mcp
claude mcp list

Run /mcp in a session and approve the OAuth sign-in. No key is pasted. The server exposes 13 tools. Seven never spend records: the people count, the company count, filter list, enum list, account, get export and list exports.

Step 2: Write the team rules

Subagents are markdown files with YAML frontmatter, stored in .claude/agents/. Claude Code's docs say the tools field limits what each one can call. Put shared rules in CLAUDE.md so all three read them.

markdown
Sales team for Acme (project management software)

## ICP
- Buyer: VP of Sales, US, software companies with 51 to 200 staff.

## Team rules
- Every fact about a person or company comes from the leadocean MCP server.
- Missing value: write "unknown". Never guess.
- Never send anything. Drafts go to drafts/ as files.
- Records cap per run: 13 (10 from one search, 3 full lookups).

Step 3: The sizer (no records spent)

The sizer is the cheapest agent and runs first. It only counts, so it gets only free tools.

markdown
---
name: sizer
description: Counts how many people match the ICP and reports the number. Use before any search.
tools: mcp__leadocean__leadocean_count_leads, mcp__leadocean__leadocean_list_enum_values, Read
model: haiku
---

Count the ICP with leadocean_count_leads. If a filter value is rejected or the total is 0,
resolve the exact string with leadocean_list_enum_values and retry once.
Report: total, distinctCompanies, and which email statuses were counted.
Do not search. Do not look anyone up.

The REST equivalent is a search with count=true as a query parameter and limit at 1. It returns meta.total and no rows.

bash
curl -s "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{"jobLevel":["VP"],"jobFunction":["Sales & Business Development"],
       "country":["US"],"industry":["Software Development"],
       "employeeRange":["51-200"],"limit":1}' | jq '.meta'

Step 4: The researcher (the only agent that spends records)

The researcher searches and looks people up. It is the one place a spend can happen, so its limits are written into its prompt.

markdown
---
name: researcher
description: Finds ICP buyers and pulls full records for the top three. Use after the sizer returns a non-zero total.
tools: mcp__leadocean__leadocean_search_leads, mcp__leadocean__leadocean_get_lead, Write
model: sonnet
---

1. Call leadocean_search_leads with the ICP filters and limit 10. One call only.
2. Pick the 3 people with email_status verified whose title best matches "VP Sales".
3. Call leadocean_get_lead once per pick. Three calls at most.
4. Write the three records to research/YYYY-MM-DD.json. Keep only fields that came back.

Search is flat JSON with array filters and limit from 1 to 100. A person returned counts one record, so limit 10 is a ceiling of 10. If you later switch to REST enrich, it takes exactly one of linkedin_url, email, phone or person_id.

Step 5: The drafter (no data access)

The drafter reads the researcher's file and writes. It gets no LeadOcean tools, so it cannot spend a record or invent a fact by looking one up.

markdown
---
name: drafter
description: Writes one first email per researched person. Use after the researcher has written its file.
tools: Read, Write
model: sonnet
---

Read the latest file in research/. For each person write a first email of 60 words or fewer.
Use one fact from the record: current role, company, or a past role from resume_data.
Quote only fields present in the file. If a field is missing, say so in a note, not in the email.
Save to drafts/YYYY-MM-DD.md.

Step 6: Run the team

Tell Claude to chain the three. The main session delegates by each agent's description.

text
claude
> Run the sizer. If the total is above 0, run the researcher, then the drafter.

Once the output looks right, run it unattended. claude -p runs a prompt non-interactively. Pre-approve the tools by name so nothing off the list can run. Agent is the tool that starts a subagent; Claude Code's docs say it was called Task before version 2.1.63.

bash
claude -p "Run the sizer, then the researcher, then the drafter." \
  --allowedTools "Agent,Read,Write,mcp__leadocean__leadocean_count_leads,mcp__leadocean__leadocean_list_enum_values,mcp__leadocean__leadocean_search_leads,mcp__leadocean__leadocean_get_lead"

Check the balance afterwards. GET /v1/account is free.

bash
curl -s https://api.leadocean.io/v1/account -H "x-api-key: $LEADOCEAN_API_KEY" | jq

What you get

The sizer's output is a real call. On 21 October 2026 the free MCP count tool returned this for the ICP in Step 2.

json
{
  "total": 1649,
  "totalIsExact": true,
  "totalAll": 4141,
  "distinctCompanies": 1125,
  "credits": 0,
  "defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all)",
  "facets": {
    "country": [{ "value": "US", "count": 1649 }],
    "industry": [{ "value": "Software Development", "count": 1649 }],
    "seniority": [{ "value": "vp", "count": 1649 }],
    "company_size": [{ "value": "51-200", "count": 1649 }]
  }
}

That is 1,649 mailable VPs of Sales at US software companies of 51 to 200 staff, across 1,125 companies. Without the email condition the same filters match 4,141 people.

The researcher's search page has a different shape. This is the response shape from the API reference, with placeholder values.

json
{
  "data": [
    {
      "profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "VP Sales at Acme" },
      "contact_data": {
        "has_email": true, "email_status": "verified", "email_type": "work",
        "contact_current_experiences": [{ "job_title": "VP Sales", "company_name": "Acme", "company_domain": "acme.com" }]
      },
      "meta": { "source_ids": { "person_id": "<person_id>" } }
    }
  ],
  "meta": { "count": 10, "limit": 10, "nextCursor": "<opaque cursor>" }
}

The drafter's file is three short emails. Their quality depends on the prompts in Steps 4 and 5, so read the first run line by line.

Troubleshooting

ErrorCauseFix
401Missing, wrong or revoked key (REST steps)Re-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again.
429Above the plan's rate limit (5 requests a second on Free, 200 on Agency)Wait the Retry-After seconds. Run agents one after another, not in parallel.
402Free plan: the 1,000 records are spentCheck GET /v1/account. Free records do not reset. Solo is $97 a month; see pricing.
400, or a count of 0A filter value outside the catalogue, such as industry: "Software"Resolve the exact string with leadocean_list_enum_values or GET /v1/enums/<name>.
Agent says a tool is unavailableThe tool name is missing from the subagent's tools listAdd the exact mcp__leadocean__... name to that agent's frontmatter.
400 or 429 on an export400: over 50,000 rows in one export. 429: past 500,000 rows a daySplit the audience by country or headcount band and run several. Bulk CSV export is not on Free.

FAQ

Why three agents and not one?

Separate tool lists. The sizer cannot spend, the drafter cannot look anything up, and only the researcher touches paid calls. One agent with all tools relies on its prompt to behave.

Can the agents run in parallel?

Yes, but start with one after another. Parallel runs share one key and one rate limit: 5 requests a second on Free, 200 on Agency. See the GTM agent build for the single-agent version.

Does the team send email?

No. It writes drafts to files. LeadOcean is a data source with no sequencer, dialer or CRM, so add a sending tool only after you trust several runs.

What does a daily run cost?

About 13 records, so the free 1,000 covers a few weeks of tests. For a team running every day, Agency is $497 a month with a fair-use pace instead of credits. See pricing.

Where do I go next?

Read the Claude GTM masterclass for the wider build and AI agent tools for GTM and sales teams to compare options. More recipes are in the blog hub.

Give your Claude sales team live B2B data today

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →