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

How-to guide

How to Find the Most Accurate B2B Data Brand (Run a Same-Slice Bake-Off)

Published accuracy rankings are not comparable. Here is a bake-off you can run on any vendor in an afternoon, with the queries and the scoring sheet.

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

No B2B lead gen brand has the most accurate data in general. Accuracy depends on your region, your titles and how each vendor defines "verified". So test it. This guide runs a same-slice bake-off in about two hours.

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

TL;DR

  • Vendor accuracy claims use different definitions and are not comparable, so rank vendors on bounces and wrong-person rates from your own slice.
  • Pull the same 50-person slice from each vendor, send it, and score it. Work takes about 2 hours, then 3 days of waiting for bounces.
  • On LeadOcean this spends about 100 of your 1,000 free records. Counts and enum lookups are free.

Prerequisites

  • A LeadOcean 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=...
  • A trial or sample from each vendor you are comparing, and one sending domain you can afford to burn a few bounces on.
  • A spreadsheet. curl and jq for the queries below.

Step 1: Fix the slice before you touch any vendor

Pick one segment and write it down as filters. If two vendors get different filters, the test is void.

Use a segment you actually sell to. Here it is VPs of Sales in Canada. Resolve the enum strings first, because enum values are exact strings:

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

The job_level values are C-Team, VP, Director, Manager, Staff and Other. Job function is Sales & Business Development. Country is CA.

Step 2: Size the slice for free

Check that the slice is big enough to sample. A count call spends no records. Send count=true as a query parameter, not in the body:

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

The same sizing works from an assistant through the free leadocean_count_leads MCP tool. Note the emailStatus filter: it is the first place vendors differ, so set the same bar on every one.

Step 3: Pull 50 rows from LeadOcean

Page size is 1 to 100. Ask for 50 and keep the cursor if you need more:

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"],
    "limit": 50
  }' > leadocean-50.json

This spends 50 records. Do the same pull from each competitor with the closest filters they offer. Where a vendor cannot filter the same way, write that down: it is a result.

Step 4: Reveal the addresses and keep the vendor's own verdict

Search gives you who. To get the address and its status, enrich by person_id (each search row carries it at meta.source_ids.person_id) with reveal_email on. Revealing costs no extra record beyond the enrichment:

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": "PERSON_ID_FROM_SEARCH", "reveal_email": true}'

Record each row's status next to the address. Then check the date: verified_batch_date is the verification run the verdict came from. A null date means LeadOcean did not run the check itself. Ask every vendor for the equivalent.

Step 5: Send and score the sheet

Run every vendor's list through one independent verifier first, then send in small batches over 3 days from the same domain. Score these columns:

ColumnHow to fill it
VendorName and date pulled
Rows returnedOut of 50 requested
Rows with emailCount
Vendor-claimed validCount at the vendor's own "verified" bar
Independent verifier validCount
Hard bouncesFrom your sending tool
Wrong person or roleSpot check 20 profiles

The winner has the lowest hard bounce rate and the fewest wrong people. Break ties on how many rows came back. A vendor that returns fewer rows with fewer bounces can beat one that fills all 50, depending on what you need.

What you get

Counts for the slice, from the free leadocean_count_leads tool on 2026-10-21 (Canada, VP, Sales & Business Development):

FilterPeople matched
No email condition18,800
Default (verified, catch_all_valid or catch_all)5,574
emailStatus: verified only1,854

The 1,854 spans 1,392 distinct companies. The gap between 18,800 and 1,854 is why "how many contacts" is the wrong accuracy question: ask how many of them you can mail at your bar.

Response shape from the API reference (placeholder values, not a real person):

json
{
  "success": true,
  "data": {
    "profile_data": { "profile_full_name": "Jane Doe" },
    "contact_data": {
      "has_email": true,
      "email_status": "verified",
      "contact_emails": [
        {
          "email": "jane.doe@acme.com",
          "type": "work",
          "status": "verified",
          "verified_batch_date": "2026-09-20"
        }
      ]
    }
  },
  "meta": { "credits": 1 }
}

For the vendors themselves, see brands with excellent data accuracy. Also read best customer support and best customization options. Every guide is in the blog.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-keyCheck $LEADOCEAN_API_KEY is exported and sent as x-api-key
429Above the plan's rate limit (5 requests a second on Free, 200 on Agency)Honour Retry-After and slow the loop
402Free records spentCount first, narrow the slice, or move to Solo at $97 a month (pricing)
Empty dataAn enum value that is not an exact string, such as vp for jobLevelLook it up with GET /v1/enums/{name}
No nextCursor, meta.depthCapped trueOne search pages to 10,000 rowsNarrow the filters and run several searches
404 on enrichNobody matched that person_idNo charge. Pick another row

FAQ

Which brand has the most accurate B2B data?

None wins everywhere. The answer changes by country, seniority and industry. Run the bake-off on your segment and trust your bounce rate over any ranking, including ours.

How big should the sample be?

Fifty rows per vendor is enough to see large gaps in bounce rates. It is too small to separate vendors that land within a point or two. Run 200 rows if the vendors land close.

Is a vendor's verified label comparable to ours?

No. Each vendor sets its own bar and may count catch-all addresses as valid. That is why you re-verify every list with one independent tool before sending.

How fresh is LeadOcean data?

The dataset is refreshed monthly, and each record carries its own fetched_at date. Check that field on the rows you pull.

Do bounced emails get refunded?

No. LeadOcean gives no refund or credit for bounces, so read email_status before you send.

Test LeadOcean accuracy on your own segment

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

Get your free API key →