Lead source

Bulk B2B contact export to CSV

Filter on jobLevel, jobFunction and country, size the list for free, then export it as a CSV.

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

Filter on jobLevel, jobFunction and country, size the list for free, then export it as a CSV.

A bulk export is a people search that writes rows to a file instead of a page. It takes the same filters as search, so you can count the list before you spend a single record.

The filter

FilterTypeExample valuesNote
jobLevelarray of enum["C-Team"], ["VP", "Director"]6 exact strings: C-Team, VP, Director, Manager, Staff, Other. Resolve with leadocean_list_enum_values (name job_level).
jobFunctionarray of enum["Sales & Business Development"], ["Advertising & Marketing"]22 exact strings, including the ampersand and capitals. Name job_function.
countryarray of enum["US"], ["GB"], ["DE"]254 exact strings. These are two-letter codes. Name country.

The export filters object accepts every people search filter except cursor, limit, count and facets. Enum values are exact strings, so copy them from leadocean_list_enum_values.

How many you can reach

Three live counts from leadocean_count_leads, run on 2026-10-01. They spent no records.

FiltersPeople
jobLevel C-Team, country US, employeeRange 51-200 (mailable: verified, catch_all_valid or catch_all, the tool's default)440,914
jobLevel VP and Director, jobFunction Sales & Business Development, country GB, employeeRange 201-500 (mailable, same default)4,964
jobLevel Manager, jobFunction Advertising & Marketing, country DE, hasPhone true (any email status, no email filter passed)7,367

The third count is people with a phone number on file. It is not a mailable count, because no email status was set.

The first list is nearly nine exports. One export is up to 50,000 rows, so split it by employeeRange or country and run them one after another.

Run it from an AI agent

Connect the MCP server at https://api.leadocean.io/mcp (OAuth sign-in, no key pasted), then ask in plain words.

Count VPs and Directors in sales at UK companies with 201 to 500 employees. Then show me 25 so I can check the shape before I export.

The agent counts first with the free tool, then calls leadocean_search_leads with this:

json
{
  "jobLevel": ["VP", "Director"],
  "jobFunction": ["Sales & Business Development"],
  "country": ["GB"],
  "employeeRange": ["201-500"],
  "limit": 25
}

The search costs 1 record per person returned. When the sample looks right, ask for the export. leadocean_export_leads costs 1 record per row written.

Run it with the API

One flat JSON body to POST /v1/people/search. Filters are arrays of strings. The free sizing call puts count=true in the URL, not the body, and sets limit to 1.

bash
curl -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jobLevel": ["VP", "Director"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["GB"],
    "employeeRange": ["201-500"],
    "emailStatus": ["verified", "catch_all_valid", "catch_all"],
    "limit": 1
  }'

data comes back empty and meta.countOnly is true. meta.total stops at 100,000 on the REST API, so a list larger than that needs the MCP count or an employeeRange split.

Export the list

POST /v1/exports takes the same filters inside a filters object. One export is up to 50,000 rows, and an account can export 500,000 rows a day.

bash
curl -X POST "https://api.leadocean.io/v1/exports" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "uk-sales-leaders-201-500",
    "filters": {
      "jobLevel": ["VP", "Director"],
      "jobFunction": ["Sales & Business Development"],
      "country": ["GB"],
      "employeeRange": ["201-500"],
      "emailStatus": ["verified", "catch_all_valid", "catch_all"]
    },
    "limit": 5000,
    "preset": "full"
  }'

The search preset is 27 columns with no contact points. The default full preset is 45 columns, with emails 1 to 3 and phones 1 to 2. Every row costs 1 record either way. Poll GET /v1/exports/{id}, then GET /v1/exports/{id}/download.

The CSV headers come back as email_1_address, email_1_status and phone_1_number. Three illustrative rows, with placeholder values, not real people:

csv
person_id,current_job_title,current_company_name,current_company_domain,country_code,email_1_address,email_1_status,phone_1_number
p_0001,VP Sales,Acme Ltd,acme.example,GB,contact1@acme.example,verified,+44 20 0000 0001
p_0002,Director of Sales,Acme Retail,acme-retail.example,GB,contact2@acme-retail.example,catch_all_valid,+44 20 0000 0002
p_0003,Sales Director,Acme Systems,acme-systems.example,GB,contact3@acme-systems.example,verified,

Prefer clicking? The Exports page in the app at app.leadocean.io has the filter builder, a column picker with presets, the record price before you start, and a CSV download. See the bulk export product page.

Combine it

  • Add hasPhone set to true to keep people you can also call. That is the third count above. See find people with phone numbers.
  • Add emailStatus (for example ["verified"]) to export only addresses that passed verification. See find people with verified emails.
  • Add industry or employeeRange (for example ["51-200"]) to cut a large list into exports under 50,000 rows each.

For the full walk-through of a large pull, read pull 1M records with a bulk CSV export and what is a bulk export. More ways to build a list are on the lead sources hub.

FAQ

How many rows can one export hold?

Up to 50,000 rows. An account can export 500,000 rows a day. For a bigger list, run several exports with filters that do not overlap, such as one per employeeRange or country.

Does counting cost anything?

No. count_leads, list_filters and list_enum_values are free, and so is a search with count=true and limit 1. Count the list first, every time.

Does an export use records?

Yes, 1 record per row written, whichever preset you pick. The free plan has 1,000 records, one-off, no card. Pro is $499 a month, flat. See pricing.

Can I choose the columns?

Yes. Pass a preset (search or full) or a columns array of ids from GET /v1/exports/columns. Numbered blocks default to 3 emails and 2 phones, and caps changes that.

Size your bulk export for free, then pull the CSV

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

Get your free API key →