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 HR Tech (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.

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

Decide the roles before you touch a filter. HR software deals stall when you reach only one of them.

RoleTypical titlesWhat they decide
Economic buyerCHRO, Chief People Officer, VP PeopleBudget and priority
Day-to-day ownerDirector of HR, Director of Talent Acquisition, Head of Total RewardsPilot, rollout, renewal
Systems ownerHRIS manager, People Operations leadIntegrations and data
Sign-offCFO, CIO, Head of ITCost, 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.

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

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

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

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

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

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.

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

RoleTheir pressureFirst line angle
CHROBoard reporting, attrition, headcount costOne number tied to retention or time to hire
TA directorOpen reqs, recruiter loadHours saved per recruiter per week
HRIS or people opsBroken integrations, manual data fixesThe systems you connect to and how long it takes
CFOCost per employee, audit riskCost 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:

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

  1. Heads of people. jobLevel C-Team, jobFunction Human Resources, headcount 501 and up. Short, commercial, one number.
  2. HR and TA directors. jobLevel Director and VP in Human Resources. These readers test your product, so lead with the workflow and offer a pilot.
  3. 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 verified work email. It bounces less than a catch-all address.
  • Use GET /v1/companies/{domain}/people on 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.

json
{
  "total": 63958,
  "totalIsExact": true,
  "totalAll": 146913,
  "distinctCompanies": 24551,
  "unsupportedFilters": []
}

Narrow to jobLevel C-Team only, the CHRO tier, on the same date:

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

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

ErrorCauseFix
401Missing or wrong x-api-key headerCheck $LEADOCEAN_API_KEY is exported and sent in the x-api-key header
429More than the plan's rate limit (5 requests a second on Free, 200 on Agency)Wait for the Retry-After seconds, then retry slower
402The 1,000 Free records are spentMove to a paid plan or reduce the pull; counts still work
Empty resultsAn 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 countA filter like fundingType or hqCity is not supported in people countsDrop it and count without it
meta.depthCapped: trueOne search stops at 10,000 rowsSplit 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.

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 →