You get a Clay table that takes a bounced work email, asks LeadOcean who the person is, and returns their current role and a fresh work email. A hard bounce often means the person left. The recipe finds the new address so you can re-send. LeadOcean needs a free key. Clay's HTTP API column needs Growth or higher (Clay pricing, September 2026).
Other templates search a past-employer domain and match on a name hint (FullEnrich template, September 2026). This one skips the guess. LeadOcean enriches straight from the old address.
How it works
- Paste the bounced addresses. Add a text column named
Bounced Email, one address per row. Export them from your sequencer's bounce list. Drop duplicates first, see email deduplication. - Add an HTTP API column. Method POST, URL
https://api.leadocean.io/v1/people/enrich. - Send the bounced address. The body holds
emailandreveal_email: true. LeadOcean accepts a work email as the identifier (LeadOcean docs, September 2026). - Return the contact fields. Ask for the email list, the current role and the profile URL.
- Pick the new address. In a formula column, keep the email whose
typeisworkand whose status isverifiedorcatch_all_valid. An address typedwork_othersits at a different company, usually one the person left, so do not re-send to it. - Fall back for misses. If the first call has no
workaddress, add a second HTTP column that callsGET /v2/people/email/workwith the profile URL. Gate it with an "Only run if" formula on an empty first result (Clay docs, September 2026). - Test on five rows, then run the table.
Configuration
Column one, the enrichment. In Clay's body, /Bounced Email is the 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: { "email": "/Bounced Email", "reveal_email": true }
Field paths to return:
data.contact_data.email_status
data.contact_data.contact_emails
data.contact_data.contact_current_experiences
data.profile_data.profile_urlTest the same call from a terminal with a placeholder address.
curl -X POST "https://api.leadocean.io/v1/people/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{"email":"jane.doe@acme.com","reveal_email":true}'The fallback, column two:
curl -s "https://api.leadocean.io/v2/people/email/work?linkedin_url=https://www.linkedin.com/in/jane-doe" \
-H "x-api-key: $LEADOCEAN_API_KEY"Send one identifier per enrich call. Two is a 400 (LeadOcean docs, September 2026). Clay's docs show dot notation for field paths, so return the whole contact_emails list and filter it in a formula.
Field mapping
| LeadOcean field | Clay column | Note |
|---|---|---|
data.contact_data.contact_emails[].email | New work email | Take the entry with type of work. |
data.contact_data.contact_emails[].status | New email status | Send to verified and catch_all_valid only. |
data.contact_data.contact_current_experiences[].company_name | New company | Compare with the bounced domain to confirm a move. |
data.contact_data.contact_current_experiences[].job_title | New title | Use it to rewrite the opener, see email personalization. |
data.profile_data.profile_url | Profile URL | Input for the fallback call. |
meta.credits | Records used | For auditing the run. |
Cost at 10,000 rows
10,000 bounced addresses cost LeadOcean at most 10,000 records and $0 on Free for the first 1,000. LeadOcean does not refund bounces, so read email_status before you send.
LeadOcean. A hit is one record. A person LeadOcean holds nothing for is a 404 and costs nothing (LeadOcean docs, September 2026). The fallback GET /v2/people/email/work costs one record per call, even when it returns null. Free holds 1,000 records for life, at 5 requests a second. Solo is $97 a month and Agency is $497 a month, both with a fair-use pace and no per-record price (LeadOcean pricing).
Clay. Each HTTP API call uses one Action (Clay pricing, September 2026). Two columns over 10,000 rows is at most 20,000 Actions. Growth includes 40,000 Actions a month, and costs $495 a month billed monthly or $446 billed yearly. This recipe spends no Data Credits.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| No HTTP API column | Clay Free or Launch plan | The column starts on Growth (Clay pricing, September 2026). Or run the calls from a script. |
| 401 on every row | Wrong header | Use x-api-key, not Authorization. |
| 400 on some rows | Blank or malformed email | Add an "Only run if" check that the cell is not empty. |
| 404 on some rows | LeadOcean holds nothing for that address | Expected and free. Try the fallback or drop the row. |
Only a work_other address returns | The person moved, no new work email held | Do not send. Run the fallback. |
| 402 mid-run | The 1,000 free records are spent | Move to Solo or Agency, or stop the run. |
| 429 errors | Over 5 requests a second on Free | Lower Clay's per-column rate limit and honor Retry-After. |
FAQ
Does every bounced email come back with a new address?
No. LeadOcean returns what it holds, and a miss is a 404. Plan for a share of rows to stay empty. Measure your own rate on five rows first.
Why not just retry the old address?
A hard bounce means the mailbox is gone. Retrying hurts your sender reputation. Find the new address and check its status first.
Can I run this without Clay?
Yes. The same two calls work from a script, and a CSV of bounces fits a loop. See personalizing emails for what to do with the new role once you have it.
Do I need a card to try it?
No. The free plan needs no card and gives 1,000 records for life. All features are on it.
Back to all integrations. See pricing.
Recover your bounced contacts. Start free.
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →