An insurtech deal is signed by a business owner and blocked by a technical or risk reviewer. The champion sits in underwriting, claims or product. The veto sits in IT, security and compliance.
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 software, data or services to insurtechs and the insurers they serve.
TL;DR
- Target three roles per account: the budget owner (CEO, COO or CTO), the champion (underwriting, claims or product lead) and the gatekeeper (security, IT or compliance).
- Size first with a free count. On 2026-10-21, US-based people at companies matching the keyword "insurtech" held 5,396 mailable VPs and C-level people across 851 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. Insurtech buyers split into three groups, and each reads a cold email differently.
| You sell | Economic buyer | Champion | Gatekeeper |
|---|---|---|---|
| Developer or infrastructure tools | CTO, VP Engineering | Director of engineering, platform lead | Security, compliance |
| Underwriting, claims or fraud software | Chief Underwriting Officer, COO | Head of claims, head of underwriting | IT, legal |
| Services, data or marketing | CEO, CRO, CFO | VP Product, VP Distribution | Finance, legal |
Company size changes the committee. At 50 people the CEO or CTO buys and one person owns compliance. At 500 people there is a claims organisation, a vendor review and a security questionnaire before any contract.
LeadOcean has no "insurtech" industry. It files carriers and brokers under Insurance, Insurance Carriers and Insurance Agencies and Brokerages, and adjusters under Claims Adjusting; Actuarial Services. Many insurtechs sit under Software Development or Financial Services. Look the exact strings up before you use them.
for q in insur claims; do
curl -s "https://api.leadocean.io/v1/enums/industry?q=$q" | jq -r '.data.values[]'
doneThe same lookup is free through the MCP tool leadocean_list_enum_values. Enum values are exact strings, so Insurtech as an industry returns nothing.
One warning. Insurance holds traditional carriers and agencies as well as technology firms. If you sell to software-led insurtechs only, add a keyword filter (Step 3), then read the first batch.
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": ["Insurance"],
"hqCountry": ["US"],
"employeeRange": ["51-200", "201-500"],
"jobLevel": ["C-Team", "VP"]
}For the champions and gatekeepers, switch to titles. Title values are keywords, so list the variants you want.
{
"industry": ["Insurance"],
"hqCountry": ["US"],
"employeeRange": ["51-200", "201-500"],
"title": ["Chief Underwriting Officer", "Head of Claims", "VP Claims", "Chief Information Security Officer"]
}Run one list per role. A claims lead and a platform engineer 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
Insurtech is not one market. A managing general agent, a claims platform and an embedded-insurance API face different pressure.
- Headcount. Use
employeeRange. From 51 to 200 people, the founder or CTO decides. From 201 to 500, a compliance lead and a vendor process exist. Above 1,000, expect procurement and a security review. - Function. Use
jobFunctionset toEngineeringorInformation Technologyfor builders, andOperationsfor claims and policy servicing. Underwriting titles are best caught withtitle. - Region. Use
hqCountryfor the account andcountryfor the person. A UK lead and a US lead face different regulators, so write them separate lines. - Self-described insurtechs. Use
companyKeywords: ["insurtech"]. It matches words in the employer's description, so it finds software-led firms the industry label mixes with carriers.
The companyKeywords filter applies only when the matching companies number 50,000 or fewer. Add a country or a size band if a count comes back with the filter named in unsupportedFilters.
Count each cut with leadocean_count_leads before you commit. 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
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 '{
"companyKeywords": ["insurtech"],
"country": ["US"],
"jobLevel": ["C-Team", "VP"],
"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 states hold the accounts before you pick a region. The MCP tool leadocean_count_companies does the same.
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 '{
"companyKeywords": ["insurtech"],
"country": ["US"],
"jobFunction": ["Engineering", "Information Technology"],
"jobLevel": ["Director", "VP", "C-Team"],
"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 6: Enrich the people 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 claims lead who spent ten years at a carrier knows the legacy system you replace. That 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 7: Write messages that fit the buyer
Insurance buyers are cautious by training. Open with a specific problem and a small first step, not a claim about speed.
| Buyer | Their pressure | First line angle |
|---|---|---|
| CTO or VP Engineering | Legacy core systems, integration time, audit trail | Say what it connects to and how long setup takes |
| Head of claims | Cycle time, leakage, adjuster workload | Name the one claims step you remove |
| Head of underwriting | Data quality, turnaround on submissions | Lead with the measurable task, not a model name |
| CEO at a small firm | Runway, carrier capacity, distribution cost | Offer the smallest first step, with a price |
Keep claims you can prove. Do not cite a customer, a regulator or a result you cannot show. Insurance staff check claims, and they distrust urgency.
Do not promise compliance outcomes. Say what your product does. Let their team decide what it means for their licence.
A three-line email works better than a pitch. One line on their situation, one on what you do, one question.
Subject: Claims intake at Acme
Jane, carriers at your size often route first notice of loss through a
shared inbox. We give that queue an owner and a status for each claim.
Worth a look, or is intake settled this quarter?The names above are placeholders. Replace them with fields from your batch.
Step 8: 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": {
"companyKeywords": ["insurtech"],
"country": ["US"],
"jobLevel": ["C-Team", "VP"]
},
"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 |
|---|---|---|
Industry Insurance, US HQ, 51 to 500 employees, VP or C-Team | 18,250 | 2,323 |
| Company keyword "insurtech", US-based person, VP or C-Team | 5,396 | 851 |
| Company keyword "insurtech", US-based person, Engineering or IT, VP or C-Team | 215 | 130 |
Without the email condition, the first filter matches 65,865 people, the second 11,997 and the third 451. The gap is people with no usable address. The third list is small, so merge it with its neighbour rather than give it its own sequence.
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": "Head of Claims 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 Insurtech as an industry | 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
Is there an insurtech industry filter?
No. Use Insurance and its neighbours, or companyKeywords: ["insurtech"] for self-described insurtechs. Read a 25-row batch to check that the employers are the kind you sell to.
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 filter by funding stage?
Funding filters narrow a search, but they do not work in the free count tool, so the counts here leave them out. Count without them, then add them when you search.
Where is the phone number?
Call GET /v2/people/phone. Each call costs one record, including a call that finds no number.
Related guides
- B2B lead generation for web3
- B2B lead generation for travel
- B2B lead generation for telecom
- All B2B lead generation guides
- LeadOcean pricing
Count your insurtech 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 →