You get a Clay table of companies. Each row holds five contacts, one per buyer persona, and five drafted emails. LeadOcean supplies the people, the email and its status. Clay's AI column writes the copy. Clay's own template for this job starts from a company list and enriches summaries and emails inside Clay (Clay template, September 2026). This recipe swaps in LeadOcean for the people.
It fits teams that sell to a buying group, not one title. If you only need one contact per account, see the Clay integration.
How it works
- Create a LeadOcean key. Sign up at app.leadocean.io/register. The free plan gives 1,000 records, once, with no card.
- Add a Domain column. One company per row, with the website domain such as
acme.com. - Add five search columns. Each is an HTTP API column that calls
POST /v1/people/searchwith the domain and one persona's titles, limit 1. Name them for the persona, for exampleSales lead. - Add five enrich columns. Each takes the
person_idfrom its search row and callsPOST /v1/people/enrichwithreveal_emailtrue. Set "Only run if" so it skips rows where the search came back empty. - Add one AI column per persona. Give it the persona, the company and the person's job title, and ask for a four-sentence email in a different voice per persona. Clay's template does this with writer styles.
- Run five rows first. Check that every persona resolves and that empty personas leave the draft blank.
Configuration
Clay's HTTP API column takes a method, URL, headers, a JSON body and field paths (Clay docs, September 2026). The search column for the sales persona looks like this. /Domain is Clay's column reference.
Method: POST
URL: https://api.leadocean.io/v1/people/search
Headers: x-api-key: <your LeadOcean key>
content-type: application/json
Body: {
"domain": ["/Domain"],
"jobLevel": ["VP", "Director"],
"jobFunction": ["Sales & Business Development"],
"limit": 1
}
Field paths to return:
dataTest the same request in a terminal first. The enrich step then runs per person_id.
curl -X POST "https://api.leadocean.io/v1/people/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{"domain":["acme.com"],"jobLevel":["VP","Director"],"jobFunction":["Sales & Business Development"],"limit":1}'
curl -X POST "https://api.leadocean.io/v1/people/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{"person_id":"<person_id from the search>","reveal_email":true}'Change jobLevel and jobFunction, or swap in a title array, for the other four personas. Each search row carries its id at meta.source_ids.person_id (LeadOcean OpenAPI, October 2026). Return data and pull that value from the first row with a Clay formula column. Like the other filters, domain takes an array of strings.
Field mapping
| LeadOcean field | Clay column | Note |
|---|---|---|
data[0].meta.source_ids.person_id | Persona 1 ID | Pulled by formula. The only value you need from the search. |
data.contact_data.email_status | Persona 1 email status | Draft only when it is verified or catch_all_valid. |
data.contact_data.contact_emails | Persona 1 emails | Pick the work entry in a Clay formula. |
data.contact_data.contact_current_experiences | Persona 1 role | Holds company_name and job_title for the AI prompt. |
Repeat for personas 2 to 5.
Cost at 10,000 rows
At 10,000 companies the recipe makes 100,000 HTTP calls: 50,000 searches and up to 50,000 enrichments. A search returns 1 record per person and a miss is a 404 that costs nothing (LeadOcean docs, September 2026).
LeadOcean. Free covers 1,000 records once, about 100 companies. Solo at $97 a month allows 50k enrichments a week and 500k search records a week, so the run fits in one week on 50 requests a second. Agency at $497 a month raises both.
Clay. The HTTP API column needs Growth or Enterprise. Each call uses one Action, so 100,000 calls need 100,000 Actions (Clay pricing, September 2026). Each AI run is one more Action, plus Data Credits unless you connect your own AI key (Clay docs, October 2026). The 50,000 drafts bring the total to 150,000 Actions. On Growth's monthly grid that is the 200,000 Action tier at $850 plus $290 for 6,000 Data Credits, or $1,140 a month billed monthly.
Cheaper path: run 2,000 companies. That is 20,000 calls and 10,000 drafts, 30,000 Actions, inside the 40,000 Action Growth entry tier at $495 a month.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| HTTP API column missing | Free or Launch plan | HTTP API is Growth and Enterprise (Clay pricing, September 2026). Import a CSV from LeadOcean instead. |
| Search column is empty | No person held for that persona at that domain | Expected. Widen jobLevel or add a title list. |
| Enrich returns 400 | Both person_id and another identifier sent | Send only person_id. |
| 429 on big runs | Over your plan's requests per second | Lower the column rate limit. Free allows 5 a second, Solo 50, Agency 200. |
| Drafts for bad addresses | No status gate | Run the AI column only when email_status is verified or catch_all_valid. |
FAQ
Can I write the emails in LeadOcean?
No. LeadOcean returns data. It has no sequencer or AI writer, so the drafting happens in Clay or your own prompt.
How do I keep the five emails from sounding alike?
Give each AI column its own persona, pain point and voice. Draft from the person's job title, not a shared template. See how to personalize outbound emails.
Will these emails reach the inbox?
Only with clean sending. Read email_status before you send and set up DMARC first (DMARC for outbound). LeadOcean gives no refund for bounces.
Where do I send the drafts?
Push them to your sequencer. Outbound email tools explained compares the options.
Related: Clay integration, pricing. Back to all integrations.
Find five personas per account. Start free.
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →