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

How-to guide

How to Buy B2B Data (A Buyer's Guide With Real Queries)

Six tests you can run against any people and company data API before you sign. Size the list, sample rows, test email status, price the volume, check the limits.

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

Buy B2B data by testing it, not by reading a feature grid. Six tests tell you whether a vendor holds your list, how clean it is and what it costs at your volume. The queries below run against LeadOcean, and the same six tests work on any vendor.

Examples use placeholders (Acme, acme.com, Jane Doe). Swap in your own filters.

TL;DR

  • Make every vendor answer six tests: coverage of your list, row quality, email status, cost at volume, rate and export limits, and the miss rule.
  • Free vendors and free calls come first. A count, an enum lookup and a failed enrichment should cost nothing.
  • Takes about 30 minutes and spends 12 of the 1,000 free LeadOcean records.

Prerequisites

  • A LeadOcean account and a key from app.leadocean.io. The Free plan works: no card, 1,000 records for life.
  • The key in your shell: export LEADOCEAN_API_KEY=...
  • curl and jq.
  • Your ideal customer profile written as filters: title or job level, function, country, industry, size.

All requests go to https://api.leadocean.io with the header x-api-key.

Step 1: Size your exact list for free

Ask the vendor how many people match your profile before you pay for one row. A good API answers with an exact number and the number of employers behind it.

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 | {total, totalIsExact, distinctCompanies}'

Send count=true as a query parameter, not in the body, with limit 1 in the body. The body rejects unknown fields. meta.total is capped at 100,000, so a larger list shows as a floor.

Step 2: Check the filters are real

Filter depth decides whether you can describe your buyer. Count the filters, then check the values are exact strings you can reuse.

bash
curl -s https://api.leadocean.io/v1/filters -H "x-api-key: $LEADOCEAN_API_KEY"
curl -s https://api.leadocean.io/v1/enums/job_level -H "x-api-key: $LEADOCEAN_API_KEY"

LeadOcean lists 50 people filters and 34 company filters. Job levels are C-Team, VP, Director, Manager, Staff and Other. Seniority is lowercase (vp, director). Mixing the two returns an empty list, not an error.

Ask every vendor the same thing: are enum values documented, and does a bad one fail loudly?

Step 3: Pull a sample and score the rows

Take 10 rows and read them as a buyer. Check the fields your team will actually use: title, employer, location, email status and email type.

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"],
    "emailStatus": ["verified"],
    "emailType": ["work"],
    "limit": 10
  }'

Search is a flat JSON body, filters are arrays, and limit runs 1 to 100. Page with cursor. A search pages to 10,000 rows, and then meta.depthCapped is true. Narrow the filters instead of walking the index.

Score 10 rows by hand. How many have the right employer, a current title and a work address? Ten is small, but a vendor that fails at ten will not recover at ten thousand.

Step 4: Test email status and the check date

A status without a date is half a claim. Enrich one sampled person by person_id and read each address.

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":"1234567890","reveal_email":true}' \
  | jq '.data.contact_data.contact_emails[] | {email, type, status, verified_batch_date}'

Enrich takes exactly one of linkedin_url, email, phone or person_id. There is no name plus domain lookup, so search by domain first.

Then ask about phones. GET /v2/people/phone returns numbers, and a miss on that endpoint still costs one record. Know each endpoint's miss rule before you budget. A person that enrich cannot find is a 404 and costs nothing.

LeadOcean does not refund bounces. Read email_status before you send, and decide which statuses you accept.

Step 5: Price it at your volume

Model the cost for the list you sized in Step 1, not for the plan on the pricing page. Vendors meter in credits, seats or fair-use pace, and each behaves differently at 100,000 rows.

QuestionWhy it matters
Is the unit a credit, a row or a pace?Credits expire or run out. A pace slows the key and never stops it.
What does a miss cost?Some vendors bill an empty lookup.
Are phones and exports included?Often an add-on or a higher tier.
What is the list price at your volume?Never multiply a rate out. Ask for the number.

LeadOcean has no credits. Free is $0 for 1,000 records for life. Solo is $97 a month for one person. Agency is $497 a month for teams, with 200 requests a second and 5 keys. Platform is $1,997 a month for products that embed the data. Every plan has the same data and features, phones included. Bulk CSV export starts on Solo. See pricing.

Step 6: Check rate and export limits

Limits decide whether the data fits your pipeline. Ask for the rate per second, the export ceiling and the daily cap, and check them against your plan.

LimitLeadOcean
Rate per account5 a second on Free, 50 on Solo, 200 on Agency, 10,000 on Platform
Export rows per request50,000
Export rows per day500,000
Search rows per page100
Rows per search10,000 (meta.depthCapped)

Bulk CSV export is not on Free. It is also in the app: the Exports page has a filter builder, a column picker and a price preview before you download.

What you get

Count run on 2026-10-21 with the free leadocean_count_leads tool for jobLevel VP, jobFunction Sales & Business Development, country CA. No rows were returned and no records spent.

MeasureValue
Mailable people (verified, catch_all_valid, catch_all)5,574
Same filters, no email filter18,800
Distinct employers behind the mailable people3,873

The 5,574 figure is a mailable count, not a filter-only count. Without an email filter the same query matches 18,800 people. Know which number your list is built on.

Response shape from the API reference, placeholder values:

json
{
  "contact_data": {
    "has_email": true,
    "email_status": "verified",
    "email_type": "work",
    "contact_emails": [
      {
        "email": "jane.doe@acme.com",
        "type": "work",
        "status": "verified",
        "verified_batch_date": "2026-09-20"
      }
    ]
  }
}

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerRe-export $LEADOCEAN_API_KEY and check the header name
429Above the plan's rate limit: 5 requests a second on Free, 200 on AgencyWait for Retry-After, then retry
402The 1,000 free records are spentMove to Solo ($97 a month) or Agency ($497 a month)
Empty resultsA filter value is not an exact enum string, such as vp in jobLevelList the values with /v1/enums/job_level and copy one
meta.depthCapped is trueOne search pages through 10,000 rows at mostSplit the search into narrower filters
Export refusedThe request is over 50,000 rows or the 500,000 a day ceilingSplit the export by filter and spread it over days

FAQ

What should a B2B data buyer's guide test first?

Coverage of your own list. A vendor's total database size says little about your profile, so run an exact count with your filters before anything else.

How many records does this evaluation spend?
  1. Ten sample rows, one enrichment and one phone lookup. Counts, enum lookups and a failed enrichment are free.
Is a catch-all email safe to send to?

Not reliably. A catch-all domain accepts any address, so the check cannot prove the mailbox exists. Choose verified when bounce risk matters.

Can I size a company list the same way?

Yes. GET /v1/companies/count is free and the MCP tool leadocean_count_companies wraps it. Both return an exact total with breakdowns by industry, headcount band and HQ country.

Which plan should I start on?

Start on Free to run these tests. Pick Solo ($97 a month) for one person and Agency ($497 a month) for a team. For tools that compare enrichment vendors, see best company data enrichment tools, and for what to do with the data, see buyer's journey and intent data. Cleaning up parent-company fields in a CRM is covered in the HG Insights recipe. Read more in the B2B data quality guide.

Run the six tests on your own list before you buy

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

Get your free API key →