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

How-to guide

How to Build Battle Cards and Playbooks (with Claude)

Size the persona for free, pull one real account and its buying committee, then have Claude write the card from your notes and the data.

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

TL;DR

  • Claude writes a good battle card only when it has two inputs: your own competitor notes and facts about the buyer. LeadOcean supplies the buyer side: persona size, one account profile, the buying committee and a career history.
  • It takes about 45 minutes the first time and about 10 minutes for each new card. One card spends about 7 of your 1,000 free records.
  • LeadOcean holds no competitor pricing, call transcripts or win/loss data. Those come from your team, and the prompts below say so to Claude.

Prerequisites

  • A LeadOcean account from app.leadocean.io. The free plan has no card and 1,000 records, one-off.
  • A Claude account that can add a custom connector.
  • For the REST calls: curl and jq, and your key in the environment as $LEADOCEAN_API_KEY.
  • A plain text file of what you know about the competitor: their pitch, their pricing page as you saw it, objections reps hear, and deals you won or lost.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

The examples use placeholders. Acme (acme.com) is the target account. Swap in your own.

Step 1: Add LeadOcean to Claude

Add the connector once. Claude signs in with OAuth, so no key goes into the chat.

text
Name: LeadOcean
URL:  https://api.leadocean.io/mcp
Request headers: leave empty

The server exposes 13 tools. Four cost nothing and do most of the sizing work: leadocean_count_leads, leadocean_count_companies, leadocean_list_filters and leadocean_list_enum_values.

Step 2: Size the persona your card is for

A battle card is written for one persona at one kind of company. Count that persona first, so you know the card covers a real audience. The count is free.

text
Use leadocean_count_leads with jobLevel ["VP"], jobFunction
["Sales & Business Development"], industry ["Software Development"],
employeeRange ["51-200"], country ["US"], facets false.
Report the total and distinctCompanies. Say the total counts people with a
verified, catch_all_valid or catch_all email, not everyone.

The same count over REST is a people search with count=true as a query parameter and limit at 1.

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"],
       "industry":["Software Development"],"employeeRange":["51-200"],
       "country":["US"],"limit":1}' | jq '.meta | {total, totalIsExact}'

Check enum values before you guess them. jobLevel accepts C-Team, VP, Director, Manager, Staff and Other, and industry has 534 exact strings.

Step 3: Pull one real account profile

Pick a target account and ask for its profile. It costs one record and gives Claude the size band, industry, headquarters and the technologies found on the company website.

text
Use leadocean_get_company for acme.com. List employee count and band, industry,
headquarters and the detected technologies grouped by category. Write "not held"
for any empty field. Do not guess.
bash
curl -s https://api.leadocean.io/v1/companies/enrich \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{"domain":"acme.com"}' \
  | jq '.data | {company: .company_data.company_name, tech: .company_detected_technologies}'

Step 4: List the buying committee

Cards fail when they talk to one person. Pull five senior people at the account so Claude can write a line for each role. Each person returned costs one record, so a limit of 5 caps the spend.

text
Use leadocean_search_leads with domain ["acme.com"], jobLevel ["C-Team","VP",
"Director"], excludeTitle ["assistant","intern"], limit 5. Show name, title,
function and whether we hold an email.
bash
curl -s https://api.leadocean.io/v1/people/search \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{"domain":["acme.com"],"jobLevel":["C-Team","VP","Director"],
       "excludeTitle":["assistant","intern"],"limit":5}' \
  | jq '.data[] | .profile_data | {name: .profile_full_name, headline: .profile_headline}'

Need the whole roster later? GET /v1/companies/{domain}/people lists everyone held at a company and stops at 10,000 rows.

Step 5: Add career history for one champion

Rapport lines come from a person's past roles. Enrich one person by person_id from Step 4. Since October 2026 the response carries past roles, education, certifications and awards when held.

bash
curl -s https://api.leadocean.io/v1/people/enrich \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{"person_id":"<person_id from Step 4>"}' \
  | jq '.data.resume_data'

Past employers carry no company ID yet, so Claude can name a former company but cannot look it up in LeadOcean. Say that in the prompt. An enrichment that finds nothing costs nothing.

Step 6: Write the battle card

Give Claude three things: your competitor notes, the data from Steps 2 to 5, and strict rules about what it may claim. The rules matter more than the template.

text
You are writing a one-page battle card for reps selling against <competitor>.

Sources you may use:
1. competitor-notes.txt (attached). Treat it as the only source for competitor
   claims, pricing and features. If a fact is not there, write "unknown".
2. The LeadOcean results above, for the buyer: persona size, account profile,
   buying committee and career history.

Output, in this order:
- Who we are selling to: persona, size (state what the count measures), account.
- Their pitch in one sentence, then ours in one sentence.
- Where we win: 3 bullets, each tied to a line in the notes.
- Where we lose: 3 bullets. Be honest.
- Landmines: 3 questions that expose their weak spot.
- Objections: 4, each with a one-sentence answer.
- Per committee member: one opener based on title or career history only.

No invented customers, quotes, numbers or win rates.

Do not paste a competitor price from memory. If the notes have none, the card should say so.

Step 7: Turn the card into a playbook

A playbook is the card plus sequence and timing. Ask Claude to reuse the same inputs and save the result where reps work.

text
Using the battle card above, write a 5-touch playbook for the VP Sales persona:
touch, channel (email, call or LinkedIn), day offset, goal and a 60-word draft.
Use only facts from the card. Mark every claim about the competitor with the
note line it came from. Output as Markdown.

Save the Markdown in your wiki or a shared Claude Project. Rerun Steps 2 to 4 each quarter, since the dataset refreshes monthly and committees change.

Step 8: Check the card before reps see it

A card that sounds right can still be wrong. Run a review pass in the same chat, with the notes file as the only reference.

text
Review the battle card line by line. For every statement about the competitor,
quote the line in competitor-notes.txt that supports it. List every statement
with no quote. Then list every number in the buyer section and name the tool
call it came from. Delete anything unsupported.

Have a rep who lost to this competitor read the "Where we lose" bullets. If they disagree, the notes are thin, and the fix is better notes rather than a better prompt. Re-date the card each quarter and keep the old version for win/loss reviews.

Step 9: Reuse the card for a second persona

The competitor notes stay the same, and only the buyer inputs change. Rerun Step 2 for the new persona, such as Directors of RevOps, and pull a fresh committee in Step 4. Then reuse the Step 6 prompt unchanged.

You can also find accounts that already run a tool you compete with, because company and people searches accept a technologies filter for tools detected on the company website. Detection covers about 7.8M crawled sites, so treat a match as a strong hint and a miss as no information. If you do not know the exact tool name, filter by technologyCategories instead and resolve the category with leadocean_list_enum_values for tech_category.

What you get

Step 2 is a real run. On 2026-10-21 we ran leadocean_count_leads, which spends 0 records. The filters were VP, Sales & Business Development, Software Development, 51-200 employees and the US.

json
{ "total": 1649, "totalIsExact": true, "totalAll": 4141, "distinctCompanies": 1125, "credits": 0 }

So 1,649 people matched with a verified, catch_all_valid or catch_all email, across 1,125 companies. Without the email condition, 4,141 matched. These are mailable counts, not headcount.

A second run on the same day used job titles. Title "Sales Enablement", job level Director or VP, Software Development, US: 407 mailable people across 287 companies (682 without the email condition). That is the audience for the enablement team itself.

A career history has this shape. This is the response shape from the API reference, with placeholder values.

json
{
  "success": true,
  "data": {
    "profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "<headline>" },
    "resume_data": {
      "experiences": ["<past role: title, company name, start and end dates, job level>"],
      "educations": ["<school, degree>"],
      "certifications": [],
      "awards": []
    }
  },
  "meta": { "credits": 1 }
}

Total spend for one card is 1 (profile) plus 5 (committee) plus 1 (enrichment), so 7 records. Reruns of the counts are free. Paid plans run on a fair-use pace instead of per-record credits, and Solo is $97 a month.

Troubleshooting

ErrorCauseFix
401Missing, wrong or revoked key on a REST callRe-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, then retry. Space out a script that loops over many accounts.
402Free plan: the 1,000 records are spentCheck your account, then pick a paid plan. Free records do not reset.
Count or search returns 0A value outside the catalogue, such as jobLevel: "Vice President"Call leadocean_list_enum_values for job_level. Valid values are C-Team, Director, Manager, Other, Staff and VP.
Enrich returns 404Nobody matched the person_idIt costs nothing. Rerun Step 4 and copy the ID again.
An export is refusedOver 50,000 rows in one request, or 500,000 in a daySplit the filters into smaller exports. Bulk CSV export is not on Free.

FAQ

Can Claude write a battle card without competitor notes?

It can write one, but it will fill gaps with guesses. Give it your notes and tell it to write "unknown" for anything missing. A card with three honest gaps beats one with invented pricing.

Does LeadOcean hold competitor pricing or call recordings?

No. LeadOcean holds people and company records: roles, functions, technologies and firmographics. Competitor claims come from your own notes and the competitor's public pages.

How many records does a card cost?

About 7 in this recipe. Persona counts and filter lookups are free, so you can test as many personas as you like before you spend any.

Do I need Claude, or does this work in other tools?

The MCP URL works in other clients that support remote MCP servers, and the REST calls need only curl. See MCP servers for sales, tested in Claude and building your Claude sales team. For gifting and engagement context, see Sendoso. More recipes are in the blog hub.

Build your first battle card on real buyer data, free

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

Get your free API key →