Biotech buyers split into scientists who pick the tool and operations or procurement leads who sign for it. You need both on the list, with a different first line for each.
This guide picks the committee, finds it with LeadOcean filters, sizes the list with a free count and drafts the first message per role.
TL;DR
- Target three roles per account: the scientific lead who picks, the operations or procurement lead who buys, and the executive who approves budget.
- Size first with a free count. On 2026-10-21, biotech companies headquartered in the US held 36,450 mailable VPs and C-level people across 7,804 companies.
- 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
A biotech sale rarely closes on one signature. Pick the roles before you touch a filter.
| Seller type | Economic buyer | Champion | Gatekeeper |
|---|---|---|---|
| Lab software, data or AI tools | CSO, CTO, VP R&D | Director of discovery or informatics | IT, security |
| Reagents, instruments, CRO services | VP Operations, COO | Head of a lab or program | Purchasing, finance |
| Staffing, consulting, regulatory help | CEO, COO | VP Clinical or Regulatory | Finance, legal |
Company size changes the committee. A 20-person startup has a CEO who is also the buyer. A 500-person company has a procurement team and a longer cycle.
LeadOcean has two biotech industry values: Biotechnology and Biotechnology Research. Pharma sits apart under Pharmaceutical Manufacturing and Pharmaceuticals. Look the exact strings up before you use them.
for q in biotech pharma diagnostic; do
curl -s "https://api.leadocean.io/v1/enums/industry?q=$q" \
-H "x-api-key: $LEADOCEAN_API_KEY" | 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": ["Biotechnology", "Biotechnology Research"],
"jobLevel": ["C-Team", "VP"],
"hqCountry": ["US"],
"employeeRange": ["51-200", "201-500"]
}Narrow by function when your product has one owner. A lab-data tool sells to Science and Information Technology. A reagent supplier sells to Purchasing and Operations.
Run one list per role. Mixing a CSO and a purchasing manager into one sequence gives you a message that fits neither.
Add keywords when you sell into a modality. The companyKeywords filter matches words in the employer's description, specialties and tags, so ["gene therapy"] or ["antibody"] finds companies that an industry label alone misses. It applies when the matching companies number 50,000 or fewer. Check the effect with a count before you rely on it.
Use geography to match how you sell. Biotech clusters in a few places: on the 2026-10-21 company count, California held 3,216 US biotech companies with a mailable contact and Massachusetts held 1,518. If you run field sales or events, build one list per cluster. If you sell by email only, keep the whole country in one list.
Funding stage matters too. A company that just raised has budget, and a company in a long gap does not. 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. Expect a smaller list than the count shows.
Exclude what you cannot sell to. Add excludeTitle values such as ["intern", "assistant"] so a test batch is not full of students, 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": ["Biotechnology", "Biotechnology Research"],
"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 company 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. 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 of them 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": ["Biotechnology", "Biotechnology Research"],
"jobFunction": ["Science"],
"jobLevel": ["C-Team", "VP", "Director"],
"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 scientist who spent years at a named lab, or who holds a relevant degree, gives you 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
Biotech buyers answer to timelines, funding runway and validation, not to feature lists. Open with the work they have this quarter.
| Buyer | Their pressure | First line angle |
|---|---|---|
| CSO or VP R&D | Candidates to move forward before the next raise | Name the bottleneck your tool removes, in weeks saved |
| Head of operations or procurement | Vendor qualification and supply continuity | Lead delivery, lead time and a clear quote path |
| CEO of a small company | Runway | Lead the cost of doing nothing, then one number |
| VP Clinical or Regulatory | Submission dates | Offer to cut one concrete step from the filing process |
Keep claims you can prove. Do not cite a customer or a result you cannot show. Scientists check claims.
Sequence by role, not by company. Send the scientific lead a note about the technical problem. Send the operations lead a note about lead time and supply. Send the executive a note about runway and speed. When one replies, you can name the others at the account.
Check the timing. Biotech teams cluster work around funding rounds, trial readouts and conference seasons. A message sent the week before a major meeting lands in a full inbox, so aim for the weeks after.
A three-line email works better than a pitch. One line on their situation, one on what you do, one question.
Subject: Assay turnaround at Acme Bio
Jane, a few discovery teams on your stage are waiting on plate-reader
data longer than they plan for. We cut that step in our workflow.
Worth a short look at how, 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 '{
"name": "biotech-us-vp",
"filters": {
"industry": ["Biotechnology", "Biotechnology Research"],
"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.
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 |
|---|---|---|
| Biotechnology and Biotechnology Research, US HQ, VP or C-Team | 36,450 | 7,804 |
| Same industries, US HQ, Science function, Director, VP or C-Team | 1,288 | 882 |
| Same industries, US HQ, Purchasing or Operations, Director, VP or C-Team | 6,237 | 1,501 |
Without the email condition, the first filter matches 129,442 people. The gap is people with no usable address.
On the company side, leadocean_count_companies found 11,818 US-headquartered biotech companies with at least one mailable contact. Of those, 1,373 have 51 to 200 employees and 349 have 201 to 500. California holds 3,216 and Massachusetts 1,518.
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 Research at Acme"
},
"contact_data": {
"has_email": true,
"email_status": "verified",
"contact_current_experiences": [{
"job_title": "VP Research",
"company_name": "Acme",
"company_domain": "acme.com"
}]
}
}
],
"meta": { "count": 1, "limit": 25, "credits": 1, "nextCursor": "CURSOR", "depthCapped": false }
}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 Biotech | Look the value up with GET /v1/enums/industry?q=... or leadocean_list_enum_values |
| Export refused | Over 50,000 rows a request or 500,000 a day | Split by country 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
Is there a single biotech industry filter?
Two: Biotechnology and Biotechnology Research. Add Pharmaceutical Manufacturing and Pharmaceuticals if you also sell to pharma, 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 small biotech startups?
Yes, but expect thinner data. 6,028 of the 11,818 mailable-contact biotech companies in the US have 1 to 10 employees. Start with 11 to 500 employees, where titles and work emails are more complete.
Where is the phone number?
Call GET /v2/people/phone. It costs one record a call on every plan, Free included, even when it finds nothing.
Related guides
- B2B lead generation for web3
- B2B lead generation for travel
- B2B lead generation for telecom
- LeadOcean pricing
- All guides on the LeadOcean blog
Count your biotech list free, then pull the first 25 contacts
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →