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

Agtech buyers are not one audience. A grower, an input distributor and an ag retailer buy different things for different reasons, so you build one list per buyer type.

This guide picks the buying committee, finds it with LeadOcean filters, sizes the list with a free count and drafts the first message for each role.

TL;DR

  • Target three groups: growers and producers, input makers and equipment makers, and ag retailers and distributors. Each has its own committee.
  • Size first with a free count. On 2026-10-21, four farming and ag-equipment industries held 50,747 mailable VPs, directors and C-level people across 12,820 companies.
  • The whole 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

Agtech deals rarely close on one signature. Pick the roles before you touch a filter.

Buyer typeEconomic buyerChampionGatekeeper
Producer or farming operationOwner, founder, CEOOperations or farm managerAgronomist, CFO on large operations
Input and equipment makerVP Product, VP SalesDirector of R&D or digitalProcurement, IT
Ag retailer and distributorPresident, COODirector of agronomy or salesPurchasing

Small farms are a poor fit for an API-driven list. Most family operations do not publish a work email. Start with larger producers, input makers, equipment makers, co-ops and distributors, where titles and company pages exist.

LeadOcean has no "agtech" industry value. You build the segment from the industries that sit around it. Look the exact strings up before you use them.

bash
for q in farm agri horti ranch feed; do
  curl -s "https://api.leadocean.io/v1/enums/industry?q=$q" \
    -H "x-api-key: $LEADOCEAN_API_KEY" | jq -r '.data.values[]'
done

GET /v1/enums/industry?q=farm returns Farming, Farming; Ranching; Forestry and Wholesale Raw Farm Products. Enum values are exact strings. 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
{
  "industry": [
    "Farming",
    "Farming; Ranching; Forestry",
    "Agricultural Chemical Manufacturing",
    "Agriculture; Construction; Mining Machinery Manufacturing"
  ],
  "jobLevel": ["C-Team", "VP", "Director"],
  "employeeRange": ["51-200", "201-500", "501-1000"],
  "country": ["US"]
}

Two more industry values worth adding to a second pass: Animal Feed Manufacturing and Wholesale Raw Farm Products for feed makers and grain and produce wholesalers. Keep them in a separate list, because the pitch differs.

Narrow by function when one product has one owner. A precision-spraying vendor sells to Operations and Engineering. A farm-management SaaS sells to General Business & Management and Finance & Accounting.

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 '{
    "industry": ["Farming","Farming; Ranching; Forestry","Agricultural Chemical Manufacturing","Agriculture; Construction; Mining Machinery Manufacturing"],
    "jobLevel": ["C-Team","VP","Director"],
    "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 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 of them 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 '{
    "industry": ["Farming","Agricultural Chemical Manufacturing","Agriculture; Construction; Mining Machinery Manufacturing"],
    "jobLevel": ["C-Team","VP","Director"],
    "employeeRange": ["51-200","201-500"],
    "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.

Each page returns an email status. Send to verified and catch_all_valid. Read the status before you send, because LeadOcean does not credit back bounces.

Step 5: Enrich the champions you will call

Enrich only the people you will contact. 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. An agronomy certification or a prior role at a co-op 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. Phones suit larger producers and distributors, where a rep answers a call. A v2 contact call costs one record even when it finds nothing.

Step 6: Write messages that fit the buyer

Agtech buyers answer to seasons, margins and weather, not to product features. Open with the job they have this quarter.

BuyerTheir pressureFirst line angle
Producer, ownerInput cost, yield, laborOne number: cost per acre or hours saved
Input maker, VP ProductProving value on trial plotsData for their field trials
Ag retailer, COOMargin, customer retentionHelp their reps advise growers
Distributor, purchasingSupplier reliabilityDelivery and support terms

Timing matters more here than in software. Before planting and before harvest, people are busy. Send in the quiet weeks and keep the email under 80 words.

Plain example for a distributor:

text
Subject: Agronomy notes for your reps

Hi Jane,

Acme Ag Supply has reps visiting growers every week. We give them a one-page
field summary per account so they spend the visit on advice, not paperwork.

Open to a 15-minute call after harvest?

Names, domain and subject are placeholders. Use your own product and a real claim you can back up.

Step 7: Split the list into three campaigns

Do not send one message to the whole list. Split it by buyer type and run each segment on its own copy. Three campaigns are enough to start.

  1. Producers and large operations. Industry Farming and Ranching, jobLevel C-Team, headcount 51-200 and up. Owners read their own email. Keep it short and lead with cost.
  2. Input and equipment makers. Industry Agricultural Chemical Manufacturing and Agriculture; Construction; Mining Machinery Manufacturing. Target VP and Director titles in product, R&D and sales. These teams run trials and care about proof.
  3. Retailers and distributors. Industry Wholesale Raw Farm Products and Animal Feed Manufacturing, plus purchasing and operations titles. They care about supply terms and rep time.

Run the count again for each segment. The three totals will not add up to the combined list, because a 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 4,000 people is too many to write by hand. Rank the accounts and send to the top group first.

  • Count people per company in the test batch. An account with three matching titles is a committee you can reach from several sides.
  • Prefer companies with a work email marked verified. It bounces less than a catch-all address.
  • Use GET /v1/companies/{domain}/people for the accounts you rank highest. It lists the other people at one domain, so you can add the missing roles to a committee.
  • Drop accounts where the only match is a Staff or Other level title. Those rarely sign.

Then send in small batches of 50 to 100 and read the replies. If replies cluster on one role, move budget toward it. This is slow on purpose. Agtech cycles follow seasons, so a bad first send costs you a quarter.

What you get

Output of leadocean_count_leads on 2026-10-21 for the Step 2 industries with jobLevel C-Team, VP and Director. The count includes only people whose best email is verified, catch_all_valid or catch_all.

json
{
  "total": 50747,
  "totalIsExact": true,
  "totalAll": 238528,
  "distinctCompanies": 12820,
  "unsupportedFilters": []
}

Now add employeeRange of 51-200, 201-500 and 501-1000, and country US. The same count on the same date narrows to this:

json
{
  "total": 4136,
  "totalIsExact": true,
  "totalAll": 15882,
  "distinctCompanies": 555
}

That is a 4,136-person mailable list at 555 mid-sized US companies. On a single 1,000-record Free plan you cannot pull all of it, so rank by title and pull the first few hundred.

One search row has this shape (response shape from the API reference, placeholder values). Search rows carry no contact points; enrich with reveal_email for the address.

json
{
  "success": true,
  "data": [
    {
      "profile_data": {
        "profile_full_name": "Jane Doe",
        "profile_headline": "VP Sales at Acme"
      },
      "contact_data": {
        "has_email": true,
        "email_status": "verified",
        "contact_current_experiences": [{
          "job_title": "VP Sales",
          "company_name": "Acme",
          "company_domain": "acme.com"
        }]
      }
    }
  ],
  "meta": { "count": 1, "limit": 25, "credits": 1, "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 "Agriculture"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 agtech industry filter?

No. LeadOcean has 534 industry values and none is called agtech. Build the segment from Farming, Agricultural Chemical Manufacturing, Agriculture; Construction; Mining Machinery Manufacturing and related values, then check the title mix on a 25-row batch.

Why not search by keyword for "agtech"?

On 2026-10-21 a free company count with the keywords agtech and precision agriculture matched 155,442 companies. A people count cannot apply a keyword that wide. The company breakdown also showed insurance as the largest industry bucket. Industry values give a cleaner first list. Add a keyword only after you narrow by country or headcount.

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 fair-use pace instead of credits. See pricing.

Count your agtech 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 →