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

How-to guide

How to find a CEO's phone number (2026)

Direct dials beat switchboards. Size the list for free, filter to people we hold a phone for, then pull the numbers.

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

The reliable way to reach a CEO is a direct dial or mobile from a contact database. The company switchboard gets you a gatekeeper, and a guessed number gets you a stranger.

TL;DR

  • Sizing a CEO list is free. A search costs 1 record per person returned, and a phone lookup costs 1 record per call.
  • Filter on hasPhone first, so you only spend records on people we hold a number for. Ten minutes covers one CEO.
  • For a list, search and then export. POST /v1/exports takes up to 50,000 rows a request and 500,000 a day.

Prerequisites

  • A LeadOcean API key from the free plan: 1,000 records for life, no card. Export it as $LEADOCEAN_API_KEY.
  • curl and jq.
  • A target: a company domain such as acme.com, or a segment such as CEOs in one country.
  • A calling policy for your market. See the note after Step 4.

Step 1: Know what you are looking for

A CEO has three kinds of number. Each one behaves differently when you dial it.

  • Switchboard: the main company line. Always findable, rarely useful.
  • Office direct: a desk line. Often reaches an executive assistant.
  • Mobile: the best number, and the one to treat with the most care.

The v2 phone endpoint labels each number mobile, direct or office, best first. Take the label as a hint about the line, not a promise about who answers.

Step 2: Size the list for free

Count the CEOs you could reach before you spend anything. A search with count=true as a query parameter and limit 1 returns a total and no rows. It 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 '{
    "title": ["CEO"],
    "seniority": ["c_suite"],
    "country": ["US"],
    "hasPhone": true,
    "limit": 1
  }' | jq '.meta'

hasPhone: true drops everyone we hold no number for. Filter values are arrays and enums are exact strings, so check them with GET /v1/enums if a result looks wrong. The total is capped at 100,000.

The same count runs from Claude with the MCP tool leadocean_count_leads, which is also free.

Step 3: Get the number for one CEO

If you know the company, search its people by domain and title. Then fetch the numbers by person_id, which each search row carries at meta.source_ids.person_id.

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 '{ "domain": ["acme.com"], "title": ["CEO"], "limit": 1 }'

curl -s "https://api.leadocean.io/v2/people/phone?person_id=PERSON_ID" \
  -H "x-api-key: $LEADOCEAN_API_KEY"

The search costs It costs 1 record per person returned. The phone call costs 1 record, including a call that finds nothing. If you already hold the CEO's LinkedIn URL, call the phone endpoint with linkedin_url and skip the search. There is no lookup by name plus domain.

In Claude, the MCP tool leadocean_find_phone does the same lookup for 1 record.

Step 4: Check before you dial

A number in a database is not permission to call it. The v2 phone response does not publish a do-not-call flag. Its absence is not clearance.

Check the do-not-call rules for the country you are calling, and for mobiles in particular. Rules for business calls differ by country, so ask counsel if you are unsure. Log who you called, when and why.

Mobiles carry the most risk and the most reward. A CEO who answers a mobile call expects a reason in the first ten seconds. If you cannot give one, send a short email first and call after.

Treat the first number as the best guess, not the only one. Try the second number only if the first goes to a dead line, and stop after two attempts a day.

Dial in business hours in the CEO's time zone. Lead with a reason tied to their company, not a script.

Step 5: Pull numbers at scale

A list changes the job. You stop looking up one person and start choosing a segment, so the filters matter more than the endpoint. CEOs of 11-50 person companies are reachable and decide fast. CEOs of 10001+ person companies are guarded by layers of staff, and a direct dial there is worth less.

For a list, export the searched segment. The export takes the same filters as search and asks for columns by id from GET /v1/exports/columns. phone_N_number comes back as phone_1_number and phone_2_number.

bash
curl -s -X POST https://api.leadocean.io/v1/exports \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "filters": {
      "title": ["CEO"],
      "seniority": ["c_suite"],
      "country": ["US"],
      "hasPhone": true
    },
    "columns": ["profile_full_name", "current_job_title", "current_company_name", "phone_N_number", "phone_N_type"],
    "limit": 5000
  }'

Bulk CSV export is not on the Free plan. Solo at $97 a month includes it, and Agency at $497 a month adds 200 requests a second and 5 keys for teams. Prefer the app? The Exports page at app.leadocean.io has a filter builder, a column picker and a price preview before you download.

One search pages to 10,000 rows. Narrow the filters, by country or company size, rather than walking past that.

What you get

A phone lookup returns the numbers in priority order. This is the response shape from the API reference, with placeholder values. It is not a real record.

json
{
  "success": true,
  "data": {
    "found": true,
    "phones": [
      { "phone": "+1 415 555 0133", "type": "mobile" },
      { "phone": "+1 415 555 0100", "type": "office" }
    ]
  }
}

The array position is the priority. Try the first number first. The endpoint returns data and no meta object, so read your spend from GET /v1/usage.

A free leadocean_count_leads run on 2026-10-21 (title CEO, seniority c_suite, country US, hasPhone true) returned 653,591 people at about 347,965 companies. It is a phone-flag count, not a verified-number count, and the title match is a keyword match. Run Step 2 yourself for today's figure.

Troubleshooting

ErrorCauseFix
401Missing, wrong or revoked keyCheck that x-api-key carries $LEADOCEAN_API_KEY and the key is active in the app.
402Free plan: the 1,000 records are spentThe allowance is one-off. Move to Solo at $97 a month to keep going.
429Above the plan's rate limit: 5 a second on Free, 50 on Solo, 200 on AgencyHonour Retry-After. Slow the loop or upgrade the plan.
Empty resultsA bad enum value, such as ceo for a levelUse exact strings from GET /v1/enums, and arrays for every filter.
found: falseWe hold no number for that personIt still costs 1 record on v2. Filter with hasPhone first to avoid it.
Export refusedOver 50,000 rows a request or 500,000 a daySplit the export by country or headcount band.

FAQ

Can I find a CEO's phone number for free?

For a few, yes. The free plan gives you 1,000 records for life, with no card. Sizing a list costs nothing.

Is a switchboard number enough?

Rarely. It reaches a gatekeeper. A direct dial or mobile reaches the person, which is why this guide filters on hasPhone.

Is it legal to call a CEO's mobile?

It depends on the country and on whether the line is registered as do-not-call. We publish no compliance flag, so check the rules where you call and keep a call log.

How many CEOs do you hold numbers for?

We hold a phone for 166M people (measured September 2026). The count for CEOs in your country is a free call in Step 2.

Where do I go next?

To find other roles, read how to find a VP of Sales phone number. The find phone number endpoint and the Claude skill cover the lookup in depth. Plans are on the pricing page.

Get a CEO's direct dial, not the switchboard

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

Get your free API key →