Pharma sales cycles run through several functions at once. The person who wants your product rarely signs for it, so the list needs the whole committee.
This guide picks the roles, turns them into LeadOcean filters, sizes the list with a free count and drafts a first message per role.
TL;DR
- Target four roles per account: the owner who wants it, the lead who buys, the executive who approves and the regulatory or quality lead who can veto.
- Size first with a free count. On 2026-10-21, pharma companies headquartered in the US held 24,384 mailable VPs and C-level people across 4,103 employers.
- The recipe takes about 45 minutes and spends about 30 records, so it fits inside the Free plan's 1,000.
Prerequisites
- A LeadOcean account on the Free plan. Sign up at app.leadocean.io, no card.
- An API key exported as
$LEADOCEAN_API_KEY. curlandjq, or any HTTP client.- Optional: the hosted MCP server at https://api.leadocean.io/mcp if you would rather run the counts from Claude.
Step 1: Pick the buying committee
The buyer depends on what you sell. Choose your row before you touch a filter.
| You sell | Economic buyer | Champion | Gatekeeper |
|---|---|---|---|
| Sales and marketing tools, data, agencies | VP or Chief Commercial Officer | Head of brand, marketing or sales operations | Compliance, legal review |
| Lab, manufacturing or supply services | COO, VP Manufacturing | Director of operations or quality | Procurement, quality assurance |
| Clinical and regulatory services | VP Clinical, Chief Medical Officer | Director of clinical operations | Regulatory affairs, finance |
| IT, data and AI tools | CIO, CTO | Director of data or informatics | Security, validation |
Company size changes the committee. A 200-person specialty company has a handful of executives who each own a function. A large company has procurement, a quality group and layered approvals, and the cycle is longer.
LeadOcean files pharma under two industry values: Pharmaceutical Manufacturing and Pharmaceuticals. Biotech sits apart under Biotechnology, so keep that list separate. Look the exact strings up first.
for q in pharma biotech; do
curl -s "https://api.leadocean.io/v1/enums/industry?q=$q" | jq -r '.data.values[]'
doneEnum values are exact strings. The same lookup is free through the MCP tool leadocean_list_enum_values.
Step 2: Turn the committee into filters
Write the filters as flat JSON. Every filter is an array, even when it holds one value.
{
"industry": ["Pharmaceutical Manufacturing", "Pharmaceuticals"],
"jobLevel": ["C-Team", "VP"],
"hqCountry": ["US"],
"employeeRange": ["201-500", "501-1000", "1001-5000"]
}Narrow by function when your product has one owner. A sales tool sells to Sales & Business Development and Advertising & Marketing. A supply service sells to Purchasing, Supply Chain & Logistics and Operations. A clinical vendor sells to Healthcare & Human Services and Science.
Run one list per role. A message for a commercial VP does not fit a quality director.
Use companyKeywords when you sell into a niche. It matches words in the employer's description, specialties and tags, so ["generic drugs"] or ["specialty pharma"] finds companies an industry label alone misses. It applies when the matching companies number 50,000 or fewer, so check the effect with a count.
Use geography to match how you sell. US pharma clusters in a few states. On the 2026-10-21 company count, New Jersey held 119 mid-size US pharma companies (201 to 5,000 employees), California 104 and Pennsylvania 83. If you run field sales, build one list per cluster.
Funding filters are not available in a free people count, so size the list without them. At search time, fundingType and minLastFundingYear narrow it further, which matters for venture-backed drug developers more than for established manufacturers.
Exclude what you cannot sell to. Add excludeTitle values such as ["intern", "assistant"], and set excludeCompanyName for competitors and existing customers.
Step 3: Size the list with a free count
Count before you pull. A count costs no records and can run as often as you like.
curl -s "https://api.leadocean.io/v1/people/search?count=true" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"industry": ["Pharmaceutical Manufacturing", "Pharmaceuticals"],
"jobLevel": ["C-Team", "VP"],
"hqCountry": ["US"],
"limit": 1
}' | jq '.meta'count=true goes in the query string. The JSON body rejects unknown fields. The response has no rows, only meta.total (capped at 100,000) and meta.countOnly: true.
For the account side, GET /v1/companies/count takes the company-search filters and returns an exact total with breakdowns by industry, headcount band, HQ country and HQ state. The MCP tool leadocean_count_companies does the same. Use it to see where the accounts sit before you pick a region.
Step 4: Pull a 25-row test batch
Pull a small batch first. Read the titles. If half are the wrong role, tighten the filters before you spend more.
curl -s "https://api.leadocean.io/v1/people/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"industry": ["Pharmaceutical Manufacturing", "Pharmaceuticals"],
"jobFunction": ["Sales & Business Development"],
"jobLevel": ["C-Team", "VP"],
"hqCountry": ["US"],
"limit": 25
}' > batch.json
jq '.data | length' batch.jsonA page of 25 is 25 records. Page with cursor from meta.nextCursor when you want more. One search pages to 10,000 rows, and the last page carries meta.depthCapped: true. Narrow the filters instead of walking further.
Each row carries an email status. Send to verified and catch_all_valid. Read the status before you send, because LeadOcean does not credit back bounces.
Step 5: Enrich the champions you will contact
Enrich only the people you will contact. Enrich takes exactly one of linkedin_url, email, phone or 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_SEARCH", "reveal_email": true}'Enrich also returns career history in resume_data: past roles, education, certifications and publications, each when held. A director who spent ten years in clinical operations is a better opener than a job title. An enrichment that finds nothing is a 404 and costs nothing.
For a phone number, call GET /v2/people/phone. A v2 contact call costs one record even when it finds nothing.
Step 6: Write messages that fit the buyer
Pharma buyers answer to regulators, patents and launch dates. Open with a constraint they already have.
| Buyer | Their pressure | First line angle |
|---|---|---|
| Commercial VP | Launch targets and a shrinking prescriber pool | Name the segment you reach and the time it saves |
| Operations or manufacturing lead | Yield, supply continuity and audits | Lead delivery, lead time and a clear quote path |
| Clinical lead | Enrollment timelines | Offer to cut one concrete step from the study |
| Regulatory or quality lead | Submission dates and inspections | Show how your work stays inside their process |
Keep claims you can prove. Do not cite a customer or a result you cannot show. Regulated teams check claims, and compliance reviews every outside pitch.
Sequence by role, not by company. When one person replies, you can name the others at the account.
Keep the email plain. Do not make health or efficacy claims about a drug. Talk about your own product and the work it changes.
Subject: Rep call planning at Acme Pharma
Jane, a few commercial teams at your stage still build call lists by
hand each quarter. We cut that step down to an afternoon.
Worth a short look, or is this not on your list this quarter?The names above are placeholders. Replace them with the fields from your batch.
Step 7: Export the full list
When the test batch reads right, export the rest. Bulk CSV export is not on Free. It comes with Solo at $97 a month and with Agency at $497 a month. On Free, page the search endpoint inside your 1,000 records.
curl -s -X POST "https://api.leadocean.io/v1/exports" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"filters": {
"industry": ["Pharmaceutical Manufacturing", "Pharmaceuticals"],
"jobLevel": ["C-Team", "VP"],
"hqCountry": ["US"]
},
"limit": 5000
}'An export takes up to 50,000 rows a request and 500,000 a day. The app at app.leadocean.io has an Exports page with a filter builder, a column picker and the record price before you start. See pricing for the plan limits.
What you get
These are free counts from the LeadOcean MCP tools on 2026-10-21. They count mailable people (verified, catch_all_valid or catch_all email), not everyone.
| Filter | Mailable people | Employers |
|---|---|---|
| Pharmaceutical Manufacturing and Pharmaceuticals, US, VP or C-Team | 24,384 | 4,103 |
| Same industries, US, Sales & Business Development, VP or C-Team | 1,498 | 576 |
| Same industries, US, Science or Healthcare & Human Services, Director, VP or C-Team | 2,496 | 408 |
| Same industries, US, Purchasing or Supply Chain & Logistics, Director, VP or C-Team | 27 | 17 |
Without the email condition, the first filter matches 68,765 people. The gap is people with no usable address. The purchasing row is thin: add Operations to the function filter and count again before you rely on it.
On the company side, leadocean_count_companies found 880 US-headquartered pharma companies with 201 to 5,000 employees. Of those, 474 with 201 to 500, 181 with 501 to 1,000 and 225 with 1,001 to 5,000.
The shape of one search row follows (response shape from the API reference, placeholder values).
{
"success": true,
"data": [
{
"profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "VP Commercial at Acme" },
"contact_data": { "has_email": true, "has_phone": false, "email_status": "verified" }
}
],
"meta": { "nextCursor": "CURSOR" }
}Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key | Re-export $LEADOCEAN_API_KEY and check the header name |
| 429 | Above the plan's rate limit (5 requests a second on Free, 200 on Agency) | Wait for Retry-After, then slow the loop |
| 402 | The 1,000 Free records are spent | Move to Solo or Agency, or narrow the pull |
| Empty results | A misspelled enum value such as Pharma | Look the value up with /v1/enums/industry or leadocean_list_enum_values |
| Export refused | Over 50,000 rows a request or 500,000 a day | Split by state or headcount band and run several exports |
| Export rejected on Free | Bulk CSV export is not on Free | Page the search endpoint, or move to Solo |
FAQ
Which industry values cover pharma?
Two: Pharmaceutical Manufacturing and Pharmaceuticals. Add Biotechnology only if you also sell to biotech, and keep that list separate because the pitch differs.
Does the count include people I can email?
The default count includes only people whose best email is verified, catch_all_valid or catch_all. Pass emailStatus to widen it, and label the number by what you filtered.
How many records does this guide spend?
About 30: a 25-row test batch plus a few enrichments. Counts, enum lookups and enrichments that find nothing cost no records.
Can I find similar pages for other sectors?
Where is the phone number?
Call GET /v2/people/phone. Each call costs one record, including a call that finds no number.
Count your pharma buyers free, then pull only the ones you will email
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →