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=... curlandjq. Or the hosted MCP server athttps://api.leadocean.io/mcpin Claude, using the free toolsleadocean_count_leadsandleadocean_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.
| Persona | Typical titles | Cares about |
|---|---|---|
| Carrier or fleet owner | Owner, President, VP Operations, Director of Safety | Utilisation, insurance, driver turnover |
| 3PL or broker | VP Operations, Director of Transportation, Head of Carrier Sales | Margin per load, carrier capacity |
| Shipper (manufacturer, retailer) | Director of Logistics, VP Supply Chain, Transportation Manager | Cost per shipment, on-time delivery |
| Warehouse operator | Director of Warehouse Operations, General Manager | Labor, 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.
for q in logistics freight truck warehous; do
curl -s "https://api.leadocean.io/v1/enums/industry?q=$q" | jq -r '.data.values[]'
doneIn 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.
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.
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).
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.
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: useownerandfounderfor small carriers. Usevpanddirectorfor large shippers.employeeRange: use51-200for owner-run fleets and501-1000for 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_statebreakdown ofGET /v1/companies/count, then passhqStatein the people search and write about local lanes. Do not passhqStatetoleadocean_count_leads, which can returnunsupported_filtersfor it. - Technology. For companies with a crawled website,
technologyCategoriesincludesShipping carriers,FulfilmentandReturns. A shipper with a fulfilment tool on its site is a different buyer from one without. - Profile keywords. Use
keywordssuch 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):
{
"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:
{
"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
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header | Check $LEADOCEAN_API_KEY is exported and sent as x-api-key |
| 429 | Above the plan's rate limit (5 a second on Free, 200 on Agency) | Honour Retry-After, or slow the loop |
| 402 | Free records are spent | Upgrade to Solo ($97 a month) or Agency ($497 a month) |
| Empty results | Bad enum value, such as Operations Director in jobLevel | Look values up with /v1/enums/industry or leadocean_list_enum_values |
| Search stops at 10,000 rows | meta.depthCapped is true, no nextCursor | Add filters (state, headcount) and run several searches |
| Export refused | Over 50,000 rows a request or 500,000 a day, or on Free | Split 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 →