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

Clay recipe

LeadOcean + Clay: find key decision makers from a website URL

One HTTP API column sends each company domain to POST /v1/people/search and returns the C-level and VP contacts held there.

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

You get a Clay table where each company website returns the C-level and VP people LeadOcean holds there, with name, title and a flag for whether an email is on file. The HTTP API column calls LeadOcean people search once per row. That column needs Clay Growth or higher (Clay pricing, September 2026).

LeadOcean searches by domain, not by full URL. Search rows carry the same profile as enrich, without emails or phones. Emails come from a second call, enrich by person_id.

How it works

  1. Get a free key. Sign up at app.leadocean.io/register. No card, 1,000 records.
  2. Add a domain column. Paste your websites and reduce each to a bare domain such as acme.com. Strip https://, www. and any path.
  3. Add the HTTP API column. Method POST, endpoint https://api.leadocean.io/v1/people/search.
  4. Set headers and body. Send x-api-key, the domain, and the seniority you want.
  5. Pick the field paths. Clay uses dot notation for nested values (Clay docs, September 2026).
  6. Run five rows first. Check the columns fill, then run the table.

Configuration

/Domain is Clay's column reference. jobLevel values are exact strings: C-Team and VP.

text
Method:   POST
URL:      https://api.leadocean.io/v1/people/search
Headers:  x-api-key: <your LeadOcean key>
          content-type: application/json
Body:     {
            "domain": ["/Domain"],
            "jobLevel": ["C-Team", "VP"],
            "limit": 3
          }
Field paths to return:
          data
          meta.total

Test the same request in a terminal first.

bash
curl -X POST "https://api.leadocean.io/v1/people/search" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"domain":["acme.com"],"jobLevel":["C-Team","VP"],"limit":3}'

Each person returned is one record. A search that matches nobody costs nothing. With the field path data, the people come back as one list in one cell. Set limit to 1 if you want one decision maker per row.

Field mapping

LeadOcean fieldClay columnNote
profile_data.profile_full_nameFull nameName as held on the profile.
contact_data.contact_current_experiencesCurrent roleHolds job_title, company_name and company_domain.
profile_data.profile_urlLinkedIn URLFeed it to enrich for the email.
contact_data.has_emailHas emailAnswered without revealing. Use it as the run condition for a second column.
meta.source_ids.person_idPerson IDSend it back to POST /v1/people/enrich.

Cost at 10,000 rows

The size of the run is set by how many people you ask for per domain, not by the row count. Cap it with limit, which takes 1 to 100 and defaults to 25.

10,000 domains at three people each is up to 30,000 records. LeadOcean costs $0 for the first 1,000 records, or $97 on Solo for all of them.

Size the list before you spend. A people count is free, and meta.distinctCompanies shows how many employers a filter spans. Solo covers 100k search records every 5 hours and 500k a week, so one run fits. There is no per-record price. Free covers about 333 domains at three people each, then answers 402.

Clay uses one Action per HTTP call. Growth starts at $495 a month billed monthly, or $446 billed yearly, and includes 40,000 Actions (Clay pricing, September 2026). So 10,000 rows use a quarter of them.

Troubleshooting

SymptomCauseFix
No HTTP API columnClay Free or Launch planThe column is Growth and up. Pull a CSV from the LeadOcean app Exports page instead.
data is emptyFull URL sent, not a bare domainSend acme.com, not https://www.acme.com/about.
401 on every rowWrong headerUse x-api-key, not Authorization.
400 on jobLevelValue case is wrongUse C-Team and VP exactly.
402 mid-runThe 1,000 free records are spentMove to Solo or Agency.
429 errorsOver 5 requests a second on FreeLower the column's rate limit and honor Retry-After.

FAQ

Can I start from a company name?

Yes, with the companyName filter, but a name matches more loosely than a domain. Resolve the name to a website first when you can.

Why not use GET /v1/companies/{domain}/people?

It has no seniority filter. It returns the whole roster at 1 record per person. People search narrows to decision makers.

How do I get their emails?

Run POST /v1/people/enrich with person_id and reveal_email set. It costs no extra record. A person we hold nothing for is a 404 and costs nothing. Check email_status before you send, and accept only verified and catch_all_valid.

Do I need a card to test it?

No. The free plan has no card and 1,000 records, one-off.

Back to all integrations. Plans are on pricing. Related: find decision makers in Cursor, VS Code and Windsurf.

Turn your website list into decision makers. Start free.

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

Get your free API key →