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 Prospecting Workflow (Claude, MCP and the LeadOcean API)

AI does the research and the filtering. The data underneath decides whether the output is any good. Here is the whole loop, with real calls.

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

An AI prospecting tool is two parts: a model that turns a plain-English target into filters, and a data source that returns real people. Most roundups compare the first part. This guide builds the whole loop so you can see where each part earns its keep.

TL;DR

  • The model writes the filters and reads the results. The data API supplies the people. Keep them separate and you can swap either.
  • It takes about 25 minutes. Sizing a list costs nothing, and the full run spends about 30 LeadOcean records.
  • The Free plan covers it: 1,000 records for life, no card.

Prerequisites

  • A LeadOcean account and API key, stored as $LEADOCEAN_API_KEY. Sign up free at app.leadocean.io.
  • curl and jq for the REST steps.
  • An MCP client for the agent step. Any client that can add a remote MCP server works. The LeadOcean server is at https://api.leadocean.io/mcp and signs in with OAuth, so no key is pasted.
  • A target in one sentence. Ours: VPs of Sales at 51 to 500 person US companies that sell AI products.

Step 1: Turn the sentence into filters

Filters are exact strings, so a model that guesses them returns empty lists. Have it look them up first. The free leadocean_list_enum_values tool and the GET /v1/enums endpoint return the allowed values. The index below lists each enum and its size; GET /v1/enums/{name} returns the values.

bash
curl -s "https://api.leadocean.io/v1/enums" \
  -H "x-api-key: $LEADOCEAN_API_KEY" | jq '.data.enums[] | {name, count}'

For our target the exact values are jobLevel: VP, jobFunction: Sales & Business Development, country: US and employeeRange: 51-200, 201-500. "Sell AI products" is not an enum: it goes in companyKeywords, which matches the employer's own description. Case matters. vp is a seniority value, not a jobLevel value.

Step 2: Size the list before you spend anything

Counting is free, however many times you run it. In an MCP client, ask the model to call leadocean_count_leads. Over REST, send count=true and limit=1 as query parameters.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true&limit=1" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["US"],
    "employeeRange": ["51-200", "201-500"],
    "companyKeywords": ["artificial intelligence"]
  }' | jq '.meta'

meta.total is capped at 100,000, and data comes back empty with meta.countOnly true. Use the count to tighten the filters until the list is one you would actually work.

Add the server to your MCP client with the URL https://api.leadocean.io/mcp. The server exposes 13 tools. Three matter here: leadocean_count_leads (free), leadocean_search_leads (1 record per person returned) and leadocean_get_lead (1 record).

Give the model a prompt that forces the free call first:

text
Find VPs of Sales at US companies with 51 to 500 employees that sell AI products.
1. Call leadocean_list_enum_values for any filter you are unsure of.
2. Call leadocean_count_leads and tell me the total and the filters you used.
3. Stop and wait. Do not call leadocean_search_leads until I say go.

The stop at step 3 is the guardrail. A search that returns people spends records, so the human approves the number first. Then say "go, limit 25".

Step 4: Pull one page over REST

The same search, as a script you can schedule. The body is flat JSON, filters are arrays, limit runs 1 to 100, and cursor pages forward.

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", "201-500"],
    "companyKeywords": ["artificial intelligence"],
    "limit": 25
  }' > page1.json
jq '.meta' page1.json

This returns 25 people and spends 25 records. One search pages to 10,000 rows. When meta.depthCapped is true there is no nextCursor, so narrow the filters instead of walking further.

Step 5: Enrich the few that matter

Do not enrich the whole page. Have the model rank the 25 against your pitch, then enrich the top five. Enrich takes exactly one of linkedin_url, email, phone or 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_placeholder", "reveal_email": true}'

Since October 2026 the response includes career history in resume_data: past roles, education, certifications and awards, each when held. That is the text a model needs to write a specific first line. Past employers carry no company_id yet. An enrichment that finds nothing is a 404 and costs nothing.

What you get

This is the sizing call from Step 2, run through the free MCP tool on 2026-10-21. It counts mailable people (verified, catch_all_valid or catch_all email), not everyone.

text
leadocean_count_leads
  jobLevel: VP
  jobFunction: Sales & Business Development
  country: US
  employeeRange: 51-200, 201-500
  companyKeywords: artificial intelligence

total (mailable):  245
totalAll (no email condition): 542
distinctCompanies: 153

So 245 mailable VPs across 153 companies, at no cost. The search and enrich calls return records in 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_current_experiences": [
          { "job_title": "VP Sales", "company_name": "Acme", "company_domain": "acme.com" }
        ]
      },
      "meta": { "source_ids": { "person_id": "1234567" }, "fetched_at": "2026-10-01" }
    }
  ],
  "meta": { "count": 1, "limit": 25, "credits": 1, "nextCursor": null }
}

Search rows carry the id you enrich by at meta.source_ids.person_id. The full schema is in the API reference (October 2026). Search returns a thin projection without contact points. Enrichment adds them, and reveal_email returns the address.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerRe-copy the key from app.leadocean.io and check the header name
429Above your plan's rate limit (5 requests a second on Free, 200 on Agency)Honor the Retry-After header and slow the loop
402Records spent (Free is 1,000 for life)Check GET /v1/usage, or move to Solo at $97 a month
Empty resultsA filter value is not an exact enum stringResolve it with leadocean_list_enum_values; jobLevel is VP, not vp
meta.depthCapped trueOne search reached 10,000 rowsAdd filters and run narrower searches
Export refusedOver 50,000 rows a request or 500,000 a daySplit the export; bulk CSV is not on Free

FAQ

Do AI prospecting tools find new contacts or just filter existing data?

They filter an existing database. The model reads your goal and picks filters. It cannot create a verified email. Data quality sets the ceiling, so check email_status before you send.

Why use MCP instead of a built-in AI feature?

MCP lets any compatible model call the same tools, so you are not tied to one vendor's assistant. LeadOcean's server has 13 tools, and counting is free.

How many records does an AI prospecting run cost?

Sizing is free. A search page of 25 spends 25 records, and each enrichment that finds someone spends one. This guide uses about 30.

Can I run this without an agent?

Yes. Steps 2, 4 and 5 are plain REST calls. The agent only adds the filter translation and the ranking.

Where do the larger lists come from?

Use POST /v1/exports or the Exports page in the app. Bulk CSV export is not on Free. See best leads scraper tools for B2B prospecting and lead generation or prospecting for the wider picture, sales intelligence platforms for the alternatives, and pricing for plans.

Run your AI prospecting workflow on real data

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

Get your free API key →