TL;DR
- Claude reaches LeadOcean through one custom connector. It counts every filter set you describe and returns exact totals, so TAM, SAM and SOM become four counts instead of one analyst guess.
- It takes about 15 minutes. The sizing run spends 0 records, because counts and lookups are free.
- Only people returned to you count as records. An optional 10-row spot-check spends 10 of the 1,000 free records.
Prerequisites
- A LeadOcean account from app.leadocean.io. The free plan has no card and gives 1,000 records, one-off.
- A Claude account that can add a custom connector. Per the Claude docs, September 2026, who can add one depends on your plan and, in Team and Enterprise, on your admin.
- Optional, for the REST check in Step 5:
curland a key in your shell as$LEADOCEAN_API_KEY. The chat steps need no key.
export LEADOCEAN_API_KEY="paste-your-key-here"Step 1: Add LeadOcean to Claude
Claude connects from Anthropic's cloud, so you add a public URL and sign in with OAuth. No key is pasted. Open Customize, then Connectors, then "+ Add", then "Add custom connector".
Name: LeadOcean
URL: https://api.leadocean.io/mcp
Request headers: leave emptyClick "Continue", review the authentication Claude detected, click "Continue" again, then approve the sign-in on the LeadOcean page. The full click-by-click, including Team and Enterprise, is on Connect LeadOcean to Claude. In a new chat, click "+", then "Connectors", and switch LeadOcean on.
Step 2: Write the buyer in one sentence
A market size is only as good as the buyer definition behind it. Write one sentence that names the industry, company size and role. Keep it to filters LeadOcean holds.
Buyer: sales leaders (VP or C-level, Sales & Business Development) at software
companies with 51 to 500 employees. Product: a sales tool. Question: how big is
the market, how much of it can I sell into from the US, and how many VPs is that?This is the same input the size my TAM from one sentence prompt takes. Everything after this step turns that sentence into counts.
Step 3: Resolve the exact filter values
Filter values are exact strings. "Software" matches nothing, and "Software Development" does. Make Claude look each value up before it counts anything.
Use leadocean_list_enum_values to find the exact strings for: industry (software),
employee_range, job_level and job_function (sales). Show me the values you will
use. Do not call any tool that spends records.Claude calls the free lookup and reports back. For this buyer it should settle on these values.
{
"industry": ["Software Development"],
"employeeRange": ["51-200", "201-500"],
"jobLevel": ["VP", "C-Team"],
"jobFunction": ["Sales & Business Development"]
}Step 4: Count TAM, SAM and SOM
Ask for one count per tier. Each tier keeps the filters above it and adds one. The prompt below tells Claude to use only the free count tool and to label what each number is.
Use leadocean_count_leads, with facets false, for four counts. Never call a tool
that spends records.
1. TAM: jobLevel VP and C-Team, jobFunction Sales & Business Development,
industry Software Development. No size or country filter.
2. Add employeeRange 51-200 and 201-500.
3. SAM: add country US.
4. SOM pool: same as 3, but jobLevel VP only.
Put the results in a table with the exact filters beside each count. Say which
email statuses were counted.A count is a people count. To turn it into dollars you need accounts, and leadocean_count_companies counts those for free. It takes the company-search filters and breaks the total down by industry, headcount band, HQ country, HQ state and NAICS.
Use leadocean_count_companies with industry Software Development,
employeeRange 51-200 and 201-500, hqCountry US. Report the total and the
split by headcount band. Then multiply the total by my contract value of
$X a year.Give Claude your own price, since LeadOcean holds no figure for your product. The REST version is GET /v1/companies/count, also free.
Step 5: Check one count over REST
You can reproduce any chat count from a terminal. The sizing call is a search with count=true as a query parameter and limit at 1. The body is flat JSON with arrays.
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", "C-Team"],
"jobFunction": ["Sales & Business Development"],
"industry": ["Software Development"],
"employeeRange": ["51-200", "201-500"],
"country": ["US"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"],
"limit": 1
}' | jq '.meta'The REST total is capped at 100,000. For a bigger market, use the MCP count tool, which returns the total with totalIsExact beside it.
What you get
We ran the four counts from Step 4 on 2026-10-01 with leadocean_count_leads. Each one spent 0 records.
| Tier | Filters added | Mailable people |
|---|---|---|
| TAM | VP and C-Team, Sales & Business Development, Software Development | 17,844 |
| Narrowed | + employeeRange 51-200 and 201-500 | 5,713 |
| SAM | + country US | 3,449 |
| SOM pool | VP only | 2,670 |
Every figure is a mailable count: people with a verified, catch_all_valid or catch_all email, which is the tool's default. It is not everyone we hold for those filters, so label it that way in your deck.
Claude also returns facets when you leave them on. For the 5,713 row, the 2026-10-01 run split the people by seniority and size.
{
"total": 5713,
"totalIsExact": true,
"credits": 0,
"facets": {
"seniority": [
{ "value": "vp", "count": 4276 },
{ "value": "c_suite", "count": 1294 },
{ "value": "owner", "count": 143 }
],
"company_size": [
{ "value": "51-200", "count": 3521 },
{ "value": "201-500", "count": 2192 }
]
},
"unsupportedFilters": []
}Read the table as a funnel. About 3,449 of the 5,713 sit in the US, and 2,670 of those are VPs.
The account count from Step 4 ran on 2026-10-21 with leadocean_count_companies and spent 0 records. Software Development companies of 51 to 500 staff headquartered in the US: 11,577, exact. The split was 9,261 at 51-200 and 2,316 at 201-500. At a $10,000 contract value that is a $115.8M account TAM; swap in your own price. Your numbers will move as the data changes, so date every count you publish.
The people counts leave out funding, revenue and headquarters city or state filters, which the people count tool does not support. Use leadocean_count_companies for those cuts, or apply them at search time. Total spend for the run: 0 records.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| Connector shows, but no tools appear | The sign-in window closed before approval, or the connector is off in this chat | Click "Connect" again and approve. Then switch LeadOcean on under "+", then "Connectors". |
| 401 | Missing, wrong or revoked key on a REST call | Re-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again. |
| 429 | Above your plan's rate per account (5 requests a second on Free, 200 on Agency) | Wait the Retry-After seconds, then slow the loop. Five counts need nothing near that rate. |
| 402 | Free plan: the 1,000 records are spent | Counts stay free. Read the account, or move to Solo at $97 a month. Free records do not reset. |
| Empty results or a count of 0 | A filter value outside the catalogue, such as industry: "Software" | Ask Claude to call leadocean_list_enum_values and use the exact string it returns. |
| Total stops at 100,000 | The REST count is capped at 100,000 | Use leadocean_count_leads, or add a filter and count the pieces. |
FAQ
How many records does sizing a TAM in Claude cost?
Zero. Counts, filter lookups and enum lookups are free, however many you run. Records are spent only on people returned by a search, a lookup or an export.
Is a people count the same as a market size?
No. It is the number of reachable buyers in a segment. Count accounts with leadocean_count_companies, multiply by your contract value to get dollars, and use your own price for that step.
Why does the count say "mailable"?
The count tool defaults to verified, catch_all_valid and catch_all emails. Pass emailStatus, hasEmail or reachable to change that. Say which one you used next to every number.
How often should I re-run the counts?
Once a month is enough. The dataset is refreshed monthly, and each record carries its own fetched_at date. Re-run the same prompt, keep the filters fixed, and compare totals by date.
Can I pull the whole SAM into a list?
Not in one search. One search pages to 10,000 rows, and the capped page carries meta.depthCapped. Split the SAM by country or headcount band, or use an export from Solo up, which takes up to 50,000 rows a request.
Does Claude see my API key?
Not through the connector. The MCP server uses OAuth sign-in and no key is pasted into chat. Only the optional REST check reads $LEADOCEAN_API_KEY from your shell.
Can I do this in a coding tool instead?
Yes. The same MCP URL works elsewhere. See size your TAM in Claude Code and in Windsurf. More recipes are in the blog hub.
Size your market in Claude, free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →