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

Role playbook

How to Sell to a CFO (and Size the List First)

What a CFO buys, who else is in the room, how many are mailable by country, and four first lines you can send today.

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

TL;DR

  • A CFO buys to protect margin, cash and forecast accuracy. Sell a number they can defend to the board, not a feature list.
  • Count first, send second. On 2026-10-21 LeadOcean showed 294,303 mailable people titled "CFO" or "Chief Financial Officer" worldwide, 142,527 of them in the US.
  • The recipe takes about 25 minutes and spends about 26 LeadOcean records. Every count is free.

Prerequisites

  • A free LeadOcean account and an API key from app.leadocean.io. Free gives you 1,000 records for life, no card, 5 requests a second.
  • The key in your shell as $LEADOCEAN_API_KEY.
  • curl and jq.
  • Optional: Claude or any MCP client connected to https://api.leadocean.io/mcp, which has 13 tools including free counts.

What a CFO actually cares about

A CFO is judged on cash, margin and the accuracy of the forecast. Every email you send gets read against those three.

They care about four things, in this order.

  1. Cost and payback. What does it cost, and when does it pay back? A CFO wants the answer in months, with the assumptions visible.
  2. Risk. What happens if it fails, if the vendor disappears, or if a contract locks them in? Clear exit terms help.
  3. Predictability. Flat monthly pricing beats usage that spikes. Surprises on an invoice cost a CFO credibility.
  4. Headcount efficiency. Can the same team close the books, run the forecast or collect cash faster without a new hire?

They do not care how clever the product is. They care what changes in a line of the budget.

What kills the deal

CFOs say no for predictable reasons. Answer them in the first email, not the third.

  • "It is not in the budget." Budgets are set annually, so offer a pilot small enough to sit inside existing spend.
  • "Talk to the VP of Finance or the Controller." Good. Send a one-paragraph note they can forward, with a number and a date.
  • "We already have a vendor." Do not argue. Ask when the contract renews and what the exit terms are.
  • "What is the ROI?" Bring a worked example with your assumptions written out. Never quote a result you have not measured.

Where a CFO sits in the buying committee

A CFO is usually the economic buyer. They sign or block the spend, and they rarely evaluate the product. The champion is often one level down.

Three roles show up around them:

Write to the CFO as someone who will ask one question: "What does this save or make, and how sure are you?" Give your champion the answer in one sentence.

Step 1: Count CFOs by country (free)

Start with a count. It spends zero records and tells you whether the segment is worth a campaign.

leadocean_count_leads counts mailable people by default (verified, catch_all_valid and catch_all addresses). Run it from any MCP client:

json
{
  "tool": "leadocean_count_leads",
  "arguments": {
    "title": ["CFO", "Chief Financial Officer"],
    "country": ["US"]
  }
}

Repeat with GB, DE and IN, or omit country for the worldwide figure. Title search matches job-title keywords, so "Finance Director" or "VP Finance" will not be in this count. Run them as separate counts.

Step 2: Read the count for each country

Put the counts in one table before you pick a market. These ran on 2026-10-21, filtered by the two titles above and the default mailable email statuses.

AreaMailableEveryone matchingEmployers covered
Worldwide294,3031,184,775about 160,566
US142,527463,905about 80,109
GB6,48523,4154,596
DE3,41712,3502,361
IN5,98223,0764,261

Two things to read from this. The US holds 48% of the worldwide mailable list (142,527 of 294,303). And the mailable column is about a quarter to a third of everyone matching, which is why you count mailable before you plan volume.

Worldwide and US employer figures are close estimates, not exact. The GB, DE and IN figures are exact.

Step 3: Pull a sample from your best region

Pull 25 rows from the region you picked. This spends 25 records. Search is a flat JSON body, filters are arrays, and limit runs from 1 to 100.

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 '{
    "title": ["CFO", "Chief Financial Officer"],
    "country": ["GB"],
    "emailStatus": ["verified"],
    "limit": 25
  }' | jq '.data[] | {name: .profile_data.profile_full_name, person_id: .meta.source_ids.person_id}'

Add a company-size filter next if you sell to one segment, for example "employeeRange": ["51-200"]. Page with the cursor value from meta. One search pages to 10,000 rows, so narrow the filters instead of walking the whole index.

Step 4: Enrich one record to read the career history

Before you write, read one profile. Person enrich returns career history: past roles, education, certifications and awards. Past employers carry no company_id yet.

Enrich takes exactly one of linkedin_url, email, phone or person_id. Use the person_id a step 3 row carries at meta.source_ids.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_STEP_3", "reveal_email": true}' \
  | jq '.data.resume_data.experiences[0:3], .data.resume_data.certifications'

This costs one record. A person we hold nothing for returns a 404 and costs nothing.

Look at the path. A CFO who came up through audit or FP&A reads risk and controls first. One who came from an operating role reads growth and efficiency. A certification such as a CPA tells you they will check your numbers.

How to size the finance side of the room

A CFO rarely decides alone, so count the people around them too. Run the same free count for jobFunction: ["Finance & Accounting"] with jobLevel: ["VP"] or ["Director"], and compare it with the CFO count.

The ratio tells you how many finance contacts exist per CFO in a region. A high ratio means you can multi-thread: write to a VP of Finance and a Controller in the same week, with the same number in both emails. A low ratio means the CFO is often the only finance name on record, so write to them directly and keep the ask small.

Counts with jobLevel or jobFunction are free and spend no records. Label each one by what you filtered, because a mailable count is not a count of everyone.

Step 5: Write the first line

The first line must show you know the job. Pick one angle and keep the email under 90 words.

text
1. Payback: "If this saves {X} hours a month, it pays for itself in {N} months. Want the working?"
2. Predictability: "Flat monthly price, no overage invoice. Finance can budget it in one line."
3. Risk: "Month-to-month, export your data any time. What would you need to see to try it for a quarter?"
4. Territory: "I counted {N} finance leaders at companies like {Acme}. Want the list and the method?"

The territory line works because it is checkable. You ran a free count, so the number is real. Send it with the count and the date.

Match the angle to the region. A US CFO at a mid-size company often wants payback and a clear owner. In Germany, lead with risk and process. In India, lead with predictability and cost.

These are starting points from how the segments are shaped, not measured results. Do not claim a reply rate you have not measured. Test two angles on 100 contacts each and keep the winner.

Step 6: Save the list as a CSV

When the sample converts, export the list. Bulk CSV export is not on the Free plan. Solo includes it, and Agency exports 50k rows a file. The ceiling is 50,000 rows a request and 500,000 rows a day.

bash
curl -s -X POST https://api.leadocean.io/v1/exports \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "cfo-list",
    "filters": {
      "title": ["CFO", "Chief Financial Officer"],
      "country": ["GB"],
      "emailStatus": ["verified"]
    },
    "limit": 5000
  }'

Search filters go inside filters, and limit sets the row count. Poll GET /v1/exports/{id} until the file is ready.

You can build the same export in the app at app.leadocean.io. The Exports page has a filter builder, a column picker and a price preview before you download.

What you get

The count in step 1, run on 2026-10-21 with the two titles and country: ["GB"], returned:

json
{
  "total": 6485,
  "totalIsExact": true,
  "totalAll": 23415,
  "distinctCompanies": 4596,
  "credits": 0
}

total is the mailable count. totalAll is everyone matching without the email filter. The call cost no records.

A search row follows the response shape from the API reference, shown here with placeholder values. Rows carry no addresses; enrich by person_id for those.

json
{
  "success": true,
  "data": [
    {
      "profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "Chief Financial Officer at Acme" },
      "contact_data": {
        "has_email": true,
        "email_status": "verified",
        "email_type": "work",
        "contact_current_experiences": [
          { "job_title": "Chief Financial Officer", "company_name": "Acme", "company_domain": "acme.com" }
        ]
      },
      "meta": { "source_ids": { "person_id": "1234567890", "person_group_id": "1234567890" } }
    }
  ],
  "meta": { "count": 1, "nextCursor": "..." }
}

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerCheck $LEADOCEAN_API_KEY is set in this shell and sent as x-api-key.
429Above the plan's rate limit (5 a second on Free, 200 on Agency)Honor Retry-After, or pace the loop.
402Out of recordsThe Free plan's 1,000 records are one-off. Move to Solo ($97 a month) or Agency ($497 a month).
Empty dataA filter value does not match an exact enum stringCheck values with leadocean_list_enum_values. Case matters.
Export refusedOver 50,000 rows a request or 500,000 a daySplit the export by country or company size.
Export refused on FreeBulk CSV export is not on FreeUse search with limit up to 100, or move to Solo.

FAQ

Is a CFO the same as a VP of Finance?

No. A CFO is a C-level officer who owns the finance function and often signs spend. A VP of Finance usually reports to the CFO and runs the day-to-day. Sell to the VP for the evaluation and give them the case to take upward.

Should I search for other finance titles too?

Yes. Title search matches job-title keywords. Count "Finance Director", "VP Finance" and "Head of Finance" separately, then merge the lists on meta.source_ids.person_group_id, which marks one person across duplicate records.

How many CFOs can I actually email?

On 2026-10-21 the mailable count worldwide was 294,303 for "CFO" and "Chief Financial Officer". The default count includes verified, catch_all_valid and catch_all addresses. Bounces are not refunded, so read email_status before you send.

How is this different from selling to a VP of Marketing or an engineering leader?

The method is the same: size, sample, read one profile, write one angle. Only the pain changes. See how to sell to a VP of Marketing and how to sell to a VP of Engineering.

What does this cost?

The counts are free. The recipe spends about 26 records, well inside the 1,000 on the Free plan. See pricing for Solo and Agency.

More role playbooks are in the blog.

Count your CFO list before you write a word

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

Get your free API key →