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

Integration recipe

LeadOcean + Clay: recover bounced emails by finding where the person went

Feed a bounced address to POST /v1/people/enrich and get back the person's current work email, or a clear miss.

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 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

  1. 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.
  2. Add an HTTP API column. Method POST, URL https://api.leadocean.io/v1/people/enrich.
  3. Send the bounced address. The body holds email and reveal_email: true. LeadOcean accepts a work email as the identifier (LeadOcean docs, September 2026).
  4. Return the contact fields. Ask for the email list, the current role and the profile URL.
  5. Pick the new address. In a formula column, keep the email whose type is work and whose status is verified or catch_all_valid. An address typed work_other sits at a different company, usually one the person left, so do not re-send to it.
  6. Fall back for misses. If the first call has no work address, add a second HTTP column that calls GET /v2/people/email/work with the profile URL. Gate it with an "Only run if" formula on an empty first result (Clay docs, September 2026).
  7. 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).

text
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_url

Test the same call from a terminal with a placeholder address.

bash
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:

bash
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 fieldClay columnNote
data.contact_data.contact_emails[].emailNew work emailTake the entry with type of work.
data.contact_data.contact_emails[].statusNew email statusSend to verified and catch_all_valid only.
data.contact_data.contact_current_experiences[].company_nameNew companyCompare with the bounced domain to confirm a move.
data.contact_data.contact_current_experiences[].job_titleNew titleUse it to rewrite the opener, see email personalization.
data.profile_data.profile_urlProfile URLInput for the fallback call.
meta.creditsRecords usedFor 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

SymptomCauseFix
No HTTP API columnClay Free or Launch planThe column starts on Growth (Clay pricing, September 2026). Or run the calls from a script.
401 on every rowWrong headerUse x-api-key, not Authorization.
400 on some rowsBlank or malformed emailAdd an "Only run if" check that the cell is not empty.
404 on some rowsLeadOcean holds nothing for that addressExpected and free. Try the fallback or drop the row.
Only a work_other address returnsThe person moved, no new work email heldDo not send. Run the fallback.
402 mid-runThe 1,000 free records are spentMove to Solo or Agency, or stop the run.
429 errorsOver 5 requests a second on FreeLower 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 →