You get a job that finds people who match a filter, pulls a verified work email for each, and hands the address to the tool that sends your message. It needs two LeadOcean calls and no seat licence. The send step can be Gmail, SMTP or your sequencer.
How it works
- Trigger. Run the job on a schedule (cron, a workflow tool timer or a CI job). Once a day is enough for most lists.
- Search. Call
POST /v1/people/searchwith your filters. AddemailStatus: ["verified"]so you only pay for people you can mail. Page withcursor.
- Enrich. For each
person_id, callPOST /v1/people/enrichwithreveal_email: true. A person with nothing on file returns a 404 and costs nothing.
- Send. Pass the address and name to your sender. Skip anyone already contacted. LeadOcean does not send mail and has no sequencer.
Size the list first, then start small. Run the job on 25 rows, read the messages in your sender's drafts and only then switch on live sending. A bad filter costs records, and a bad template costs your sender's reputation. Send in batches rather than one burst, and log each address you have mailed so a rerun never repeats a message. To size the list for free, send the same search with count=true as a query parameter and limit 1.
Configuration
curl -s https://api.leadocean.io/v1/people/search \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"emailStatus": ["verified"],
"limit": 25
}'
curl -s 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_SEARCH", "reveal_email": true}'The search body is flat JSON. Filters such as country and jobLevel are arrays of strings, and limit runs from 1 to 100. Enum values are exact strings. Look them up with GET /v1/enums before you change a filter. Send the key in the x-api-key header.
Keep the two calls in separate steps. Search is metered at one record per person returned, and enrich is a second record, so a failed send never forces you to search again. Store the person_id and the revealed address, and retry only the send.
Field mapping
| LeadOcean field | Sender field | Note |
|---|---|---|
contact_data.contact_emails[].email | To | Present only with reveal_email: true. Best address first. |
profile_data.profile_first_name | First name merge tag | Fall back to a neutral greeting if empty. |
contact_data.contact_current_experiences[].job_title | Role merge tag | Use the first entry. |
contact_data.contact_current_experiences[].company_name | Company merge tag | Read the current role, not resume_data. |
contact_data.contact_emails[].status | Send filter | Send only verified. No refund for bounces. |
Cost at 10,000 rows
Free cannot finish this job. It holds 1,000 records for life, and search plus enrich spends two records per person, so it covers about 500 rows. Use it to test.
At 10,000 rows, use Solo at $97 a month. Solo allows 10k enrichments every 5 hours and 100k search records every 5 hours, so the run fits in one window. There are no credits and no overage invoice.
Your sender has its own cost and daily cap. Read them in the sender's own docs before you schedule 10,000 sends. LeadOcean plans are on /pricing.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| 404 on enrich | Nothing held for that person | Skip the row. It costs nothing. |
| 402 | Free records spent | Move to Solo. Free does not refill. |
| 429 | Above your plan rate (5 a second on Free, 50 on Solo) | Honour Retry-After. |
| Empty search | Enum value is not an exact string | Check GET /v1/enums. |
| Bounces | Status other than verified | Filter on emailStatus. See role-based emails. |
FAQ
Can LeadOcean send the emails?
No. It returns the data. The send step runs in Gmail, SMTP or your sequencer.
Can I do the same from a chat client?
Yes. The hosted MCP server at https://api.leadocean.io/mcp exposes leadocean_search_leads and leadocean_get_lead among its 13 tools. The send step still needs a tool you connect.
Is there a Salesforce version?
What if I only have an email and need the profile?
Enrich accepts an email as input. For the reverse case, see searching LinkedIn by email.
More recipes are in the integrations hub.
Automate your outbound list with a free API key
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →