Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to See What CRM Enrichment Adds to Your Sales Data (With the LeadOcean API)

Run 25 CRM contacts through an enrichment API, diff the fields, and decide what is worth writing back.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

TL;DR

  • Enrichment adds four kinds of fields to a CRM record: person (title, seniority, contact data), company (size, industry, location), technology, and career history.
  • The test takes about 30 minutes and spends up to 50 records: 25 people and 25 companies, all inside the Free plan's 1,000.
  • You diff the output against your CRM and write back only the fields that change a routing or scoring rule.

Most CRM records start as a name, an email and a domain. That is enough to create a contact. It is not enough to route a lead, score fit or write a relevant first line.

This guide shows what an enrichment API adds to such a record. Try it on a small sample before you pay for anything.

Prerequisites

  • A LeadOcean API key from the free plan, stored as $LEADOCEAN_API_KEY. No card needed. Free gives 1,000 records for life and 5 requests a second.
  • A CSV export of 25 CRM contacts with email and domain columns.
  • curl and jq.

Step 1: Size the gap before you spend anything

Count how many people you could reach for your target profile. The count is free and spends no records.

The MCP tool leadocean_count_leads takes the same filters as search. Here is a run from 21 October 2026:

json
{
  "jobLevel": ["VP"],
  "jobFunction": ["Sales & Business Development"],
  "country": ["CA"]
}
json
{
  "total": 5574,
  "totalIsExact": true,
  "totalAll": 18800,
  "distinctCompanies": 3873
}

total counts people with a verified, catch_all_valid or catch_all email. totalAll is the same filters with no email condition. For companies, GET /v1/companies/count is the free equivalent.

Step 2: Enrich one person by email

Enrichment takes exactly one of linkedin_url, email, phone or person_id. Add reveal_email only if you need the address back.

bash
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"}'

A person we hold nothing for returns 404 and costs nothing. A hit costs one record.

Step 3: Look up the company by domain

Company enrich takes a domain (or a company linkedin_url).

bash
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"}'

The response has three parts: company_data (firmographics), company_detected_technologies and company_metrics. A hit costs one record. A domain we hold nothing for is a 404 and costs nothing.

Tech data covers about 7.8M crawled sites, so an empty tech block can mean "not crawled", not "not used". To target by stack, search with technologyCategories (for example ["CRM"]) or technologies.

Step 4: Run the 25-contact sample

Loop over your CSV and save every response. Stay under 5 requests a second on Free.

bash
tail -n +2 sample.csv | while IFS=, read -r email domain; 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 "{\"email\": \"$email\"}" > "out/person_$email.json"
  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\": \"$domain\"}" > "out/company_$domain.json"
  sleep 0.5
done

Misses are free for people and companies. Check GET /v1/usage afterwards to see what the run spent.

Step 5: Diff against the CRM and pick what to write back

Count the fields that were empty in your CRM and filled by the response.

bash
for f in out/person_*.json; do
  jq -r '[input_filename,
    (.data.contact_data.contact_current_experiences[0] != null),
    ((.data.resume_data.experiences // []) | length)] | @csv' "$f"
done

Write back a field only if a rule reads it. Seniority and job function feed routing. Headcount and industry feed ICP scoring. Career history feeds personalization, not routing.

What you get

Enrichment adds four groups of fields. This is the response shape from the API reference, abbreviated, with placeholder values:

json
{
  "success": true,
  "data": {
    "profile_data": { "profile_full_name": "Jane Doe" },
    "contact_data": {
      "has_email": true,
      "has_phone": true,
      "email_status": "verified",
      "contact_current_experiences": [
        { "job_title": "VP Sales", "company_name": "Acme", "company_domain": "acme.com" }
      ]
    },
    "resume_data": {
      "experiences": [
        { "job_title": "Director of Sales", "company_name": "Example Co" }
      ],
      "educations": [],
      "certifications": []
    },
    "meta": { "fetched_at": "2026-10-01" }
  }
}

contact_emails[] and contact_phones[] appear inside contact_data only when you send reveal_email.

GroupWhat it fillsRule it feeds
PersonCurrent title, job level, function, email, phoneRouting, owner assignment
CompanyHeadcount, industry, headquartersICP score, territory
TechnologyDetected tools by name or categoryIntegration-led targeting
Career historyPast roles, education, certificationsFirst-line personalization

Past employers carry no company_id yet, so you cannot join career history to company records.

The dataset is refreshed monthly, with a fetched_at date on each record. Check that date before you overwrite a CRM field that a rep edited by hand.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerRe-copy the key from app.leadocean.io, check $LEADOCEAN_API_KEY is exported
404 on enrichWe hold nothing for that inputFree. Try linkedin_url instead of email, or search by domain and enrich by person_id
429Above the plan's rate limit (5 a second on Free, 200 on Agency)Honor Retry-After, or add a sleep
402Records spent (Free is 1,000 for life)Check GET /v1/usage, then move to a paid plan
Empty search resultsEnum value spelled wrong (vp instead of VP)List valid values with leadocean_list_enum_values
Export stopsBulk CSV export is not on Free; paid files cap at 50,000 rows a request and 500,000 a daySplit the export or use Solo or Agency

FAQ

What does CRM enrichment add to a record?

It fills fields the CRM does not hold: job level and function, company headcount and industry, detected technology, phone and email, and career history. Which ones matter depends on the rules you run.

Does enrichment overwrite my existing fields?

Not unless your write-back does. Fill empty fields first. Overwrite only when the record's fetched_at is newer than your CRM edit.

How many records does the test cost?

One per person or company returned. A miss, a count and an empty page cost nothing. The 25-contact test spends at most 50 records.

Is there a CRM plugin?

No. LeadOcean is an API and an MCP server, plus an app with an Exports page for CSV download. You write the fields back with your CRM's own API or import.

What next, and what does it cost at volume?

Read what data enrichment is and the CRM enrichment tool comparison. For free and paid options see free and paid CRM enrichment tools. Plans are on /pricing.

Enrich 25 of your own contacts and see which fields change

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →