HR tech sells to a committee, not a person. The CHRO owns the budget, a director of talent or HRIS runs the pilot, and finance and IT sign off.
This guide picks that committee, finds it with LeadOcean filters, sizes the list with a free count and drafts the first message for each role.
TL;DR
- Target four roles: the CHRO or head of people, the HR or TA director who runs the tool, the HRIS or people-ops owner, and the CFO or IT lead who signs. Build one list per role.
- Size first with a free count. On 2026-10-21, US HR leaders (C-Team, VP and Director) at companies of 201 to 5,000 people numbered 63,958 mailable contacts across 24,551 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
Decide the roles before you touch a filter. HR software deals stall when you reach only one of them.
| Role | Typical titles | What they decide |
|---|---|---|
| Economic buyer | CHRO, Chief People Officer, VP People | Budget and priority |
| Day-to-day owner | Director of HR, Director of Talent Acquisition, Head of Total Rewards | Pilot, rollout, renewal |
| Systems owner | HRIS manager, People Operations lead | Integrations and data |
| Sign-off | CFO, CIO, Head of IT | Cost, security review |
Your product decides who leads. Payroll and benefits tools start with the CHRO and finance. Recruiting software starts with the TA director. Learning and engagement tools start with the head of people or L&D.
HR tech is not one industry in LeadOcean data. HR buyers sit inside hospitals, banks, universities and software firms. Filter by job function, not by industry. The exception is your own channel: staffing firms and HR services companies, which have their own industry values.
Look the exact strings up before you use them. Enum values are exact, and a wrong one returns nothing.
curl -s "https://api.leadocean.io/v1/enums/job_function" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq -r '.data.values[]' | grep -iE "human|people"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.
{
"jobFunction": ["Human Resources"],
"jobLevel": ["C-Team", "VP", "Director"],
"employeeRange": ["201-500", "501-1000", "1001-5000"],
"country": ["US"]
}The employee range matters more than anything else. Under 200 people, HR is often one generalist who also runs payroll. Over 5,000, buying moves into a procurement process you will not shortcut by email. The middle band has a real HR team and a short path to a decision.
For the sign-off role, swap jobFunction for Finance & Accounting or Information Technology and keep jobLevel at C-Team. For a second list aimed at staffing and HR services firms, filter by industry instead:
{
"industry": ["Human Resources Services", "Staffing and Recruiting"],
"jobLevel": ["C-Team", "VP", "Director"],
"employeeRange": ["51-200", "201-500", "501-1000"],
"country": ["US"]
}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 '{
"jobFunction": ["Human Resources"],
"jobLevel": ["C-Team", "VP", "Director"],
"employeeRange": ["201-500", "501-1000", "1001-5000"],
"country": ["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. A people count also carries meta.distinctCompanies, which tells you how many employers the list spans.
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 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 '{
"jobFunction": ["Human Resources"],
"jobLevel": ["C-Team", "VP"],
"employeeRange": ["501-1000", "1001-5000"],
"country": ["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.
Check the email status on every row. Send to verified and catch_all_valid. LeadOcean does not credit back bounces, so read the status before you send.
Step 5: Enrich the people you will contact
Enrich only the people you will write to. 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 and certifications. HR leaders often list credentials such as SHRM-SCP or SPHR. A prior role at a company that ran the same tool you replace 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, so use it on your top accounts only.
Step 6: Write messages that fit each role
HR buyers are measured on hires, retention and cost per employee. Lead with one of those, not with a feature.
| Role | Their pressure | First line angle |
|---|---|---|
| CHRO | Board reporting, attrition, headcount cost | One number tied to retention or time to hire |
| TA director | Open reqs, recruiter load | Hours saved per recruiter per week |
| HRIS or people ops | Broken integrations, manual data fixes | The systems you connect to and how long it takes |
| CFO | Cost per employee, audit risk | Cost removed, payback period |
Timing matters. Open enrollment, annual review season and budget planning for the next year all pull attention away. Write ahead of them, not during.
Keep it under 80 words. A plain example for a talent director:
Subject: Recruiter hours at Acme
Hi Jane,
How many recruiter hours at Acme go to interview scheduling each week?
We take that step off the recruiter's desk.
Open to a 15-minute call next week?Names and company are placeholders. Use your own product and a claim you can back up.
Step 7: Split the list into campaigns
Do not send one message to the whole list. Split by role and run each segment on its own copy. Three campaigns are enough to start.
- Heads of people.
jobLevelC-Team,jobFunctionHuman Resources, headcount 501 and up. Short, commercial, one number. - HR and TA directors.
jobLevelDirector and VP in Human Resources. These readers test your product, so lead with the workflow and offer a pilot. - Staffing and HR services firms. The industry list from Step 2. They resell or implement, so pitch a partner angle.
Run the count again for each segment. The totals will not add up to the combined list, because one person can match more than one filter set. Use the combined count for planning and the segment counts for sending.
Step 8: Rank accounts before you send
A list of 60,000 people is too many to write by hand. Rank the accounts and send to the top group first.
- Count matching people per company in the test batch. An account with three HR titles is a committee you can reach from several sides.
- Prefer rows with a
verifiedwork email. It bounces less than a catch-all address. - Use
GET /v1/companies/{domain}/peopleon your highest-ranked accounts to find the missing roles, such as the HRIS owner or the CFO. - Drop accounts where the only match is a Staff or Other level title. Those rarely sign.
Then send in batches of 50 to 100 and read the replies. If replies cluster on one role, move volume toward it.
Keep a log of what each segment returns. Note the open rate by role and which subject lines got replies. After two sends you will know which role answers, and you can shift the next batch toward it without guessing.
What you get
Output of leadocean_count_leads on 2026-10-21 for Step 2: jobFunction Human Resources, jobLevel C-Team, VP and Director, employeeRange 201-500, 501-1000 and 1001-5000, country US. The count includes only people whose best email is verified, catch_all_valid or catch_all.
{
"total": 63958,
"totalIsExact": true,
"totalAll": 146913,
"distinctCompanies": 24551,
"unsupportedFilters": []
}Narrow to jobLevel C-Team only, the CHRO tier, on the same date:
{
"total": 7351,
"totalIsExact": true,
"totalAll": 14163,
"distinctCompanies": 5575
}That is 7,351 mailable top HR leaders at 5,575 companies. The largest industries in that count were hospitals and health care (853), software development (502) and higher education (493).
The staffing and HR services list, with jobLevel C-Team, VP and Director, headcount 51 to 1,000 and country US, returned 23,088 mailable people at 2,915 companies on the same date.
Record shape, from the API reference (placeholder values):
{
"success": true,
"data": [
{
"profile_data": {
"profile_full_name": "Jane Doe",
"profile_headline": "Chief People Officer at Acme"
},
"contact_data": {
"has_email": true,
"has_phone": false,
"email_status": "verified",
"contact_current_experiences": [
{ "company_name": "Acme", "company_domain": "acme.com", "job_title": "Chief People Officer" }
]
},
"meta": { "source_ids": { "person_id": "PERSON_ID" } }
}
],
"meta": { "nextCursor": "CURSOR", "depthCapped": false }
}Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header | Check $LEADOCEAN_API_KEY is exported and sent in the x-api-key header |
| 429 | More than the plan's rate limit (5 requests a second on Free, 200 on Agency) | Wait for the Retry-After seconds, then retry slower |
| 402 | The 1,000 Free records are spent | Move to a paid plan or reduce the pull; counts still work |
| Empty results | An enum value is not an exact string, such as "HR" instead of "Human Resources" | Resolve the value with list_enum_values first |
unsupported_filters on a count | A filter like fundingType or hqCity is not supported in people counts | Drop it and count without it |
meta.depthCapped: true | One search stops at 10,000 rows | Split by country or headcount band |
FAQ
Is there an HR tech industry filter?
No. LeadOcean has 534 industry values and none is called HR tech. HR buyers work in every industry, so filter by the Human Resources job function. Use the Human Resources Services and Staffing and Recruiting industries only for the staffing channel.
Can I find HR tech vendors as accounts, for partnerships?
Partly. Most HR software vendors sit under Software Development, which also holds every other kind of software company. Count Software Development with the Human Resources function to find HR teams inside software firms, then review the company list by hand.
How many records does this cost?
About 30: 25 for the test batch and a handful of enrichments. Counts, enum lookups and GET /v1/companies/count are free.
Can I download the whole list as a CSV?
Yes, on a paid plan. Bulk CSV export is not on Free. Solo is $97 a month and Agency is $497 a month, both with a fair-use pace instead of credits. See pricing.
Which company size should I start with?
Start at 501 to 5,000 people. That band has a dedicated HR team, a defined budget cycle and several people on the committee. Move down to 201 to 500 once you have a message that works. Deals there are smaller and the committee is shorter.
Related
- Hub: all lead generation guides
- Lead generation for web3
- Lead generation for travel
- Lead generation for telecom
Count your HR 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 →