TL;DR
- A VP of Sales owns the revenue number and the forecast. Sell them pipeline they can see and a forecast they can defend, not "better data".
- Count first, send second. On 2026-10-21 LeadOcean showed 198,997 mailable VP-level people in Sales & Business Development worldwide, 129,494 of them in the US.
- The recipe takes about 25 minutes and spends about 26 LeadOcean records. Every count is free.
Prerequisites
- A free LeadOcean account and an API key from app.leadocean.io. Free gives you 1,000 records for life, no card, 5 requests a second.
- The key in your shell as
$LEADOCEAN_API_KEY. curlandjq.- Optional: Claude or any MCP client connected to
https://api.leadocean.io/mcp, which has 13 tools including free counts.
Step 1: Map what the VP cares about and who else buys
Write the persona down before you count anything. It decides the filters and the first line.
What they care about
A VP of Sales is judged on one number: bookings against plan, this quarter and next. Everything they read passes that filter.
They care about four things, in this order.
- Forecast accuracy. They commit a number to the CEO and the board. A surprise in week 11 costs them credibility.
- Pipeline coverage. Do their managers have enough qualified accounts to cover the plan? Thin coverage is the one problem that gets a meeting booked.
- Rep productivity and ramp. Hours lost to research, and months before a new hire carries a full number.
- Cost of sale. Headcount and tooling spend per dollar booked. They will cut a tool that cannot show what it saves.
They do not read feature lists. They read a sentence that connects to one of these four.
What kills the deal
VPs of Sales say no for predictable reasons. Answer them in the first email, not the third.
- "We already have a data tool." Do not argue. Ask what a manager does when a rep needs a new account list on a Tuesday.
- "No budget this quarter." Their budget is set a quarter ahead, but quota is this quarter. Offer a pilot that fits inside the free plan.
- "Talk to RevOps." Good. Send RevOps one paragraph with the count, the filters and the endpoint. They will read it.
- "Not now." Ask for a month. VPs plan by quarter, so a named month is a real answer.
Who else is in the buying committee
A VP of Sales is usually the economic buyer or the sponsor of the buy, and rarely the person who tests it. The people around them:
- The CRO or CEO signs when spend crosses a threshold, or when the tool touches the whole go-to-market motion.
- Sales Directors and managers use the output and tell the VP whether it works. See how to sell to a Sales Director.
- RevOps or Sales Ops vet integrations, data quality and cost.
- Marketing and engineering leads join when the tool feeds campaigns or sits in a product. See how to sell to a VP of Marketing and how to sell to a VP of Engineering.
Write to the VP as the person who needs one sentence to forward to the CRO. Give them the sentence.
Save the map as a config you will reuse for filters and messaging:
economic_buyer: { jobLevel: [VP], jobFunction: [Sales & Business Development] }
signs_above_threshold: { seniority: [c_suite] }
users: { jobLevel: [Director, Manager], jobFunction: [Sales & Business Development] }
vets_the_buy: { title: ["Revenue Operations", "Sales Operations"] }
angles: [forecast, coverage, ramp, territory]Step 2: Count VPs of Sales by region (free)
Start with a count. It spends zero records and tells you whether the segment is worth a campaign.
leadocean_count_leads counts mailable people by default: verified, catch_all_valid and catch_all addresses. Run it from any MCP client. This filters on job level and function, which is broader than the literal title "VP of Sales".
{
"tool": "leadocean_count_leads",
"arguments": {
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"]
}
}Repeat with CA, GB, DE and IN, or leave out country for the worldwide figure. Enum values are exact strings, so check them with leadocean_list_enum_values if a count comes back empty.
Step 3: Read the count for each region
Put the counts in one table before you pick a market. These ran on 2026-10-21 with jobLevel: ["VP"], jobFunction: ["Sales & Business Development"] and the default mailable email statuses.
| Region | Mailable | Employers covered | All matches (any email status) |
|---|---|---|---|
| Worldwide | 198,997 | about 86,439 | 617,373 |
| US | 129,494 | about 58,121 | 350,517 |
| CA | 5,574 | 3,873 | 18,800 |
| IN | 4,907 | 3,120 | 15,785 |
| GB | 3,623 | 2,042 | 9,019 |
| DE | 1,395 | 905 | 3,893 |
Read three things from this. The US is 65% of the worldwide mailable list (129,494 of 198,997). Canada, India and the UK are each a separate, small market, between 3,600 and 5,600 people. And the last column shows how much of each country you would be mailing blind: in the US, 350,517 match but only 129,494 are mailable.
The employer figures marked "about" are approximate. The industry breakdown also differs by region. In the US count, Financial Services (12,677) and Software Development (10,144) lead. In Germany, Software Development (183) leads and several manufacturing industries follow, which is a different conversation from SaaS.
Step 4: Pull a sample from your best region
Pull 25 rows from the region you picked. This spends 25 records. Search is a flat JSON body, filters are arrays, and limit runs from 1 to 100.
curl -s -X POST https://api.leadocean.io/v1/people/search \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["GB"],
"emailStatus": ["verified"],
"limit": 25
}' | jq '(.data | length), (.data[0] | keys)'Add a company-size filter next if you sell to one segment. Page with the cursor value from meta. One search pages to 10,000 rows, so narrow the filters instead of walking the whole index.
Step 5: Enrich one record to read the career history
Before you write, read one profile. Person enrich returns career history: past roles, education, certifications and awards. Past employers carry no company_id yet.
Enrich takes exactly one of linkedin_url, email, phone or person_id. Use the person_id from a step 4 row, at meta.source_ids.person_id.
curl -s -X POST 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_3", "reveal_email": true}' \
| jq '.data.resume_data.experiences[0:3]'This costs one record. A person we hold nothing for returns a 404 and costs nothing.
Look for the path. A VP who rose from AE and manager will respond to rep-level pain. A VP hired in from a large enterprise will respond to process and forecast control. A VP who started in the last six months is building a plan and is open to new tools.
Step 6: Write the first line
The first line must show you know the job. Pick one of these four angles and keep the email under 90 words.
1. Forecast: "Most forecasts slip because pipeline is thin in week 3, not week 11. How early do you see a gap?"
2. Coverage: "Your plan needs roughly {X} new qualified accounts a quarter. Where do your managers get them today?"
3. Ramp: "New reps at {Acme} spend their first month building lists. Could it take a day?"
4. Territory: "I counted {N} mailable buyers in your territory on {date}. Want the list?"The territory line works because it is checkable. You ran a free count, so the number is real. Send it with the count and the date.
Match the angle to the region. A US VP often runs several pods and a large forecast, so lead with forecast and coverage. A UK or German VP often runs named accounts and field teams, so lead with territory. An India-based VP often sells abroad, so lead with pipeline.
These are starting points from how the segments are shaped, not measured results. Do not claim a reply rate you have not measured. Test two angles on 100 contacts each and keep the winner.
Step 7: Save the list as a CSV
When the sample converts, export the list. Bulk CSV export is not on the Free plan. Solo ($97 a month) includes it, and Agency ($497 a month) exports 50k rows a file. The ceiling is 50,000 rows a request and 500,000 rows a day.
curl -s -X POST https://api.leadocean.io/v1/exports \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "gb-vp-sales",
"filters": {
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["GB"],
"emailStatus": ["verified"]
},
"limit": 5000
}'Search filters go inside filters, and limit sets the row count. Poll GET /v1/exports/{id} until the file is ready.
You can build the same export in the app at app.leadocean.io. The Exports page has a filter builder, a column picker and a price preview before you download.
What you get
The count in step 2, run on 2026-10-21 with jobLevel: ["VP"], jobFunction: ["Sales & Business Development"] and country: ["GB"], returned:
{
"total": 3623,
"totalIsExact": true,
"totalAll": 9019,
"distinctCompanies": 2042,
"credits": 0
}total is the mailable count. totalAll is everyone matching without the email filter. The call cost no records.
A search row follows the response shape from the API reference, shown here with placeholder values. Rows carry no addresses; enrich by person_id for those.
{
"success": true,
"data": [
{
"profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "VP of Sales at Acme" },
"contact_data": {
"has_email": true,
"email_status": "verified",
"email_type": "work",
"contact_current_experiences": [
{ "job_title": "VP of Sales", "company_name": "Acme", "company_domain": "acme.com" }
]
},
"meta": { "source_ids": { "person_id": "1234567890" } }
}
],
"meta": { "count": 1, "nextCursor": "..." }
}Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header | Check $LEADOCEAN_API_KEY is set in this shell and sent as x-api-key. |
| 429 | Above the plan's rate limit (5 a second on Free, 200 on Agency) | Honor Retry-After, or pace the loop. |
| 402 | Out of records | The Free plan's 1,000 records are one-off. Move to Solo ($97 a month) or Agency ($497 a month). |
Empty data | A filter value does not match an exact enum string | Check values with leadocean_list_enum_values. Case matters (VP, not vp, for jobLevel). |
| Export refused | Over 50,000 rows a request or 500,000 a day | Split the export by country or company size. |
| Export refused on Free | Bulk CSV export is not on Free | Use search with limit up to 100, or move to Solo. |
FAQ
Is a VP of Sales the same as a CRO?
No. A CRO usually owns sales, marketing and customer success revenue and sits above the VP of Sales. A VP of Sales owns the sales team and the number. Sell to the VP for the pilot and give them a line to forward to the CRO.
Does the count include only people titled "VP of Sales"?
No. It counts people at VP level whose function is Sales & Business Development, so "VP, Enterprise Sales" and "VP of Business Development" are in. To match the literal phrase, use a title filter and compare the two counts.
How many VPs of Sales can I actually email?
On 2026-10-21 the mailable count worldwide was 198,997 for VP level in Sales & Business Development. The default count includes verified, catch_all_valid and catch_all addresses. Bounces are not refunded, so read email_status before you send.
How is this different from selling to a Sales Director?
The method is the same: size, sample, read one profile, write one angle. The VP owns budget and the forecast, the director owns a team's pipeline. See how to sell to a Sales Director.
What does this cost?
Count your VP of Sales list before you write a word
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →