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

How-to guide

How to Pull Each B2B Data Type From an API (LeadOcean)

Four data types, four queries, one free key. Real requests, a live count and the response shape.

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

B2B data comes in four types you can query today: firmographic, contact, technographic and career history. Each answers a different question, and each is one filter group in a search request.

This guide shows the query for each type, a live free count, and the shape of what comes back. Intent data is out of scope here.

TL;DR

  • Four types, four requests: firmographic and technographic filters narrow companies, contact data reaches the person, career history explains who they are.
  • Time: about 15 minutes. Cost: 5 LeadOcean records, because counts are free and you pull only 3 sample rows, 1 person enrichment and 1 company enrichment.
  • Size every list with a free count first. Pull records only when the number looks right.

Prerequisites

  • A LeadOcean account. The Free plan ($0, 1,000 records for life, no card, 5 requests a second) covers this guide. Start at pricing.
  • An API key, exported as $LEADOCEAN_API_KEY.
  • curl and jq, or any HTTP client. Requests go to https://api.leadocean.io with the header x-api-key.
  • Optional: the hosted MCP server at https://api.leadocean.io/mcp for the free count tools.
bash
export LEADOCEAN_API_KEY="your_key_here"

Step 1: Know the four types

Each type is a group of fields on a person or company record. Pick the type by the question you need answered.

TypeQuestion it answersExample fieldsLeadOcean filter
FirmographicIs this company a fit?industry, headcount, HQ countryindustry, employeeRange, hqCountry
ContactWho do I reach, and how?title, work email, email status, phonejobLevel, jobFunction, emailStatus
TechnographicWhat do they run?detected tools by categorytechnologyCategories, technologies
Career historyWho is this person?past roles, education, certificationsreturned by person enrich

Technographic data covers about 7.8M crawled sites, so a company with no crawl has no tech fields. Treat an empty tech filter result as "not crawled", not "uses nothing".

Step 2: Check exact filter values

Enum filters take exact strings. A wrong value returns an empty result, not an error. Look values up first, for free.

bash
curl -s "https://api.leadocean.io/v1/enums" \
  -H "x-api-key: $LEADOCEAN_API_KEY" | jq 'keys'

In an MCP client, ask: "List the job_level values with leadocean_list_enum_values." Job levels are C-Team, VP, Director, Manager, Staff and Other. Job functions look like Sales & Business Development. Countries are ISO codes such as CA.

Step 3: Size a contact and firmographic list for free

Add count=true as a query parameter and send limit 1. No records are spent and data comes back empty.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["CA"],
    "limit": 1
  }' | jq '.meta'

meta.total is capped at 100,000. The MCP tool leadocean_count_leads takes the same filters and returns the total, plus how many employers the people span (distinctCompanies).

Step 4: Add a technographic filter

Technographic data filters people by what their employer's site runs. Use a category name from tech_category, such as CRM, or a tool name under technologies.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jobLevel": ["C-Team"],
    "employeeRange": ["51-200"],
    "technologyCategories": ["CRM"],
    "limit": 1
  }' | jq '.meta'

This stacks a firmographic filter (employeeRange), a contact filter (jobLevel) and a technographic one in a single request. That stacking is the point of keeping the types in one record.

Step 5: Pull a small sample

Once the count looks right, pull 3 rows. Search body is flat JSON, filters are arrays, limit runs 1 to 100, and you page with cursor.

bash
curl -s -X POST "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": ["CA"],
    "limit": 3
  }' | jq '.data[0]'

This spends 3 records. Each row carries has_email and email_status as flags, not the address. The MCP count tool defaults to verified, catch_all_valid and catch_all; add emailStatus to the search body to pull the same set.

Step 6: Enrich one person and one company

Enrichment takes exactly one of linkedin_url, email, phone or person_id. Use the person_id a search row carries at meta.source_ids.person_id (digits only).

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 '{"person_id": "123456789", "reveal_email": true}'

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

Person enrich returns career history in resume_data: past roles in experiences[], plus educations[], certifications[] and awards[], each when held. Past employers carry no company_id yet. A company comes back as company_data, company_detected_technologies and company_metrics. A lookup that finds nothing is a 404 and costs nothing. These two calls spend 2 records.

What you get

Live counts from the free leadocean_count_leads tool, run on 2026-10-21. Both counts are mailable (verified, catch_all_valid or catch_all email), which is the tool's default.

QueryMailable peopleAll matching peopleEmployers
jobLevel VP, jobFunction Sales & Business Development, country CA5,57418,8003,873
jobLevel C-Team, employeeRange 51-200, technologyCategories CRM2,1259,183519

Response shape from the API reference, with placeholder values:

json
{
  "success": true,
  "data": {
    "profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "VP Sales at Acme" },
    "contact_data": {
      "has_email": true,
      "email_status": "verified",
      "email_type": "work",
      "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": { "schema": "leadocean.person.v1", "fetched_at": "2026-10-01" }
  }
}

The four blocks (profile_data, contact_data, resume_data, meta) follow the person schema in the enrich docs. Check exact names there before you map them into a database.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerRe-export $LEADOCEAN_API_KEY and check there is no trailing space.
429Above the plan's rate limit (5 a second on Free, 200 on Agency)Back off for the Retry-After seconds. Batch with limit 100.
402The 1,000 Free records are spentUpgrade to Solo ($97 a month) or Agency ($497 a month).
Empty resultsA bad enum value, such as Vice President for jobLevelLook the value up with /v1/enums or leadocean_list_enum_values.
Tech filter returns few rowsThe employer site was not crawledDrop the tech filter for coverage, or accept the crawled subset.
Export refusedOver 50,000 rows a request or 500,000 a daySplit the export. Bulk CSV export is not on Free.

FAQ

What are the main B2B data types?

Firmographic (company facts), contact (people and how to reach them), technographic (tools a company runs) and intent (research signals). This guide covers the first three by filter, plus career history, which comes back from person enrich.

Which type should I buy first?

Contact data, filtered by firmographics. A good title and company size cut gets you a list; technographics narrow it further. Count each combination before you pull records.

How many records does a count cost?

None. Counts, filter lookups and enum lookups are free. Only people or companies returned to you count as records.

Can I compare providers by data type?

Yes. See the best B2B databases and the UK provider roundup. For definitions and why each type matters, read the B2B data overview.

Run your first B2B data query free

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

Get your free API key →