TL;DR
- An outbound tool is three parts: data, sending and replies. Pick each on your list numbers, not on feature grids.
- Four numbers decide it: list size, verified share, mailboxes you can run, and how many replies a human must read. You can get the first two from LeadOcean in a few minutes.
- This takes about 20 minutes and spends about 50 LeadOcean records on the Free plan, or 100 for a test export on a paid plan. Counts are free.
Prerequisites
- A LeadOcean account on the Free plan: start free. No card.
- An API key in your shell:
export LEADOCEAN_API_KEY=... curlandjq.- A rough idea of who you sell to (a title, a country, a company size).
Step 1: Know what the three parts do
Most "outbound email tools" bundle three jobs. Buy them as one product or as separate parts, but know which job you are paying for.
part job breaks if weak
data who to email, and a verified address bounces, a burned domain
sending mailboxes, warm-up, sequences, throttling spam folder, low volume
replies inbox, routing, handoff to CRM missed answers, slow follow-upLeadOcean is the data part only. It has no sequencer, dialer or CRM. It returns people, companies and email status through an API, an MCP server and a CSV export, and your sending tool does the rest.
Rule of thumb: if you send from one to three mailboxes, a lightweight sequencer is enough. If you run many mailboxes, you need mailbox rotation and a shared inbox, and that is where tools differ most.
Step 2: Size your list for free
List size is the first filter. A list of 2,000 people never needs a platform built for 2 million.
Count by the filters you will actually use. The MCP tool leadocean_count_leads and the search endpoint with count=true are both free.
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'Note that count=true is a query parameter, not a body field. The body rejects unknown fields. meta.total is capped at 100,000.
In Claude or any MCP client, the same question is one prompt: "Count VP-level sales people in the US at companies with 51-200 employees." The tool defaults to mailable addresses. That means verified, catch_all_valid and catch_all.
Step 3: Split verified from catch-all
The second number is how much of the list you can send to safely. Run the same count twice, once with the default and once with emailStatus set to verified only.
{
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"employeeRange": ["51-200"],
"emailStatus": ["verified"],
"limit": 1
}Send that body to the same URL as Step 2. The gap between the two totals is your catch-all share (catch_all_valid and catch_all). Sending tools differ in how they treat it, and some skip it by default. Read email status types and catch-all emails explained before you decide, and see email verification explained for the checks behind each status.
Step 4: Turn the list into a send plan
Now do the arithmetic that picks the platform. Use your own numbers.
list = verified total from Step 3
mailboxes = how many you can run and keep warm
per_mailbox_day = the daily cap you are willing to run
days_to_send = list / (mailboxes * per_mailbox_day)Take the verified count from the output below. 4,552 people on 3 mailboxes at 30 sends a day each is 4,552 / 90, or about 51 days for the first touch. Add follow-up steps and the real time grows.
That tells you what to buy:
- Days under 10: one or two mailboxes and a simple sequencer. Do not pay for rotation.
- Days over 30 and you cannot add mailboxes: shrink the list with tighter filters (title, seniority, company size) instead of buying more tooling.
- Many mailboxes or many clients: you need mailbox rotation, per-client workspaces and a shared inbox. Check those three features first.
- Replies need routing to a CRM: check the native CRM sync, or a webhook you can call yourself.
The 30 a day figure is a placeholder. Set your own cap from your provider's limits and your domain's age.
Step 5: Pull a small test export
Never judge a sending tool on a list you have not tested. Export 100 rows and load them.
curl -s -X POST https://api.leadocean.io/v1/exports \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "sender-test",
"filters": {
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"employeeRange": ["51-200"],
"emailStatus": ["verified"]
},
"limit": 100,
"preset": "full"
}'The export runs async. Poll GET /v1/exports/{id} until status is done, then call GET /v1/exports/{id}/download. Exports take up to 50,000 rows a request and 500,000 a day. Bulk CSV export is not on the Free plan. On Free, pull 25 people with the search endpoint, then enrich each by person_id with reveal_email true to get the address. Search rows carry no email addresses.
You can also use the Exports page in the app: filter builder, column picker and the record price shown before you start.
Check the CSV headers your sending tool needs. LeadOcean returns email_1_address, email_1_status and so on. Map them on import.
Step 6: Match a platform type and score it
Your Step 4 numbers point to one of three kinds of product. Then run the same 100 rows through each candidate and score only what you can measure.
platform type pick it when
sequencer with mailbox rotation Step 4 says you need more than a few mailboxes
sales engagement suite reps work leads by hand and a manager needs activity views
workflow / automation tool volume is low and the list changes daily
test how to check pass
import map email_1_address, title, company no manual fixes
status handling does it skip catch_all or flag it? matches your Step 3 choice
mailbox limits plan limit on connected mailboxes covers your Step 4 count
reply routing inbox, webhook or CRM sync reaches your CRM
real cost price at your monthly send volume fits your budgetIn every case the data layer is separate from the sender. If a platform bundles contacts, ask how many addresses it lets you export and what status each one carries. Take prices and limits from each vendor's own pricing page on the day you buy, and write down the date.
What you get
The counts below come from leadocean_count_leads, run on 2026-10-21 with the filters shown. They are free calls.
Filters: jobLevel VP, jobFunction Sales & Business Development,
country US, employeeRange 51-200
Default (verified + catch_all_valid + catch_all): 18,567 people
distinctCompanies: 12,192
No email condition (totalAll): 60,456 people
emailStatus verified only: 4,552 people
distinctCompanies: 3,463Read it this way: 60,456 people match the role, 18,567 have an address worth sending to, and 4,552 are fully verified. The platform you pick has to handle the 18,567 or you must accept the 4,552.
The export call answers with this shape (response shape from the API reference, placeholder values):
{
"success": true,
"data": {
"id": "exp_xxxxxxxx",
"name": "sender-test",
"status": "queued",
"requested": 100,
"estimatedTotal": 4552,
"rows": 0,
"billed": 0,
"pollAfter": 5
}
}Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key | Check $LEADOCEAN_API_KEY is exported in this shell |
| 429 | Above the plan's rate limit (5 requests a second on Free, 200 on Agency) | Honour the Retry-After header, or batch calls |
| 402 | Out of records (Free is 1,000 for life) | Narrow the filters or move to a paid plan; see pricing |
| Count of 0 or an error on a filter | Enum value is not an exact string, such as vp instead of VP | Look it up with leadocean_list_enum_values before guessing |
400 on POST /v1/exports | Asked for more than 50,000 rows in one request | Split into several exports; the day ceiling is 500,000 rows |
| 403 on export | Contact columns requested without the enrich scope | Use a key with the enrich scope, or the search preset |
FAQ
Does LeadOcean send email?
No. LeadOcean is the data source. You export or call the API, then load the people into the sending tool you picked.
Should I include catch-all addresses?
Only if your sending tool and domain can take some extra bounce risk. Start with verified for a new domain. The default LeadOcean count includes catch-all, so compare both numbers.
How many records does a test cost?
Counts cost nothing. A search page of 25 is 25 records, and a 100-row export is 100. Enrichments that find nobody cost nothing.
Can I do this from Claude instead of curl?
Yes. The hosted MCP server at https://api.leadocean.io/mcp signs in with OAuth and has 13 tools. leadocean_count_leads, leadocean_list_filters and leadocean_list_enum_values are free.
What if I only send a few hundred emails a week?
Then list size is not your problem. Pick the simplest sequencer with a reply inbox you like, and spend your effort on the filters.
Size your outbound list before you pick a platform
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →