Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Build a B2B Lead List for Biotech (Buyers, Filters and Messaging)

Pick the buying committee, count the list for free, then spend records only on the people you will email.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

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.
  • curl and jq, 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 typeEconomic buyerChampionGatekeeper
Lab software, data or AI toolsCSO, CTO, VP R&DDirector of discovery or informaticsIT, security
Reagents, instruments, CRO servicesVP Operations, COOHead of a lab or programPurchasing, finance
Staffing, consulting, regulatory helpCEO, COOVP Clinical or RegulatoryFinance, 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.

bash
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[]'
done

Enum 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.

json
{
  "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.

bash
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.

bash
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.json

A 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.

bash
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.

BuyerTheir pressureFirst line angle
CSO or VP R&DCandidates to move forward before the next raiseName the bottleneck your tool removes, in weeks saved
Head of operations or procurementVendor qualification and supply continuityLead delivery, lead time and a clear quote path
CEO of a small companyRunwayLead the cost of doing nothing, then one number
VP Clinical or RegulatorySubmission datesOffer 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.

text
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.

bash
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.

FilterMailable peopleEmployers
Biotechnology and Biotechnology Research, US HQ, VP or C-Team36,4507,804
Same industries, US HQ, Science function, Director, VP or C-Team1,288882
Same industries, US HQ, Purchasing or Operations, Director, VP or C-Team6,2371,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).

json
{
  "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

ErrorCauseFix
401Missing or wrong x-api-keyRe-export $LEADOCEAN_API_KEY and check the header name
429Above the plan's rate limit (5 requests a second on Free, 200 on Agency)Wait for Retry-After, then slow the loop
402The 1,000 Free records are spentMove to Solo or Agency, or narrow the pull
Empty resultsA misspelled enum value such as BiotechLook the value up with GET /v1/enums/industry?q=... or leadocean_list_enum_values
Export refusedOver 50,000 rows a request or 500,000 a daySplit by country or headcount band and run several exports
Export rejected on FreeBulk CSV export is not on FreePage 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.

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 →