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

How-to guide

How to Build an AI Lead Gen Workflow (Search, Enrich, Export)

Size the list for free, pull 25 people, enrich five, and let an AI client run the same steps through MCP.

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

An AI lead gen tool is only as good as the data it can reach. The fastest setup is a data API with a hosted MCP server, so an AI client can size, search and enrich on its own.

This guide uses LeadOcean. You run the steps by hand over REST first, then hand the same steps to an AI client.

TL;DR

  • Time: 15 to 20 minutes from a fresh account to an enriched list.
  • Cost: about 30 LeadOcean records. Sizing a list is free, so you spend records only when you pull people.
  • Result: a filtered list of VP-level sales leaders with an email status on every row, plus the same flow callable from an AI client over MCP.

Prerequisites

  • A LeadOcean account on the Free plan: 1,000 records for life, no card, 5 requests a second. Pricing.
  • An API key in your shell: export LEADOCEAN_API_KEY=...
  • curl and jq.
  • Optional: an AI client that supports remote MCP servers, for Step 5.

Step 1: Size the list before you spend anything

Start with a count. A count tells you whether the filter is too wide, too narrow or wrong, and it costs nothing.

Send count=true as a query parameter and limit: 1 in the body. The body stays flat JSON, and every filter is an array. data comes back empty and meta.countOnly is true.

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 '{
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["US"],
    "employeeRange": ["51-200"],
    "limit": 1
  }' | jq '.meta'

meta.total is capped at 100,000. If you see the cap, add a filter. Enum values are exact strings, so check them first with GET /v1/enums or the leadocean_list_enum_values MCP tool.

Step 2: Search and page through results

Run the same body without count=true and with limit 25. One page is up to 100 rows. Each person returned is one record. Rows carry no addresses; each has its id 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 '{
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["US"],
    "employeeRange": ["51-200"],
    "limit": 25
  }' > page1.json

jq '.meta' page1.json

For the next page, pass the cursor from the previous response. One search pages to 10,000 rows. The last page has meta.depthCapped set to true and no nextCursor, so narrow the filters instead of walking the index.

Step 3: Enrich only the people you will contact

Enrich by the person_id from the search row. It takes exactly one of linkedin_url, email, phone or person_id. Set reveal_email to true to get the address.

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_2", "reveal_email": true}'

An enrichment that finds nothing returns a 404 and costs nothing. Since October 2026 the response also carries career history in resume_data: past roles, education and certifications. Use it to write one line of real context per lead.

Read contact_data.email_status before you send. LeadOcean does not refund bounced emails.

Step 4: Export the whole list when five is not enough

For a full list, use POST /v1/exports. A request takes up to 50,000 rows, and the daily ceiling is 500,000 rows. Bulk CSV export is not on Free; it is included on Solo ($97 a month). Every row costs one record.

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": "us-vp-sales-51-200",
    "filters": {
      "jobLevel": ["VP"],
      "jobFunction": ["Sales & Business Development"],
      "country": ["US"],
      "employeeRange": ["51-200"],
      "emailStatus": ["verified"]
    },
    "limit": 5000
  }'

The response carries an export id. Poll GET /v1/exports/{id} until it is done, then fetch the file from GET /v1/exports/{id}/download. The filters object takes the same filters as search, and emailStatus verified keeps only verified addresses.

You can also build the same export in the app at app.leadocean.io: filter builder, column picker, a price preview, then CSV download. The app has no sequencer, dialer or CRM. It exports data and nothing else.

Step 5: Let an AI client run the steps through MCP

LeadOcean runs a hosted MCP server at https://api.leadocean.io/mcp. It signs in with OAuth 2.1, so you paste no key. It exposes 13 tools.

Add the server URL in your AI client's MCP settings, sign in, then give it a prompt like this:

text
Use LeadOcean. Count US VPs of Sales at companies with 51-200 employees.
Report the total and the number of distinct companies.
If the total is under 20,000, search the first 25 people and enrich five
with reveal_email. Show email_status for each. Do not exceed 30 records.

Seven of the tools are free. The ones you use here are leadocean_count_leads, leadocean_count_companies and leadocean_list_enum_values. Search, get_lead, find_phone, get_company and export spend records. The "do not exceed" line in the prompt is your budget guard.

What you get

A count from the free leadocean_count_leads MCP tool, run on 2026-10-21 with the Step 1 filters:

json
{
  "total": 18567,
  "totalIsExact": true,
  "totalAll": 60456,
  "distinctCompanies": 12192,
  "credits": 0
}

total counts people whose email is verified, catch_all_valid or catch_all, which is the tool's default. totalAll is the same filters with no email condition. credits is 0 because a count spends nothing.

An enrich response has this shape (response shape from the API reference, placeholder values):

json
{
  "success": true,
  "data": {
    "profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "VP Sales at Acme" },
    "contact_data": {
      "has_email": true,
      "email_status": "verified",
      "email_type": "work",
      "contact_emails": [
        { "email": "jane.doe@acme.com", "type": "work", "status": "verified" }
      ],
      "contact_phones": [ { "phone": "+1 415 555 0133" } ],
      "contact_current_experiences": [
        { "job_title": "VP Sales", "company_name": "Acme", "company_domain": "acme.com" }
      ]
    },
    "resume_data": { "experiences": [], "educations": [], "certifications": [] }
  },
  "meta": { "schema": "leadocean.person.v1" }
}

Fields appear when LeadOcean holds them. Check the live response against the API reference before you map columns.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-keyRe-export $LEADOCEAN_API_KEY and check the header name.
429Above the plan's rate limit: 5 a second on Free, 200 on AgencyWait for Retry-After, then slow the loop.
402Records spentFree is 1,000 records for life. Move to Solo ($97 a month) or Agency ($497 a month).
Empty resultsA filter value that is not an exact enum stringCheck values with GET /v1/enums or leadocean_list_enum_values.
meta.depthCapped is trueThe search reached 10,000 rowsNarrow the filters and run a second search.
Export refusedOver 50,000 rows a request or 500,000 a daySplit the export by country or seniority.

FAQ

What makes a lead gen tool "AI"?

Usually an AI client calls a data source on your behalf. With LeadOcean that source is the MCP server, so the AI client counts, searches and enriches using the same filters as the REST API.

Does the AI client spend my records?

Only through search, get_lead, find_phone, get_company and export. Counts and filter lookups are free. Put a record limit in the prompt and check usage with GET /v1/usage.

Can I do this without MCP?

Yes. Steps 1 to 4 are plain REST calls. MCP adds a way for an AI client to run them with no key pasted.

Is there an app with sequences and a dialer?

No. The LeadOcean app handles exports, API keys, connected MCP apps and usage. Send the data to the outreach tool you already use. See the integrations for Clay, n8n, Make and Zapier.

Size your first AI lead list for free

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

Get your free API key →