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=... curlandjq.- 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.
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.
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.
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.
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.
| Question | Why 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.
| Limit | LeadOcean |
|---|---|
| Rate per account | 5 a second on Free, 50 on Solo, 200 on Agency, 10,000 on Platform |
| Export rows per request | 50,000 |
| Export rows per day | 500,000 |
| Search rows per page | 100 |
| Rows per search | 10,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.
| Measure | Value |
|---|---|
Mailable people (verified, catch_all_valid, catch_all) | 5,574 |
| Same filters, no email filter | 18,800 |
| Distinct employers behind the mailable people | 3,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:
{
"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
| 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 requests a second on Free, 200 on Agency | Wait for Retry-After, then retry |
| 402 | The 1,000 free records are spent | Move to Solo ($97 a month) or Agency ($497 a month) |
| Empty results | A filter value is not an exact enum string, such as vp in jobLevel | List the values with /v1/enums/job_level and copy one |
meta.depthCapped is true | One search pages through 10,000 rows at most | Split the search into narrower filters |
| Export refused | The request is over 50,000 rows or the 500,000 a day ceiling | Split 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?
- 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 →