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

Logistics buyers sit in operations, not marketing. Target the VP or Director of Operations, the head of transportation and the supply chain lead, and filter by industry label, not by guesswork.

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

TL;DR

  • Build the list in about 45 minutes: count first (free), pull 25 rows, enrich a handful.
  • It spends about 30 of your 1,000 free records. Counts and filter lookups cost nothing.
  • On 2026-10-21 the US senior operations and supply chain count for five logistics industry labels was 7,331 mailable people across 2,702 companies.

Prerequisites

  • A LeadOcean account. The Free plan has 1,000 records for life, no card, and 5 requests a second. Start free.
  • An API key in your shell: export LEADOCEAN_API_KEY=...
  • curl and jq. Or the hosted MCP server at https://api.leadocean.io/mcp in Claude, using the free tools leadocean_count_leads and leadocean_list_enum_values.
  • A one-line description of what you sell. The roles below change with it.

Step 1: Pick the buying committee

Logistics is bought by operators, and the title depends on who you sell to. Choose the persona first, then the filters.

PersonaTypical titlesCares about
Carrier or fleet ownerOwner, President, VP Operations, Director of SafetyUtilisation, insurance, driver turnover
3PL or brokerVP Operations, Director of Transportation, Head of Carrier SalesMargin per load, carrier capacity
Shipper (manufacturer, retailer)Director of Logistics, VP Supply Chain, Transportation ManagerCost per shipment, on-time delivery
Warehouse operatorDirector of Warehouse Operations, General ManagerLabor, throughput, dock scheduling

Pick one row. A message that fits a carrier owner fails with a shipper's supply chain director.

Step 2: Resolve the exact filter values

Enum values are exact strings. Look them up first so a typo does not return an empty list. The industry list has several logistics labels, and each company is filed under one.

bash
for q in logistics freight truck warehous; do
  curl -s "https://api.leadocean.io/v1/enums/industry?q=$q" | jq -r '.data.values[]'
done

In MCP, ask Claude to run leadocean_list_enum_values with name: industry and q: logistics. The labels that matter here are Logistics and Supply Chain, Transportation; Logistics; Supply Chain and Storage, Freight and Package Transportation, Truck Transportation and Warehousing and Storage.

Job functions are Operations and Supply Chain & Logistics. Job levels are C-Team, VP, Director, Manager, Staff, Other.

Step 3: Size the list for free

A free count tells you how big the list is before you spend a record. The default counts only people with a verified, catch-all valid or catch-all email, so the total is a mailable audience.

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": ["Logistics and Supply Chain", "Freight and Package Transportation",
                 "Transportation; Logistics; Supply Chain and Storage",
                 "Truck Transportation", "Warehousing and Storage"],
    "jobLevel": ["C-Team", "VP", "Director"],
    "jobFunction": ["Operations", "Supply Chain & Logistics"],
    "hqCountry": ["US"],
    "limit": 1
  }' | jq '.meta'

A count never spends records, and meta.total is capped at 100,000. Size the companies the same way with GET /v1/companies/count, which takes the company-search filters and returns breakdowns by industry, headcount band and HQ state.

Step 4: Narrow to a list you can work

A count of 7,331 is too many for one message. Cut it by company size and region until one persona and one angle fit.

bash
curl -s "https://api.leadocean.io/v1/companies/count?industry=Truck%20Transportation&hqCountry=US&employeeRange=51-200,201-500" \
  -H "x-api-key: $LEADOCEAN_API_KEY" | jq '.data.total'

For a fleet-software pitch, a 51-200 headcount carrier is the sweet spot: big enough to have dispatch pain, small enough that the owner reads email. For a procurement-tool pitch, go 501-1000 and add Director and VP in Supply Chain & Logistics.

The company side matters too. On 2026-10-21 the free company count for the same five labels, US HQ, 51 to 1000 employees, was 7,788 companies. Truck Transportation was 3,424 of them.

Step 5: Pull a 25-row test batch

Pull 25 people, not the whole list. This is the only step that spends records (25 here).

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": ["Truck Transportation"],
    "jobLevel": ["C-Team", "VP", "Director"],
    "jobFunction": ["Operations"],
    "employeeRange": ["51-200", "201-500"],
    "hqCountry": ["US"],
    "limit": 25
  }' | jq '.data[] | {name: .profile_data.profile_full_name, headline: .profile_data.profile_headline, email_status: .contact_data.email_status}'

Page with cursor from meta when you want more. One search pages to 10,000 rows. Past that, narrow the filters.

Step 6: Enrich the best rows

Search rows carry the work email status. Enrich only the people you will message, using person_id from the search result.

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 now returns career history (past roles, education, certifications). Past employers carry no company_id yet. An enrichment that finds nothing is a 404 and costs nothing.

Step 7: Write the message by persona

Lead with the operational number they track. Keep it under 80 words.

  • Carrier owner: "Jane, small fleets lose weeks to empty miles. We help 50-truck carriers fill them. Worth a 10-minute look at Acme's lanes?"
  • 3PL or broker: "Jane, carrier capacity is your margin. We list vetted carriers by lane. Want the Chicago to Dallas set for Acme?"
  • Shipper: "Jane, a late dock slot costs more than the freight. We cut dock wait at sites like Acme's. Can I send the numbers?"

Send from a warmed mailbox, and read email_status before you send. Bounced emails are not refunded.

Step 8: Plan the sequence around how logistics buyers work

Logistics buyers are on the road, on a dock or on the phone. Plan for that.

Send email early in the morning, before dispatch gets busy. Keep every email to one ask. A carrier owner will not read three paragraphs on a phone between loads.

Run three touches over ten days. Day 1 is the persona message from Step 7. Day 4 is one concrete number, such as a lane, a state or a fleet size. Day 9 is a plain close that asks whether to stop.

Then split the list by company size before you write at all. A 51-200 person trucking company is run by an owner who answers his own mail. A 501-1000 person 3PL has a procurement process, so the first goal is a name, not a meeting.

Two filters help here:

  • seniority: use owner and founder for small carriers. Use vp and director for large shippers.
  • employeeRange: use 51-200 for owner-run fleets and 501-1000 for process-led buyers.

Keep the two lists separate. Do not send the same email to both.

Step 9: Add signals before you send

A list by role is a start. A list by role plus a reason to write is better. You cannot filter on a news event, but you can filter on facts that change buying.

  • Company size band. Companies near a headcount threshold feel dispatch and billing pain first.
  • Location. Find a regional cluster, such as Kentucky or Texas, with the hq_state breakdown of GET /v1/companies/count, then pass hqState in the people search and write about local lanes. Do not pass hqState to leadocean_count_leads, which can return unsupported_filters for it.
  • Technology. For companies with a crawled website, technologyCategories includes Shipping carriers, Fulfilment and Returns. A shipper with a fulfilment tool on its site is a different buyer from one without.
  • Profile keywords. Use keywords such as "last mile" or "cold chain" to find people who say so in their own profile.

Check each filter with a free count before you rely on it. If a count comes back empty, loosen one filter at a time.

What you get

A free count run on 2026-10-21 through the leadocean_count_leads MCP tool (industry: five logistics labels; jobLevel: C-Team, VP, Director; jobFunction: Operations, Supply Chain & Logistics; hqCountry: US; mailable by default):

json
{
  "total": 7331,
  "totalIsExact": true,
  "totalAll": 23408,
  "distinctCompanies": 2702,
  "credits": 0
}

total counts mailable people (verified, catch-all valid or catch-all). totalAll is the same filters with no email condition.

Response shape from the API reference, with placeholder values:

json
{
  "success": true,
  "data": [
    {
      "profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "VP Operations at Acme" },
      "contact_data": { "has_email": true, "has_phone": false, "email_status": "verified" }
    }
  ],
  "meta": { "nextCursor": "CURSOR" }
}

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 Retry-After, or slow the loop
402Free records are spentUpgrade to Solo ($97 a month) or Agency ($497 a month)
Empty resultsBad enum value, such as Operations Director in jobLevelLook values up with /v1/enums/industry or leadocean_list_enum_values
Search stops at 10,000 rowsmeta.depthCapped is true, no nextCursorAdd filters (state, headcount) and run several searches
Export refusedOver 50,000 rows a request or 500,000 a day, or on FreeSplit the export; bulk CSV is not on Free

FAQ

Which industry label should I use for logistics?

Use several. Companies are filed under Truck Transportation, Freight and Package Transportation, Warehousing and Storage, Logistics and Supply Chain and Transportation; Logistics; Supply Chain and Storage. On 2026-10-21 the five together held 7,788 US companies with 51 to 1000 employees. Trucking alone was 3,424.

How many records does the list cost?

Counting costs none. A 25-row test batch costs 25, and each enrichment that finds a person costs one. A full list is one record per person you receive.

Can I get phone numbers for dispatchers and owners?

Yes. Use GET /v2/people/phone. Small carrier owners often answer a mobile faster than email. Check the hasPhone filter on a count, and label that count as phone-filtered, not mailable.

Do I need a sequencer?

LeadOcean is data, not a sending tool. It has no sequencer, dialer or CRM. Export a CSV from the app's Exports page or call the API, then load the file into the tool you already use.

How fresh is the data?

The dataset is refreshed monthly, and each record carries its own fetched_at date.

Related guides: all lead generation guides, lead generation for web3, lead generation for travel and lead generation for telecom. See pricing for plan limits.

Size your logistics list before you spend a record

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

Get your free API key →