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

How-to guide

How to Do B2B Lead Generation for Developer Tools (Who to Target and How)

Name the buyer and the veto, build the filter, size the list with a free count, then pull only the rows you will write to.

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

TL;DR

Three points.

  • Developer tools sell to a committee, not a person. An engineering leader picks, a developer champions, a platform or security lead vetoes, and finance or a founder signs. Pick one of them per list.
  • It takes about 35 minutes. Sizing is free. The first pull of 25 people spends about 25 of your 1,000 free records.
  • Count first, then search. A free count on 2026-10-21 showed 113 mailable VP and C-level engineering people at 58 US software companies. Those companies have 51 to 200 staff and describe themselves as developer tools, platforms or APIs.

Prerequisites

  • A LeadOcean account and key from app.leadocean.io. The free plan has no card and 1,000 records, one-off, at 5 requests a second. Free keys get both search and enrich scopes.
  • The key in your shell as $LEADOCEAN_API_KEY.
  • curl and jq. Optional: the hosted MCP server at https://api.leadocean.io/mcp if you work from an AI assistant. Its count tools are free.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

Step 1: Map the buying committee

Developer tools are bought bottom-up and signed top-down. Name each role before you touch a filter, because each one needs a different message.

RoleWhat they do in the dealFilter to use
Developer or tech leadTries it first, becomes the championjobFunction: ["Engineering"], jobLevel: ["Manager", "Staff"]
Engineering manager or directorOwns the team's tooling and the roadmapjobFunction: ["Engineering"], jobLevel: ["Director", "Manager"]
VP Engineering or CTOApproves spend and vetoes anything that touches the stackjobFunction: ["Engineering"], jobLevel: ["VP", "C-Team"]
Platform, DevOps or security leadBlocks on access, data and uptimetitle: ["Head of Platform", "Head of DevOps", "CISO"]
Founder or CEOSigns when the company is smalljobLevel: ["C-Team"]

Do not mix all five in one sequence. Pick one role for the first list. Selling a seat-based tool to teams? Start with the engineering manager. Selling infrastructure with a security review? Start with the VP Engineering or CTO and name the platform lead in the follow-up.

Step 2: Find the filter values

Industry, size and job values are exact strings. Guessing returns empty results. Look them up first. These calls are free.

bash
curl -s "https://api.leadocean.io/v1/enums/industry?q=software" \
  -H "x-api-key: $LEADOCEAN_API_KEY" | jq -r '.data.values[]'

Through MCP, call leadocean_list_enum_values with name: "industry" and q: "software". On 2026-10-21 it returned seven values. They include Computer Software, Embedded Software Products, IT System Custom Software Development and Software Development.

"Developer tools" is not an industry label. Most developer-tool companies sit under Software Development, so combine that industry with a company keyword. The keyword matches the company description, specialties, tags or name.

Use these filters.

  • industry: ["Software Development"]
  • companyKeywords: ["developer tools", "developer platform", "API"]. Several values OR together.
  • employeeRange: ["51-200"]. Valid ranges include 11-50, 51-200 and larger bands.
  • hqCountry: ["US"] (ISO two-letter codes).

For a second angle, filter on what a company runs. technologyCategories: ["Development"] keeps companies whose own site shows development tooling. The category is detected from site crawls, so it covers about 7.8M sites, not every company.

Pick the industry by what the buyer does, not by what you sell. A cloud security vendor may want Data Security Software Products alongside Software Development. A tool for embedded teams may want Embedded Software Products. Run one count per industry value and compare. Counts cost nothing, so there is no reason to guess.

Check job values the same way. jobLevel takes C-Team, VP, Director, Manager, Staff or Other. Seniority uses lowercase values such as c_suite and vp. Mixing the two styles is the most common reason a first count comes back at zero.

Step 3: Size the list for free

Never pull before you count. Send count=true as a query parameter with limit 1. The count comes back in meta.total and costs nothing.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "industry": ["Software Development"],
    "companyKeywords": ["developer tools", "developer platform", "API"],
    "employeeRange": ["51-200"],
    "hqCountry": ["US"],
    "jobFunction": ["Engineering"],
    "jobLevel": ["VP", "C-Team"],
    "limit": 1
  }' | jq '.meta'

In an AI assistant, the same filters work in leadocean_count_leads. The response also carries distinctCompanies, which tells you how many employers the people span.

The count is a size check, not a promise. A person count with default settings covers addresses worth sending to (verified, catch_all_valid or catch_all). Say so when you report it.

Step 4: Narrow to a list you can write to

Cut the list by one signal your message can use, then count again.

  • Seniority. Swap ["VP", "C-Team"] for ["Director", "Manager"] to reach champions instead of approvers. The list grows, so cut something else.
  • Size. Move from 51-200 to 11-50 for tools a founder buys alone. Small companies have a shorter committee.
  • Geography. Use hqCountry to match a time zone, a meetup or a data-residency story.
  • Company count. GET /v1/companies/count sizes the company list for free, with breakdowns by HQ state. In MCP it is leadocean_count_companies, where the keyword filter is called keywords. Use it to see where the companies are before you pick a region.
  • Funding. Funding filters narrow the list further at search time, but free counts do not support them. Count without funding, then add fundingType to the search and watch meta.total fall.

Stop when the list is a size one person can write to in a week. For a cold email run, 100 to 300 people per message is a sane ceiling. The 113 in the example above is already there. If your list is larger, cut by size first, then by role, and count again after each cut.

Also check where the people are, not only the companies. The facet on the example count below showed 69 of the 113 people in the US, with the rest in Poland, France, Germany and other countries. The hqCountry filter sets the company's HQ, while the person can sit in another country. If you need people in one country, add the person country filter as well.

Step 5: Pull the first 25 rows

Now spend records. Drop count=true, set limit to 25 and read the rows before you scale.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "industry": ["Software Development"],
    "companyKeywords": ["developer tools", "developer platform", "API"],
    "employeeRange": ["51-200"],
    "hqCountry": ["US"],
    "jobFunction": ["Engineering"],
    "jobLevel": ["VP", "C-Team"],
    "limit": 25
  }' | jq '.meta, .data[0]'

Each person returned costs one record. Page with the cursor from meta for the next 25. One search pages to 10,000 rows, so narrow the filters rather than walking the index.

To get an email for someone you picked, enrich by person_id. A person we hold nothing for is a 404 and costs nothing.

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: past roles, education and certifications. Past employers carry no company_id yet. Engineers move between the same handful of companies, so a shared former employer or a stack they used before makes a real opener.

Step 6: Match the message to the role

Engineers distrust sales copy. Write three lines: what you noticed, what you do, one question. No adjectives.

  • Developer or tech lead. Lead with the problem in their words. Link the docs, not a deck. Offer a free tier or a sandbox if you have one.
  • Engineering manager. Lead with team time. Name the task your tool removes and how many hours it takes today.
  • VP Engineering or CTO. Lead with the cost or the risk. Say what it replaces, how it integrates and who else in the stack touches it.
  • Platform or security lead. Lead with access, data handling and uptime. Answer the review questions before they ask.
  • All roles. Do not open with "I saw you raised." Say what you saw in their repo, docs or role history.

Read email_status before sending. LeadOcean gives no refund or credit-back for bounced emails, so filter to verified rows first.

What you get

Two free runs through the LeadOcean MCP tools on 2026-10-21. Both spent 0 records.

People count: industry Software Development, companyKeywords developer tools, developer platform and API, employeeRange 51-200, hqCountry US, jobFunction Engineering, jobLevel VP or C-Team. Mailable (verified, catch_all_valid or catch_all) by default.

json
{
  "total": 113,
  "totalIsExact": true,
  "totalAll": 198,
  "distinctCompanies": 58
}

Company count: the same industry, size and country, with the keyword phrases passed as keywords (the company-count name for the filter).

json
{
  "total": 231,
  "totalIsExact": true,
  "facets": {
    "hq_state": [
      {"value": "California", "count": 86},
      {"value": "New York", "count": 27},
      {"value": "Massachusetts", "count": 15},
      {"value": "Texas", "count": 15}
    ]
  }
}

Read it this way: 231 US developer-tool companies of 51 to 200 staff match the keywords. 113 people with a mailable address span 58 of them. totalAll of 198 is the same people filters with no email condition. Of the 113 people, 81 are C-suite and 31 are VP level.

A person row from Step 5 looks like this. It is the response shape from the API reference, with placeholder values.

json
{
  "success": true,
  "data": [
    {
      "profile_data": {
        "profile_full_name": "Jane Doe",
        "profile_headline": "VP Engineering 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": "VP Engineering" }
        ]
      },
      "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 as x-api-key
429Above the plan's rate limit (5 a second on Free, 200 on Agency)Honour the Retry-After header and slow the loop
402Out of records (the Free plan has 1,000, one-off)Spend fewer per list, or move to Solo at $97 a month
Empty resultsA bad enum value, such as "Developer Tools" as an industryLook values up with /v1/enums or leadocean_list_enum_values
meta.depthCapped is trueOne search reached its 10,000-row depthNarrow the filters and run a second search
Export refusedOver 50,000 rows a request or 500,000 a day, or Free planSplit the export. Bulk CSV export is not on Free

FAQ

Who should I contact first at a developer-tool buyer?

Start with the engineering manager or director if you sell to teams, and the VP Engineering or CTO if you sell infrastructure. Below 50 people the founder is often both. The champion can try the product, but the approver needs the cost and risk story.

Can LeadOcean tell me which companies make developer tools?

It matches the words in each company's description, specialties, tags and name, through companyKeywords. That finds companies that describe themselves that way. It will miss some and include a few that use the phrase once. Spot-check the first 25 rows.

Is the count exact?

The count is exact for the filters it accepts, and it reports totalIsExact. A person count defaults to mailable addresses only. Funding, revenue and HQ city filters are not supported in free person counts, so size without them.

How many records does a list cost?

One record per person or company you receive. Counts, empty pages and enrichments that find nothing cost nothing. See pricing for the paid plans. Solo is $97 a month for one person. Agency is $497 a month for teams.

What else should I read?

Other sector guides use the same method: Web3, travel and telecom. The full set lives in the blog hub.

Size your developer-tool list for free, then pull the first 25 buyers

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →