Automate the jobs that start with a lookup: sizing a market, filling a blank CRM field, checking a stale contact. Those are API calls, so a scheduler can run them. Routing rules and territory design still need a human.
Most RevOps automation guides list ten ideas and stop. This one gives the request for each. Every example runs against https://api.leadocean.io with a key in the x-api-key header.
The ten steps fall into three groups. Steps 1 and 2 size and pull the audience. Steps 3 to 7 keep CRM records complete and current. Steps 8 to 10 map accounts and report on them.
TL;DR
- All ten workflows take about 45 minutes to run once, and under 10 minutes each to schedule.
- The walkthrough spends about 30 records. Counts, sizing and 404s are free.
- Send only to
verified,catch_all_validorcatch_allemails. Reademail_statusfirst.
Prerequisites
- A LeadOcean API key from app.leadocean.io. Free is 1,000 records, one-off, no card, 5 requests a second.
- The key exported as
$LEADOCEAN_API_KEY. curl,jqand any scheduler (cron is enough). Examples useacme.comand Jane Doe as placeholders.
export LEADOCEAN_API_KEY="paste-your-key-here"Step 1: Size the market before you build anything
Count first. A free count tells you whether a segment is worth a workflow. The MCP tool leadocean_count_leads takes the same filters as search and spends no records.
For companies, GET /v1/companies/count returns an exact total with breakdowns by industry, headcount band, HQ country, HQ state and NAICS.
curl -s "https://api.leadocean.io/v1/companies/count?hqCountry=US&employeeRange=51-200" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq '.'Run this weekly and store the total. A segment that shrinks or doubles is a signal worth a Slack message.
Step 2: Pull the ICP contact list on a schedule
Search returns up to 100 rows a page. Send a flat JSON body, filters as arrays, and follow the cursor.
curl -s -X POST https://api.leadocean.io/v1/people/search \
-H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
-d '{"title":["Head of Revenue Operations","VP Revenue Operations"],"country":["US"],"limit":25}' \
| jq '.meta, (.data | length)'One search pages to 10,000 rows. When meta.depthCapped is true there is no nextCursor. Narrow the filters instead of walking further.
Step 3: Enrich inbound leads on form fill
When a form lands, call enrich with the email. Enrich takes exactly one of linkedin_url, email, phone or person_id. A person we hold nothing for is a 404 and costs nothing.
curl -s -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"}' | jq '.data.contact_data.contact_current_experiences'Write the result to your CRM from the webhook handler. Skip the write on a 404.
Step 4: Backfill missing CRM fields nightly
Export the records with a blank title, phone or company size. Loop the ones you have a linkedin_url or person_id for. Phones and emails come back only with reveal_email true.
while read -r url; do
curl -s -X POST https://api.leadocean.io/v1/people/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
-d "{\"linkedin_url\":\"$url\",\"reveal_email\":true}" \
| jq -c '.data.contact_data | {title: .contact_current_experiences[0].job_title, phones: [.contact_phones[]?.phone]}'
sleep 0.25
done < missing_fields.txtThe sleep keeps you under 5 requests a second on Free. Agency allows 200.
Step 5: Find phone numbers only when a rep asks
A phone lookup costs a record even when it finds nothing. Pull phones on demand, not for the whole table. The endpoint is GET /v2/people/phone.
curl -s "https://api.leadocean.io/v2/people/phone?linkedin_url=https://www.linkedin.com/in/jane-doe-acme" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq '.'Trigger it from a CRM task or a button, so reps spend records on people they will call.
Step 6: Refresh stale contacts and catch job changes
Re-enrich by person_id every quarter. Since October 2026 enrich returns career history in resume_data: past roles, education and certifications. Compare the current role to your CRM title, and keep the past roles as context.
curl -s -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_SEARCH"}' \
| jq '.data | {now: .contact_data.contact_current_experiences[0], before: .resume_data.experiences[0:2]}'Past employers carry no company_id yet, so match them by name.
Step 7: Route leads by company size
Routing is logic, not data. Enrich the company, read the headcount, and pick an owner. Keep the rules in a table so RevOps edits them without a deploy.
curl -s -X POST https://api.leadocean.io/v1/companies/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
-d '{"domain":"acme.com"}' | jq '.'routes:
- when: employee_range in ["1-10", "11-50"]
owner: smb-pool
- when: employee_range in ["51-200", "201-500"]
owner: mid-market-pod
- default: enterprise-queueStep 8: Dedupe accounts by domain
Domains are the cleanest account key. Normalize every CRM account to its root domain, then group. Run the check in SQL or a script.
SELECT lower(regexp_replace(website, '^(https?://)?(www\.)?', '')) AS domain,
count(*) AS dupes
FROM accounts
GROUP BY 1 HAVING count(*) > 1;Merge the losers into the oldest record. Keep the merged ID list for audit.
Step 9: Map the buying committee for a target account
For each named account, list its people by domain. This endpoint stops at 10,000 rows.
curl -s "https://api.leadocean.io/v1/companies/acme.com/people?limit=50" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq '.meta'Filter to jobLevel values C-Team, VP and Director on the search endpoint when the company is large. Enum values are exact strings.
Step 10: Send a weekly pipeline report from an agent
The hosted MCP server at https://api.leadocean.io/mcp signs in with OAuth, so no key is pasted. It exposes 13 tools, and the counting tools are free. An agent can run the weekly sizing and post a summary.
Using LeadOcean, count US people with title "Head of Revenue Operations"
or "VP Revenue Operations" and compare with last week's total: [LAST_WEEK_TOTAL].
Use leadocean_count_leads only. Report the change and the distinct companies.Schedule the prompt weekly in your agent runner. See the Claude Code Salesforce guide and the HubSpot guide for the CRM write-back, and the best Claude skills for RevOps automation for ready-made agent steps. More guides are on the blog.
What you get
This is a real run of leadocean_count_leads on 21 October 2026. Filters: title "Head of Revenue Operations", "VP Revenue Operations" or "Director of Revenue Operations", country US. The default counts mailable addresses only.
{
"total": 1358,
"totalIsExact": true,
"totalAll": 2467,
"distinctCompanies": 1232,
"credits": 0
}total is mailable people (verified, catch_all_valid or catch_all). totalAll has no email condition. The call spent nothing.
A person enrich response with reveal_email true, response shape from the API reference, with placeholder values:
{
"success": true,
"data": {
"profile_data": { "profile_full_name": "Jane Doe" },
"contact_data": {
"has_phone": true,
"email_status": "verified",
"contact_current_experiences": [
{ "job_title": "Head of RevOps", "company_name": "Acme", "company_domain": "acme.com" }
],
"contact_phones": [{ "phone": "+1 415 555 0133" }]
},
"resume_data": { "experiences": [] }
},
"meta": { "schema": "leadocean.person.v1" }
}Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header | Re-export $LEADOCEAN_API_KEY and check the header name. |
| 429 | Above the plan's rate limit (5 a second on Free, 200 on Agency) | Honor Retry-After, add a sleep, or move up a plan. |
| 402 | The Free plan's records are spent | Free is 1,000 for life. Move to Solo ($97 a month) or Agency ($497 a month). Paid plans slow down at the fair-use pace instead of stopping. |
| Empty results | A bad enum value, such as vp where the filter wants VP | Check GET /v1/enums or leadocean_list_enum_values. |
| 404 on enrich | Nothing held for that person | Free. Try another identifier or skip the write. |
| Export stops short | Over 50,000 rows a request or 500,000 a day | Split the pull across requests and days. Bulk CSV is not on Free. |
FAQ
Which RevOps jobs are worth automating first?
Start with enrichment on form fill and the nightly backfill. They run daily, touch every lead, and fail loudly when wrong.
Does this need a sequencer or CRM from LeadOcean?
No. LeadOcean is a data API and hosted MCP server, plus an app with an Exports page. It has no sequencer, dialer, CRM or Chrome extension. You write results to the CRM you already run.
How many records does it cost?
A search or enrich spends one record per person or company returned. Counts, empty pages and 404s are free. See pricing for plan paces.
Can an agent run these instead of cron?
Yes for the read steps. The MCP server has 13 tools, and leadocean_count_leads and leadocean_count_companies are free. Keep CRM writes behind a reviewed script.
Automate your first RevOps workflow on real data
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →