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

Aviation is three markets that share a word: airlines and operators, component makers and MROs, and flight schools. Each has its own committee, so you build one list per market.

This guide picks the roles, finds them with LeadOcean filters, sizes the list with a free count and drafts the first message for each.

TL;DR

  • Target operators, component makers and training providers separately. Buying cycles, titles and budgets differ.
  • Size first with a free count. On 2026-10-21, five aviation industries held 151,331 mailable C-level, VP and director contacts across 16,196 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

Aviation purchases go through safety, compliance and procurement. Name the roles before you touch a filter.

MarketEconomic buyerChampionGatekeeper
Airline or operatorCOO, VP OperationsDirector of maintenance, fleet or ITProcurement, safety and compliance
Component maker or MROVP Operations, VP Supply ChainDirector of engineering or qualityPurchasing, quality assurance
Flight training providerOwner, CEOChief pilot, director of trainingFinance

Aviation sales cycles run long and need a technical champion. The champion is usually in operations or engineering, not in sales.

LeadOcean has no single "aviation" value. Look up the exact industry strings first. Do not guess: enum values are exact.

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

On 2026-10-21 the lookup returned Airlines and Aviation, Airlines/Aviation, Aviation and Aerospace, Aviation and Aerospace Component Manufacturing and Flight Training. 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": [
    "Airlines and Aviation",
    "Airlines/Aviation",
    "Aviation and Aerospace",
    "Aviation and Aerospace Component Manufacturing",
    "Flight Training"
  ],
  "jobLevel": ["C-Team", "VP", "Director"],
  "employeeRange": ["201-500", "501-1000", "1001-5000"],
  "country": ["US"]
}

Add jobFunction when one product has one owner. A predictive-maintenance tool sells to Operations and Engineering. A parts marketplace sells to Purchasing and Supply Chain & Logistics.

Check the sample before you trust the industry label. The Airlines and Aviation value is broad, and some companies filed under it are not aircraft businesses. In the free company count on 2026-10-21, 84,306 of the 113,740 companies under the five values carried NAICS code 484121, long-distance trucking. A 25-row test batch in Step 4 shows how clean your segment is.

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": ["Airlines and Aviation","Airlines/Aviation","Aviation and Aerospace","Aviation and Aerospace Component Manufacturing","Flight Training"],
    "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. The MCP tool leadocean_count_leads returned the figures below, some above that cap.

For the company side, GET /v1/companies/count returns an exact total with breakdowns by industry, headcount band and HQ country. It is free too.

Step 4: Pull a 25-row test batch

Pull a small batch first. Read the titles and companies. If a fifth of them are off-segment, 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": ["Aviation and Aerospace","Aviation and Aerospace Component Manufacturing"],
    "jobFunction": ["Operations","Engineering","Supply Chain & Logistics","Purchasing"],
    "jobLevel": ["VP","Director"],
    "employeeRange": ["201-500","501-1000","1001-5000"],
    "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.

Read email_status before you send. Send to verified and catch_all_valid. LeadOcean does not credit back bounces.

Step 5: Enrich the champions you will contact

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 returns career history in resume_data: past roles, education and certifications. A prior role at an airline or an engineering certification 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 6: Write messages that fit the buyer

Aviation buyers answer to safety, uptime and regulators. Open with the operating problem, not your product.

BuyerTheir pressureFirst line angle
Airline COO or VP OperationsAircraft on ground, crew and schedule disruptionOne concrete way you cut downtime or delay
MRO or component maker, VP Supply ChainLead times and parts availabilityShorter sourcing time on a named part class
Director of engineering or qualityAudit load and documentationLess manual paperwork, same traceability
Flight school ownerStudent pipeline and fleet costMore enquiries or lower cost per student

Keep the first email under 90 words. Name the role, one pressure and one question. Skip claims about safety or regulation you cannot back.

Send by segment, not to the whole list. A message to MRO purchasing should never reach an airline CFO.

Step 7: Split the list into three sends

One list per market keeps the message honest. Save each filter set as its own JSON file and name it after the buyer.

bash
mkdir -p lists
cat > lists/operators.json <<'JSON'
{"industry":["Airlines and Aviation","Airlines/Aviation"],"jobFunction":["Operations","Engineering"],"jobLevel":["C-Team","VP","Director"],"employeeRange":["501-1000","1001-5000","5001-10000"],"limit":25}
JSON
cat > lists/suppliers.json <<'JSON'
{"industry":["Aviation and Aerospace Component Manufacturing","Aviation and Aerospace"],"jobFunction":["Purchasing","Supply Chain & Logistics","Engineering"],"jobLevel":["VP","Director"],"employeeRange":["201-500","501-1000","1001-5000"],"limit":25}
JSON
cat > lists/schools.json <<'JSON'
{"industry":["Flight Training"],"jobLevel":["C-Team","VP","Director","Manager"],"limit":25}
JSON

Run the free count on each file before you pull rows. Drop any list whose count is too small to justify a campaign, and merge it into a neighbour.

Aerospace manufacturing and airline operations are not the same market. An aircraft maker buys tooling and materials. An airline buys maintenance, software and ground services. Do not send one pitch to both.

Step 8: Check the list before you send

Run three checks on the test batch. They take five minutes and save a bounced campaign.

  • Titles: scan for the wrong function, such as sales roles in a list meant for operations.
  • Companies: remove any employer that is not an aircraft, parts or training business.
  • Email status: keep verified and catch_all_valid, and hold the rest back.

When the batch is clean, pull the rest with the same filters and the cursor. Spend records only on the rows you will actually send to. If you want a CSV for another tool, use POST /v1/exports (not on Free) or the Exports page at app.leadocean.io, which shows the record price before you start.

What you get

The free counts below ran on 2026-10-21 through the MCP tools leadocean_count_leads and leadocean_count_companies. Counts spend no records. The people counts are mailable (verified, catch_all_valid or catch_all).

FilterMailable peopleEmployers
Five aviation industries, C-Team, VP, Director151,331 (518,295 without the email condition)16,196
Same, US, 201 to 5,000 employees14,225 (38,523 without the email condition)767
Aviation and Aerospace plus Component Manufacturing, VP and Director in Operations, Engineering, Purchasing, Supply Chain & Logistics, 201 to 5,000 employees1,577 (4,026 without the email condition)292

The company count for the same five industries was 113,740 companies. Most are small: 69,908 have 1 to 10 employees. The headcount filter does real work here.

A search row looks like this. Response shape from the API reference, placeholder values:

json
{
  "success": true,
  "data": [
    {
      "profile_data": {
        "profile_full_name": "Jane Doe",
        "profile_headline": "VP Operations at Acme"
      },
      "contact_data": {
        "has_email": true,
        "email_status": "verified",
        "contact_current_experiences": [{
          "job_title": "VP Operations",
          "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 as x-api-key.
429Above the plan's rate limit (5 requests a second on Free, 200 on Agency)Wait for the Retry-After header, then slow the loop.
402The 1,000 Free records are spentMove to Solo ($97 a month) or Agency ($497 a month). Counts stay free.
Empty resultsA bad enum value, such as Aviation for the industryLook the value up with GET /v1/enums/industry?q=... or leadocean_list_enum_values.
meta.depthCapped: trueOne search reached 10,000 rowsNarrow by country, function or headcount and search again.
Export refusedA request above 50,000 rows, or above 500,000 rows a daySplit the export by country or headcount. Bulk CSV is not on Free.

FAQ

Is there an aviation industry filter?

There are five related industry values, not one. Use Airlines and Aviation, Airlines/Aviation, Aviation and Aerospace, Aviation and Aerospace Component Manufacturing and Flight Training. Resolve them with leadocean_list_enum_values.

How many aviation contacts will the Free plan cover?

The Free plan gives 1,000 records for life, no card. This recipe spends about 30, so most of the allowance stays for a real campaign. Counts and filter lookups spend nothing.

Can I reach pilots or airport staff?

Search by title and industry, for example a chief pilot or director of ground operations. Check the test batch first, because many frontline roles carry no work email.

How much does a bigger list cost?

Solo is $97 a month and Agency is $497 a month, with a fair-use pace instead of credits. Solo includes bulk CSV export. See /pricing.

Count your aviation list free, then pull the first 25 contacts

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

Get your free API key →