A Web3 company rarely buys like a normal software company. The champion is an engineer, the veto sits with security, and the budget owner is often a founder who reads every cold email.
This guide picks that committee, finds it with LeadOcean filters, sizes the list with a free count and drafts a first message per role. It suits anyone selling tools, audits, data or services to blockchain teams.
TL;DR
- Target three roles per account: the budget owner (founder, CEO, COO), the champion (head of engineering or product) and the gatekeeper (security or compliance).
- Size first with a free count. On 2026-10-21, the
Blockchain Servicesindustry held 1,680 mailable VPs and C-level people across 1,147 employers. - The recipe takes about 40 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
Pick the roles before you touch a filter. Web3 buyers split into three groups, and each reads a cold email differently.
| You sell | Economic buyer | Champion | Gatekeeper |
|---|---|---|---|
| Developer or infrastructure tools | CTO, co-founder | Head of engineering, protocol lead | Security lead |
| Audits, security or compliance tools | CEO, COO | Head of security, head of risk | Compliance, legal |
| Marketing, data or services | CEO, CMO | Head of growth, head of community | Finance, legal |
Company size changes the committee. At 20 people the founder decides and one engineer owns security. At 200 people there is a compliance function, a vendor review and often a legal counsel in the loop.
Many Web3 teams are small and distributed. Titles also run loose: "Head of Ecosystem" or "Core Contributor" will not match a tidy title list. Test your titles on a small batch before you trust them.
LeadOcean has a Blockchain Services industry. It does not have "Web3" or "crypto" as an industry. Neighbours worth checking are Financial Services, Capital Markets and Venture Capital and Private Equity. Look the exact strings up before you use them.
for q in blockchain financ capital venture; do
curl -s -G "https://api.leadocean.io/v1/enums/industry" \
--data-urlencode "q=$q" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq -r '.data.values[]'
doneThe same lookup is free through the MCP tool leadocean_list_enum_values. Enum values are exact strings, so Web3 as an industry returns nothing.
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": ["Blockchain Services"],
"jobLevel": ["C-Team", "VP"]
}For the champions, switch to function and level.
{
"industry": ["Blockchain Services"],
"jobFunction": ["Engineering"],
"jobLevel": ["Director", "VP", "C-Team"]
}For the gatekeepers, use titles. Title values are keywords, so list the variants you want.
{
"industry": ["Blockchain Services"],
"title": ["Head of Security", "CISO", "Head of Compliance", "Chief Compliance Officer"]
}Run one list per role. A founder and a security lead on one sequence get a message that fits neither.
Exclude what you cannot sell to. Add excludeTitle values such as ["intern", "assistant"] and excludeCompanyName for competitors and existing customers.
Step 3: Split by size, function and region
Web3 is not one market. An exchange, a layer-2 team and a wallet startup feel different pressure.
- Headcount. Use
employeeRange. From 11 to 50 people, the founder decides. From 51 to 200, a security owner and a vendor process appear. Above 200, expect compliance and procurement. - Function. Use
jobFunctionset toEngineeringfor builders,Finance & Accountingfor treasury andLegalfor counsel. Security and compliance titles are best caught withtitle. - Region. Use
hqCountryfor the account andcountryfor the person. A Singapore team and a US team face different regulators, so write them separate lines.
The companyKeywords filter matches words in the employer's description, so ["web3", "crypto"] can find companies the industry label misses. It applies only when the matching companies number 50,000 or fewer. Add a region or a size band if it is refused.
Count each cut with leadocean_count_leads, or the same filters over REST, before you commit.
{
"industry": ["Blockchain Services"],
"jobFunction": ["Engineering"],
"jobLevel": ["Director", "VP", "C-Team"],
"employeeRange": ["51-200"],
"country": ["SG"]
}If a segment holds a few hundred people or fewer, merge it with its neighbour. A list that small cannot support its own sequence.
Step 4: Size the list with a free count
Counts decide how much effort a segment deserves. A segment of 1,000 people can carry its own sequence. A segment of 40 is a hand-written list.
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": ["Blockchain Services"],
"jobFunction": ["Engineering"],
"jobLevel": ["Director", "VP", "C-Team"],
"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 which countries hold the accounts before you pick a region.
Step 5: Pull a 25-row test batch
Pull a small batch first. Read the titles and employers. If half are the wrong kind of firm, 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": ["Blockchain Services"],
"jobLevel": ["C-Team", "VP"],
"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.
Check contact_data.email_status on every row before you send. LeadOcean gives no refund for bounced emails, so drop anything that is not verified or a catch-all result.
Step 6: Enrich the people you will email
Enrich only the people who pass the read. Enrichment takes exactly one of linkedin_url, email, phone or person_id. There is no name plus domain lookup, so take the person_id from the batch.
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_BATCH", "reveal_email": true}'A person we hold nothing for is a 404 and costs nothing. Since October 2026 the response also carries career history: past roles, education, certifications and awards. A past role at a known protocol is a better opening line than a company description.
Past employers carry no company_id yet, so match them by name only.
Step 7: Write one message per role
Web3 buyers distrust hype. Lead with the job you do for them, then one fact that proves you read their situation.
- Founder or CEO. Name one outcome and one cost. Keep it under 70 words. Skip token talk unless it is your product.
- Head of engineering. Name the technical problem, the stack it touches and how long setup takes. Offer a test, not a call.
- Security or compliance. Say what you do with their data, what you do not, and where the answer is written down. Link the doc.
Here is a template for the engineering lead. Replace the placeholders.
Subject: {{pain}} on {{stack}}
Hi {{first_name}},
{{company}} ships {{product}}. Teams at that stage usually hit {{pain}} around {{trigger}}.
We built {{your_tool}} for that. Setup is {{minutes}} minutes, and you can test it on one repo before anyone signs anything.
Worth a look this week?
Jane DoeKeep the first email short and plain. Skip emoji, skip price talk and skip claims you cannot back with a link. One clear question beats three soft ones.
Send each role its own sequence and track replies by role. After the first 100 sends, the role that replies most tells you where the champion really sits.
What you get
The free count from Step 4 returns sizes before any record is spent. These are results from leadocean_count_leads on 2026-10-21. They count mailable people: email status verified, catch_all_valid or catch_all.
| Filters | Mailable people | Employers | All people, any email |
|---|---|---|---|
Blockchain Services, C-Team or VP | 1,680 | 1,147 | 6,930 |
Blockchain Services, Engineering, Director, VP or C-Team | 145 | 129 | 480 |
Blockchain Services, security or compliance titles (four variants) | 10 | 10 | 26 |
The security row shows why you size first. Ten mailable gatekeepers is a handful of accounts, not a campaign. Use it as a research list, and reach the committee through the founders and engineers instead.
A search row has this shape. Response shape from the API reference (placeholder values):
{
"success": true,
"data": [
{
"profile_data": {
"profile_full_name": "Jane Doe",
"profile_headline": "Head of Engineering at Acme",
"profile_url": "https://www.linkedin.com/in/jane-doe"
},
"contact_data": {
"has_email": true,
"has_phone": false,
"email_status": "verified",
"email_type": "work"
},
"meta": { "source_ids": { "person_id": "1234567890" } }
}
],
"meta": { "count": 1, "credits": 1, "nextCursor": "CURSOR" }
}Search rows carry no contact points. Enrich by person_id with reveal_email for the address and for resume_data.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or bad x-api-key header | Re-export $LEADOCEAN_API_KEY and check for a trailing space. |
| 429 | Requests above the plan's rate limit (5 a second on Free, 200 on Agency) | Wait for the Retry-After header, then slow the loop. |
| 402 | The Free plan's 1,000 records are spent | Move to Solo at $97 a month or Agency at $497 a month. |
| Empty results | A bad enum value such as Web3 for industry | Look the value up with /v1/enums or leadocean_list_enum_values. |
meta.depthCapped: true | One search reached 10,000 rows | Narrow the filters and run a second search. |
| Export refused | The request is above 50,000 rows, or 500,000 rows for the day | Split the export, and note bulk CSV export is not on Free. |
FAQ
Is there a "Web3" filter?
No. Use the Blockchain Services industry and add companyKeywords such as ["web3", "crypto"] for companies filed elsewhere. Read the first batch to see what the keyword pulls in.
How many Web3 buyers can I reach for free?
The count is free, so size it as often as you like. On 2026-10-21 there were 1,680 mailable VPs and C-level people in Blockchain Services. The Free plan spends 1,000 records, once.
Do the records include wallets or on-chain data?
No. LeadOcean holds people and company data: roles, employers, emails and phones. Pair it with on-chain tools if you target by wallet activity.
Can I filter by funding round?
Funding filters do not count reliably in free counts, so size the list without them. Apply the funding filter at search time to narrow it further.
How fresh is the data?
The dataset is refreshed monthly, and each record carries its own fetched_at date. Read it on fast-moving teams, since Web3 staff change often.
Related guides: lead generation for travel, telecom and solar. See pricing for plan limits, or return to the lead generation guides.
Count your Web3 buyers free, then pull the first 25
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →