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
- 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.
- Add a LinkedIn URL column. Your table needs one column holding each person's LinkedIn profile URL. Name it
LinkedIn URL. - Add an HTTP API column. Choose the HTTP API enrichment, then set method POST and the endpoint
https://api.leadocean.io/v1/people/enrich. - Set the headers and body. Add
x-api-keyandcontent-typeheaders. Send one identifier in the JSON body, theLinkedIn URLcolumn. - 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). - 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.
- 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.
- 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).
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_experiencesPaste 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.
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 field | Clay column | Note |
|---|---|---|
data.contact_data.email_status | LeadOcean email status | One of 13 values, from verified to spam_trap. Gate on this. |
data.contact_data.has_email | Has email | True or false. The cheapest check for the run condition. |
data.contact_data.contact_emails | LeadOcean emails | A list of objects with email, type and status. Pick the work entry. |
data.contact_data.contact_phones | LeadOcean phones | A list with phone and type. Returned with reveal_email set. |
data.contact_data.contact_current_experiences | Current role | Holds company_name, company_domain and job_title. |
data.profile_data.profile_full_name | Full name | Add it to Field paths if the table does not have it. |
meta.credits | Records used | Records 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 fills | Rows sent to paid providers | Clay Data Credits at 6 each | Cost at $0.05 a credit |
|---|---|---|---|
| 0% (no LeadOcean) | 10,000 | 60,000 | $3,000 |
| 50% | 5,000 | 30,000 | $1,500 |
| 80% | 2,000 | 12,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
| Symptom | Cause | Fix |
|---|---|---|
| No HTTP API column in the list | Your Clay plan is Free or Launch | HTTP API is on Growth and Enterprise (Clay pricing, September 2026). Upgrade or call LeadOcean from code. |
| 401 on every row | Missing or wrong x-api-key header | Re-paste the key. The header name is x-api-key, not Authorization. |
| 400 on some rows | The body holds more than one identifier, or the URL is malformed | Send only linkedin_url. Clean blank and non-profile URLs with a run condition. |
| 404 on some rows | LeadOcean holds nothing for that person | Expected. It costs nothing. The paid providers run on these rows. |
| 402 after a while | The free plan's 1,000 records are spent | Move to Pro, or stop the run (LeadOcean docs, September 2026). |
| 429 errors on big runs | Requests exceeded 100 per second | Lower 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 empty | Path typo or an empty response | Test the path against the curl output above. Paths are case-sensitive. |
| Paid providers run on every row | The "Only run if" formula is empty or wrong | Check 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 →