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
- Import your leads. Add a column named
Emailwith one address per row. Remove duplicates first. - Add an HTTP API column. Method POST, URL
https://api.leadocean.io/v1/people/enrich. - Send the address. The body holds
emailandreveal_email: true, which costs no extra record. LeadOcean accepts an email as the identifier (LeadOcean docs, September 2026). - Return the status. Ask for the email list. Each entry has its own
status. The top-levelemail_statusdescribes the best address held, which may not be yours. - Add a formula column. Find your address in
contact_emails[]and mark the row safe when itsstatusisverified. Treatcatch_all_validas a second tier you send in small batches. Holdcatch_all,risky,unknown,invalid,role,disposableandspam_trap. - Filter and export. Send only
Safe to sendrows 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).
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_emailsTest 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}'Send one identifier per call. Add an "Only run if" formula so blank cells are skipped.
Field mapping
| LeadOcean field | Clay column | Note |
|---|---|---|
data.contact_data.contact_emails[].status | Email status | The gate, for the entry that matches your address. One of 13 values. |
data.contact_data.contact_emails[].email | Address | Match it to your Email column. |
data.contact_data.email_status | Best-address status | If your address is missing and this is verified, consider the held address instead. |
meta.credits | Records used | For 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
| Symptom | Cause | Fix |
|---|---|---|
| No HTTP API column | Clay Free or Launch plan | The column starts on Growth. Or run the calls from a script. |
| 401 on every row | Wrong header | Use x-api-key, not Authorization. |
| 404 on some rows | LeadOcean holds nothing for that address | Expected and free. Verify it elsewhere or drop it. |
Many catch_all results | Domains that accept all mail | Send in small batches and watch bounces. |
| 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. |
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 →