You get a pipeline where any Apify actor that outputs people, such as a profile or search scraper, ends with a clean list: name, current role, company and a work email with a status. Apify finds the profiles. LeadOcean fills in the contact data. The one requirement is that the actor's output has a LinkedIn profile URL, an email or a phone for each person, because LeadOcean enrich takes exactly one of those.
How it works
- Get a free key. Sign up at app.leadocean.io/register. No card, 1,000 records.
- Run your actor. Pick any actor in Apify Store that returns people and start it with your search input.
- Add a webhook. Under the actor's Integrations tab, add an HTTP request action on the run succeeded event (Apify docs, September 2026).
- Read the dataset. The webhook payload carries the run, including
defaultDatasetId. Your receiver pulls the rows fromGET /v2/datasets/{id}/items(Apify API, September 2026). - Enrich each row. Send the profile URL to LeadOcean and keep the response.
- Write the result. Save to a sheet, your CRM or a CSV. Run 20 rows first.
Apify says the receiver must answer 2XX, and a webhook call times out after 2 minutes (Apify docs, September 2026). Reply at once and do the enrichment after. Duplicate calls happen, so key your work on the run id.
Configuration
The webhook payload template, so the receiver gets only what it needs:
{
"runId": {{resource.id}},
"datasetId": {{resource.defaultDatasetId}},
"status": {{resource.status}}
}The two calls your receiver makes. Replace DATASET_ID and the profile URL.
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=1" \
-H "Authorization: Bearer $APIFY_TOKEN"
curl -X POST "https://api.leadocean.io/v1/people/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{"linkedin_url":"https://www.linkedin.com/in/jane-doe","reveal_email":true}'Send exactly one identifier per call. Two returns a 400 (LeadOcean docs, September 2026). reveal_email costs no extra record.
Field mapping
| LeadOcean field | Target field | Note |
|---|---|---|
data.profile_data.profile_full_name | Full name | Name as held on the profile. |
data.contact_data.contact_current_experiences | Current role | Holds job_title, company_name and company_domain. |
data.contact_data.contact_emails | Emails | A list. Take the work entry. |
data.contact_data.email_status | Email status | One of 13 values. Send only verified and catch_all_valid. |
data.resume_data.experiences | Past roles | Past titles and dates, when held. Past employers carry no company_id yet. |
Cost at 10,000 rows
LeadOcean costs $0 for the first 1,000 records, then $97 a month on Solo or $497 a month on Agency. A hit counts one record. A miss is a 404 and costs nothing. Solo covers 10k enrichments every 5 hours, so 10,000 rows fit in one run. There is no per-record price.
Apify has its own bill. Plans run Free at $0, Starter at $19 a month, Scale at $199 and Business at $999, billed monthly, with 10% off billed yearly. Compute is $0.2 per compute unit on Free and Starter (Apify pricing, September 2026). Each Store actor sets its own price model, so read the actor's page. No public 10,000-row price exists for an unnamed actor.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Webhook fires but nothing is enriched | Receiver took longer than 2 minutes to answer | Return 200 first, then work. |
| The same run is enriched twice | Apify can send a webhook more than once | Store the run id and skip repeats. |
| 400 from LeadOcean | Two identifiers in one call, or a blank URL | Send only linkedin_url and skip empty rows. |
| 404 for some rows | LeadOcean holds nothing for that person | Expected and free. |
| 402 mid-run | The 1,000 free records are spent | Move to Solo or Agency. |
| 429 errors | Over 5 requests a second on Free | Slow the loop and honor Retry-After. |
FAQ
Which actors work?
Any actor whose output includes a LinkedIn profile URL, an email or a phone for each person. Map that field to the single identifier you send.
Can I skip the receiver?
Not with a webhook alone. The payload holds the run, not the rows, so something has to read the dataset and call LeadOcean.
Does a miss cost anything?
No LeadOcean record. Your Apify actor run is billed as usual.
Do I need a card to test it?
No. The free plan has no card and 1,000 records, one-off.
Back to all integrations. For a no-actor version, see enrich any URL in Clay and scrape leads from the live web. For a single-profile case, see enrich a candidate from their GitHub. Plans are on pricing.
Put a work email on every profile your actor finds. Start free.
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →