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

Integration recipe

LeadOcean + Clay: keep your bounce rate under 2% by gating every lead on email status

Look up each lead in LeadOcean, read email_status, and send only the rows that are safe to mail.

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 checks every lead's email against LeadOcean and adds one column, Safe to send. Rows that are not safe never reach your sequencer. Clay's own template for this goal cleans names and writes copy (Clay template, September 2026). This recipe covers the part that drives bounces: the address itself. LeadOcean needs a free key. Clay's HTTP API column needs Growth or higher (Clay pricing, September 2026).

No tool guarantees a bounce rate. LeadOcean gives you the status. You decide the cutoff.

How it works

  1. Import your leads. Add a column named Email with one address per row. Remove duplicates first.
  2. Add an HTTP API column. Method POST, URL https://api.leadocean.io/v1/people/enrich.
  3. Send the address. The body holds email and reveal_email: true, which costs no extra record. LeadOcean accepts an email as the identifier (LeadOcean docs, September 2026).
  4. Return the status. Ask for the email list. Each entry has its own status. The top-level email_status describes the best address held, which may not be yours.
  5. Add a formula column. Find your address in contact_emails[] and mark the row safe when its status is verified. Treat catch_all_valid as a second tier you send in small batches. Hold catch_all, risky, unknown, invalid, role, disposable and spam_trap.
  6. Filter and export. Send only Safe to send rows to your sequencer. Track bounces on the first 200 sends, see email bounce rate.

Configuration

In Clay's body, /Email is the column reference, in quotes. Save x-api-key once as an HTTP API (Headers) account and select it, so the key stays out of the column (Clay docs, October 2026).

text
Method:   POST
URL:      https://api.leadocean.io/v1/people/enrich
Header account: LeadOcean (x-api-key)
Body:     { "email": "/Email", "reveal_email": true }
Field paths to return:
          data.contact_data.email_status
          data.contact_data.contact_emails

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

Send one identifier per call. Add an "Only run if" formula so blank cells are skipped.

Field mapping

LeadOcean fieldClay columnNote
data.contact_data.contact_emails[].statusEmail statusThe gate, for the entry that matches your address. One of 13 values.
data.contact_data.contact_emails[].emailAddressMatch it to your Email column.
data.contact_data.email_statusBest-address statusIf your address is missing and this is verified, consider the held address instead.
meta.creditsRecords usedFor auditing the run.

Cost at 10,000 rows

10,000 leads cost LeadOcean at most 10,000 records, and the first 1,000 are free.

LeadOcean. A hit is one record. A lead LeadOcean holds nothing for is a 404 and costs nothing. Free gives 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). LeadOcean does not refund bounces, so read email_status before you send.

Clay. Each HTTP API call uses one Action (Clay pricing, September 2026). 10,000 rows is 10,000 Actions. Growth includes 40,000 Actions a month at $495 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. Or run the calls from a script.
401 on every rowWrong headerUse x-api-key, not Authorization.
404 on some rowsLeadOcean holds nothing for that addressExpected and free. Verify it elsewhere or drop it.
Many catch_all resultsDomains that accept all mailSend in small batches and watch bounces.
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.

FAQ

Will this keep me under 2%?

It removes the addresses most likely to bounce. Your rate also depends on list age and sending setup. See why emails bounce.

Should I send to catch_all addresses?

Only in small batches. They accept mail at the server but the mailbox may not exist. Stop if bounces climb.

Can I clean a list I already have?

Yes. Follow how to clean an email list, then run this table on what remains.

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.

Check every address's status before you send. Start free.

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

Get your free API key →