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

How-to guide

How to Align Sales and Marketing on One Enriched List (11 Enrichment Tools)

Count the audience once, enrich it once, and let both teams read the same rows. Then pick the tools that fill the gaps.

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

TL;DR

  • Sales and marketing drift apart when each team enriches its own list. Fix it with one audience definition, one enrichment pass and one export both teams read.
  • It takes about 30 minutes and spends about 21 LeadOcean records: 20 for a sample pull and 1 for a single enrichment. Counting the audience is free.
  • Eleven tools are named below by the job they do. Pick one per job, not all eleven.

Prerequisites

  • A LeadOcean account from app.leadocean.io. The free plan has no card and 1,000 records, one-off.
  • An API key exported as $LEADOCEAN_API_KEY, plus curl and jq.
  • Whatever your sales and marketing teams already use as a system of record. You only need a CSV import there.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

Step 1: Agree the audience as filters

Write the shared audience as filters, not adjectives. Marketing and sales then argue about a number, not a story.

The example is marketing directors at US software companies with 51 to 200 staff. Use the free count to size it. In an MCP client, leadocean_count_leads does the same job. Over REST, send count=true as a query parameter with limit at 1.

bash
curl -s "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{
    "jobLevel": ["Director"],
    "jobFunction": ["Advertising & Marketing"],
    "country": ["US"],
    "industry": ["Software Development"],
    "employeeRange": ["51-200"],
    "limit": 1
  }' | jq '.meta'

A count costs 0 records. If the number is too big for one campaign, add a filter. If it is too small, drop one.

Step 2: Pull a 20-row sample both teams review

Twenty rows is enough to see whether the filters match who you mean. Put the sample in front of one sales lead and one marketer before you spend more.

bash
curl -s https://api.leadocean.io/v1/people/search \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{
    "jobLevel": ["Director"],
    "jobFunction": ["Advertising & Marketing"],
    "country": ["US"],
    "industry": ["Software Development"],
    "employeeRange": ["51-200"],
    "excludeTitle": ["assistant", "intern"],
    "limit": 20
  }' > sample.json
jq -r '.data[] | [.meta.source_ids.person_id, .contact_data.email_status] | @csv' sample.json
jq '.data[0].profile_data' sample.json

This spends 20 records. The first jq line prints each person id with its email status. The second prints one profile, so you can read the names and titles inside profile_data. If a title looks wrong, add it to excludeTitle and run again.

Step 3: Enrich one person to fill the gaps

Enrichment takes exactly one of linkedin_url, email, phone or person_id. Use the person_id from the sample. Set reveal_email to true only for rows you will actually contact.

bash
curl -s 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 sample.json>", "reveal_email": true}' | jq .

A person we hold nothing for is a 404 and costs nothing. Since October 2026 the response also carries career history in resume_data, such as past roles and education. Past employers have no company_id yet.

Step 4: Export one file for both teams

Bulk CSV export is on Solo ($97 a month) and above, not on Free. An export takes up to 50,000 rows a request and 500,000 a day. On Free, page the search with cursor instead.

bash
curl -s https://api.leadocean.io/v1/exports \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{
    "name": "US marketing directors, software, 51-200",
    "filters": {
      "jobLevel": ["Director"],
      "jobFunction": ["Advertising & Marketing"],
      "country": ["US"],
      "industry": ["Software Development"],
      "employeeRange": ["51-200"],
      "emailStatus": ["verified", "catch_all_valid", "catch_all"]
    },
    "limit": 500
  }' | jq '.data | {id, status, requested}'

Import the CSV into the CRM that sales uses and the ad or email platform that marketing uses. One file means one count, one definition and one place to fix a bad row.

The LeadOcean app has the same export on its Exports page: a filter builder, a column picker, the record price before you start and a Download button. LeadOcean has no CRM, sequencer or dialer, so the file goes into those tools.

Step 5: Pick one tool per job

Eleven tools show up in GTM stacks. They do different jobs, so choose by the gap you have. Every claim below is from the vendor's own page, checked in September 2026.

JobToolOne fact from its own docs
Shared data layer (search, enrich, export, MCP)LeadOcean13 MCP tools, and counts are free. See pricing.
Table and waterfall workflowClayThe Free plan lists waterfalls.
All-in-one prospecting seatApolloAn email costs 1 credit and a phone number 8.
Enterprise databaseZoomInfo (GTM AI)Search and lookup are free. One data credit enriches or exports one record.
Email finding by domainHunterNo credit is used when nothing is found.
Waterfall for emails and mobilesFullEnrichA lookup that finds nothing costs 0 credits.
Contact data with a waterfall optionLushaData Waterfall charges only on a successful match.
EMEA-focused sales dataCognismOne credit is one revealed contact.
Verified emails and mobilesProspeoNo result costs 0 credits.
Raw person and company profilesPeople Data LabsRequests that return nothing are not billed.
Waterfall for valid contactsBetterContactCredits are charged only on valid results.

Our view: use one data layer for the shared list, then add a waterfall such as Clay or FullEnrich only where that layer leaves holes. Two overlapping waterfalls just double the bill and the argument. For vendor-by-vendor detail, see best enrichment APIs for B2B sales teams.

What you get

The Step 1 count is a real result. We ran the same filters through the free leadocean_count_leads tool on 2026-10-21 (trimmed).

json
{
  "total": 1576,
  "totalIsExact": true,
  "totalAll": 3817,
  "distinctCompanies": 998,
  "credits": 0,
  "defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all)",
  "facets": {
    "country": [{ "value": "US", "count": 1576 }],
    "industry": [{ "value": "Software Development", "count": 1576 }],
    "seniority": [{ "value": "director", "count": 1576 }],
    "company_size": [{ "value": "51-200", "count": 1576 }]
  }
}

That is 1,576 mailable people across 998 companies. Without the email condition the same filters match 3,817 people. Your number will move as the data changes.

The export request returns a job. This is the response shape from the API reference, with placeholder values.

json
{
  "success": true,
  "data": {
    "id": "<export id>",
    "name": "US marketing directors, software, 51-200",
    "status": "queued",
    "requested": 500
  }
}

Troubleshooting

ErrorCauseFix
401Missing, wrong or revoked API keyRe-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again.
429Above your plan's rate (5 requests a second on Free, 200 on Agency)Wait the Retry-After seconds, then retry. Use pages of 100 instead of more calls.
402Free plan: the 1,000 records are spentCheck GET /v1/account, lower limit, or move to a paid plan.
Count of 0 or a 400 on a filterA value outside the catalogue, such as industry: "Software"Call leadocean_list_enum_values or GET /v1/enums and pass the exact string.
Export refusedBulk CSV export is not on Free, or the request is above 50,000 rows or the 500,000 daily ceilingPage the search on Free, or split the export across requests and days.

FAQ

Why do sales and marketing disagree on lead data?

Each team builds its own list with its own filters and its own enrichment tool. The same account then shows different titles and emails in two systems. A single audience definition and one export removes most of that.

Do I need all 11 tools?

No. Most teams need one data layer, one place to run workflows and, rarely, a second source for a gap. Pick one per job from the table in Step 5.

Does LeadOcean replace my CRM or sequencer?

No. LeadOcean is the data API and MCP server, plus an app with an Exports page. It has no rep workspace, sequencer, dialer, CRM or Chrome extension.

How fresh is the data?

The dataset is refreshed monthly, and each record carries its own fetched_at date. Read email_status before you send, because bounced emails are not refunded.

Can marketing use this without writing code?

Yes. The Exports page in the app builds the same file with a filter builder and a column picker, and shows the record price before you start.

Give sales and marketing one list to work from

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

Get your free API key →