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

How-to guide

How to Set Up Claude Code for Sales Teams (With Live B2B Data)

A shared rules file, one MCP connection and one slash command give every rep the same guardrails and a record budget.

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

TL;DR

  • Claude Code works for a sales team when four things are shared: a rules file in the repo, one data connection, one slash command and a record budget.
  • Setup takes about 45 minutes for the first rep and 5 minutes for each rep after that. The test run spends about 6 LeadOcean records.
  • Reps draft and research in Claude Code. They still send from their own tools. Claude Code is not a sequencer or a CRM.

Prerequisites

  • Claude Code installed on each rep's machine, and a git repo the team can share.
  • A LeadOcean account from app.leadocean.io. The free plan has 1,000 records, one-off, no card.
  • curl and jq for the REST check in step 4. Keep the key in $LEADOCEAN_API_KEY. The MCP route signs in with OAuth and needs no pasted key.
bash
git clone git@github.com:acme/sales-claude.git && cd sales-claude
export LEADOCEAN_API_KEY="paste-your-key-here"

Step 1: Put the team rules in CLAUDE.md

Commit one CLAUDE.md at the repo root. Claude Code loads it at the start of every session, per the Claude Code memory docs, September 2026. A shared file is how ten reps get the same behaviour.

markdown
SALES TEAM RULES

- You research and draft. A human sends. You have no email tool.
- Count before you pull. Call leadocean_count_leads first and report the total.
- Say what the count measures. The default count is mailable people only.
- Resolve every enum with leadocean_list_enum_values. Never guess a job level or industry.
- Stop at 25 records per request unless the rep types a higher number.
- Use only fields that came back in the row. Never invent a company fact or a quote.
- Write like our reps: short, plain, one ask. No exclamation marks.

Keep it under 30 lines. Rules that are long get skimmed by the model and by the reps who review them.

Step 2: Connect one data source for everyone

One command adds a remote server, per the Claude Code MCP docs, September 2026. Use --scope project so the connection lives in the repo and new reps inherit it.

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

Each rep then runs /mcp inside a session and approves the OAuth sign-in once. The LeadOcean server exposes 13 tools. Seven never spend records: count leads, count companies, list filters, list enum values, get account, get export and list exports. The other six (search leads, search companies, get lead, find phone, get company and export leads) spend one record per person, company or row returned.

Tell reps which is which. A rep who knows counting is free will size an audience five times before pulling it.

Step 3: Add a team slash command

A file in .claude/commands/ becomes a slash command. $ARGUMENTS takes whatever follows it, per the slash command docs, October 2026. The docs now call this the older format: it still works, and .claude/skills/<name>/SKILL.md is the newer one. One command gives every rep the same first move. Save this one as .claude/commands/size-audience.md.

markdown
---
description: Size an audience, then pull a 5-row sample
---

For this audience: $ARGUMENTS

1. Resolve each filter value with leadocean_list_enum_values.
2. Run leadocean_count_leads with facets false. Report total, totalAll and distinctCompanies.
3. If total is under 25 or over 100,000, stop and ask me to narrow it.
4. Run leadocean_search_leads with limit 5.
5. Show a table: name, title, company, email status. End with the records spent.

A rep types the audience as filters, not a story.

text
/size-audience VP-level sales leaders (jobLevel VP, jobFunction Sales & Business Development) in the US at companies with 51-200 staff

Step 4: Check the same count over REST

Before you trust the connection, run the same count over plain HTTP. The people search takes a flat JSON body, filters are arrays, and count=true goes in the query string, with limit: 1 in the body. It is free. The meta.total figure is capped at 100,000.

bash
curl -s -X POST "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"],"employeeRange":["51-200"],"limit":1}' \
  | jq '.meta'

If the REST total and the MCP total match, the filters mean the same thing in both. Then enrich one person, to see what a rep gets back. This spends 1 record on a match:

bash
curl -s -X POST https://api.leadocean.io/v1/people/enrich \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"linkedin_url":"https://www.linkedin.com/in/jane-doe-acme"}' | jq '.data.contact_data.contact_current_experiences'

Enrich takes exactly one of linkedin_url, email, phone or person_id. A person we hold nothing for is a 404 and costs nothing.

Step 5: Set the record budget per rep

Decide this before the first rep gets access. On Free, 1,000 records are shared by whoever uses the key, and they do not renew. Paid plans have a fair-use pace instead of credits. Solo is $97 a month for one person. Agency is $497 a month for teams, with 5 keys and 200 requests a second.

A workable split for a pilot is 100 records per rep and a 25-record cap in CLAUDE.md. Check the balance with GET /v1/account, which is free. See pricing for the plan limits.

Step 6: Review the first week

Ask each rep to paste one session into a team channel after the first week. Look for three things: a search before a count, a guessed enum value, and a first line that states a fact the row never held. Each one is a missing line in CLAUDE.md.

Add the rule, commit it, and the whole team gets the fix on the next pull. That loop is the real reason to share the file. Treat it like a style guide that the tool actually reads.

Two limits to state plainly. LeadOcean data is refreshed monthly, and each record carries its own fetched_at date, so reps should not call a title "current as of today". And a bounced email is not refunded, so reps read email_status before they send.

What you get

On 2026-10-21 the free count tool answered the audience from step 3 with no records spent. This is the real output:

json
{
  "total": 18567,
  "totalIsExact": true,
  "totalAll": 60456,
  "distinctCompanies": 12192,
  "credits": 0
}

Filters: jobLevel VP, jobFunction Sales & Business Development, country US, employeeRange 51-200. The total counts mailable people (verified, catch_all_valid or catch_all email status). totalAll is the same filters with no email condition. Say which one you mean in the rep's notes.

A search row has this shape. Response shape from the API reference, with placeholder values:

json
{
  "success": true,
  "data": [
    {
      "profile_data": {
        "profile_full_name": "Jane Doe",
        "profile_headline": "VP Sales at Acme",
        "profile_url": "https://www.linkedin.com/in/jane-doe"
      },
      "contact_data": {
        "has_email": true,
        "has_phone": false,
        "email_status": "verified",
        "email_type": "work"
      },
      "meta": { "source_ids": { "person_id": "1234567890" } }
    }
  ],
  "meta": { "count": 1, "credits": 1, "nextCursor": "CURSOR" }
}

Troubleshooting

ErrorCauseFix
401 UnauthorizedMissing or wrong x-api-key header, or $LEADOCEAN_API_KEY not set in that shellRe-export the key and resend. For MCP, rerun /mcp and sign in again.
429 Too Many RequestsAbove the plan's rate limit: 5 a second on Free, 200 on AgencyWait the Retry-After seconds. Cap reps' parallel agents.
402 Payment RequiredThe plan's records are spentCheck GET /v1/account. On Free the 1,000 records do not renew, so move to a paid plan.
Empty resultsAn enum value was guessed, such as Vice President instead of VPCall leadocean_list_enum_values and pass the exact string.
Count says 1,000 or unsupported_filtersA filter the count tool does not support, such as fundingTypeCount without it. The filter narrows the list further at search time.
Export refusedA request over 50,000 rows, or a day over 500,000 rowsSplit the export into smaller filtered requests. Bulk CSV is not on Free.

FAQ

Can Claude Code replace our sales engagement tool?

No. Claude Code has no sequencer, dialer or mailbox warm-up. It researches accounts and drafts messages. Reps send from the tool they already use.

Which plan fits a sales team?

Agency, at $497 a month. Solo is priced for one person and has 1 key. Agency has 5 keys and covers team use. Per-rep budgets are a rule in CLAUDE.md, not an account setting.

How do we stop a rep from spending the whole balance?

Write a record cap into CLAUDE.md and count first. A search returns one record per person, so a limit of 25 spends at most 25. Counts stay free.

Can Claude Code write to Salesforce?

Through a separate MCP server it can. See the Salesforce MCP setup guide. Keep write access behind a human review step.

Where do I go next?

Read how to build a Claude Code sales agent for the subagent version, and how to build your Claude sales team for the team design.

Give every rep the same live B2B data in Claude Code

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

Get your free API key →