Clay integration

LeadOcean + Clay: fill rows first, pay providers only for the gaps

Call POST /v1/people/enrich from a Clay HTTP API column and run paid providers only on rows LeadOcean could not fill.

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

You get a Clay table that asks LeadOcean for each person first and spends Clay Data Credits only on rows that come back empty. The link is one HTTP API column calling POST /v1/people/enrich with a LinkedIn URL. Clay's HTTP API needs the Growth plan or higher (Clay pricing, September 2026). LeadOcean needs a free key.

This fits one job: you already have LinkedIn URLs in a table and want email and job data at a flat price. If you want to drop Clay entirely, see the Clay alternative.

How it works

  1. Create a LeadOcean key. Sign up at app.leadocean.io/register. The free plan has 1,000 records, one-off, and no card. Copy the key from the dashboard.
  2. Add a LinkedIn URL column. Your table needs one column holding each person's LinkedIn profile URL. Name it LinkedIn URL.
  3. Add an HTTP API column. Choose the HTTP API enrichment, then set method POST and the endpoint https://api.leadocean.io/v1/people/enrich.
  4. Set the headers and body. Add x-api-key and content-type headers. Send one identifier in the JSON body, the LinkedIn URL column.
  5. Choose the field paths to return. List the response paths you want as output, for example data.contact_data.email_status. Clay uses dot notation for nested values (Clay docs, September 2026).
  6. Set the rate limit. Clay lets you cap requests per time window. LeadOcean allows 100 requests per second per key (LeadOcean docs, September 2026), so the Clay setting is rarely the bottleneck.
  7. Gate the paid providers. On each paid email or phone enrichment column, open Run Settings and set the "Only run if" formula to run when the LeadOcean email column is empty.
  8. Test on five rows. Run five rows before you run the table. Check that hits fill the columns and that misses leave the paid providers running.

Configuration

Clay's HTTP API column takes a method, a URL, headers, a JSON body and field paths. Set them like this. In the body, /LinkedIn URL is Clay's column reference (Clay docs, September 2026).

text
Method:   POST
URL:      https://api.leadocean.io/v1/people/enrich
Headers:  x-api-key: <your LeadOcean key>
          content-type: application/json
Body:     {
            "linkedin_url": "/LinkedIn URL",
            "reveal_email": true
          }
Field paths to return:
          data.contact_data.email_status
          data.contact_data.has_email
          data.contact_data.contact_emails
          data.contact_data.contact_current_experiences

Paste the key into the header field in Clay. Do not put it in a shared table column.

Test the same request from a terminal first. This is what Clay sends per row.

bash
curl -X POST "https://api.leadocean.io/v1/people/enrich" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"linkedin_url":"https://www.linkedin.com/in/jane-doe","reveal_email":true}'

Send exactly one identifier per request. LeadOcean returns a 400 if you send two (LeadOcean docs, September 2026). reveal_email costs no extra record.

For the run condition, use a formula in plain Clay syntax such as {{LeadOcean email status}} is empty. The "Use AI" button in Run Settings writes the formula from a sentence (Clay docs, September 2026). Clay's HTTP API doc shows dot notation for Field paths and no array index syntax (Clay docs, October 2026). So return the whole contact_emails list and pick the work entry in a Clay formula.

Field mapping

The response nests data under data.contact_data and data.contact_current_experiences. Map these into flat Clay columns.

LeadOcean fieldClay columnNote
data.contact_data.email_statusLeadOcean email statusOne of 13 values, from verified to spam_trap. Gate on this.
data.contact_data.has_emailHas emailTrue or false. The cheapest check for the run condition.
data.contact_data.contact_emailsLeadOcean emailsA list of objects with email, type and status. Pick the work entry.
data.contact_data.contact_phonesLeadOcean phonesA list with phone and type. Returned with reveal_email set.
data.contact_data.contact_current_experiencesCurrent roleHolds company_name, company_domain and job_title.
data.profile_data.profile_full_nameFull nameAdd it to Field paths if the table does not have it.
meta.creditsRecords usedRecords counted for the call. Useful for auditing.

Do not treat catch_all as verified. The safe rule is to accept verified and catch_all_valid, and send everything else to a paid provider.

Cost at 10,000 rows

At 10,000 rows, LeadOcean costs $0 on the first 1,000 records and $499 flat on Pro. Clay costs depend on how many rows LeadOcean misses.

LeadOcean. A hit counts as one record. A miss is a 404 and costs nothing (LeadOcean docs, September 2026). So 10,000 rows use at most 10,000 records. The Free plan covers 1,000 of them, one-off. Pro is $499 a month with no per-record price, so the same run costs $499 that month.

Clay. The column needs Growth or higher. Growth includes 40,000 Actions and 6,000 Data Credits a month, and Data Credits start at $0.05 each (Clay pricing, September 2026). An HTTP API call uses one Action per row, so this column takes 10,000 Actions (LeadMagic, July 2026). Growth starts at $495 a month, or $446 a month billed yearly (Clay pricing, September 2026).

The saving is on paid providers. A fully enriched Clay record costs 6 to 20 Data Credits (LeadMagic, July 2026). At the low end, 6 credits at $0.05 is $0.30 a row. The table below is arithmetic, not a measured fill rate. Your hit rate will differ.

Rows LeadOcean fillsRows sent to paid providersClay Data Credits at 6 eachCost at $0.05 a credit
0% (no LeadOcean)10,00060,000$3,000
50%5,00030,000$1,500
80%2,00012,000$600

Every 1,000 rows LeadOcean fills removes about $300 of Clay credits at the low end of the range. Add the LeadOcean cost and compare. Pro at $499 pays for itself once it fills roughly 1,700 rows you would otherwise buy at 6 credits. Run the five-row test first, then size a full run from the real hit rate.

Troubleshooting

SymptomCauseFix
No HTTP API column in the listYour Clay plan is Free or LaunchHTTP API is on Growth and Enterprise (Clay pricing, September 2026). Upgrade or call LeadOcean from code.
401 on every rowMissing or wrong x-api-key headerRe-paste the key. The header name is x-api-key, not Authorization.
400 on some rowsThe body holds more than one identifier, or the URL is malformedSend only linkedin_url. Clean blank and non-profile URLs with a run condition.
404 on some rowsLeadOcean holds nothing for that personExpected. It costs nothing. The paid providers run on these rows.
402 after a whileThe free plan's 1,000 records are spentMove to Pro, or stop the run (LeadOcean docs, September 2026).
429 errors on big runsRequests exceeded 100 per secondLower Clay's rate-limit setting and honor the Retry-After header. Clay lets you set a response timeout and retry on failure per column, and its docs publish no default for either and do not describe retries on a 429 (Clay docs, October 2026).
Field path returns emptyPath typo or an empty responseTest the path against the curl output above. Paths are case-sensitive.
Paid providers run on every rowThe "Only run if" formula is empty or wrongCheck that it references the LeadOcean column. Yes, the HTTP API column accepts a conditional run formula so it only runs when the data it needs is present (Clay docs, September 2026).

FAQ

Do I need Clay's Growth plan?

Yes, for the HTTP API column. Clay lists HTTP API on Growth and Enterprise only (Clay pricing, September 2026). On Launch you can still export a CSV from LeadOcean and import it.

Does a LeadOcean miss cost me anything?

No records are charged. A person LeadOcean holds nothing for returns a 404 at no cost. Clay still spends one Action on the call (LeadMagic, July 2026).

Can I search for people from Clay, not just enrich them?

Yes. POST /v1/people/search takes 50 people filters, and counts are free. Use a second HTTP API column, or pull the list with POST /v1/exports and import the CSV. Enrichment is the recipe here because it is one request per row.

Do I need a card to test this?

No. The free plan needs a work email and no card, with the same API and MCP server as Pro. Your 1,000 records last until you spend them.

Related: Clay alternative, Clay alternatives compared, Clay credits alternatives, pricing. Back to all integrations.

Try this Clay recipe with your own rows. Start free.

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

Get your free API key →