No B2B database proves Japan depth from its public pages, so you measure it. Run the same 25 Japan contacts through four free tiers and count what comes back. This guide does that for LeadOcean, Apollo, Lusha and ZoomInfo's GTM AI.
TL;DR
- Build one list of 25 Japan contacts you know, then score each database on hit rate and email status. It takes about 45 minutes.
- LeadOcean sizes Japan for free with
count=true, and the 25 lookups spend at most 25 of your 1,000 free records. A miss is a free 404. - Apollo sizes Japan for 0 credits. Lusha and GTM AI need only their free tiers to test the same list.
Prerequisites
- A free LeadOcean key from app.leadocean.io, exported as
$LEADOCEAN_API_KEY. No card. - Free accounts at Apollo (
$APOLLO_API_KEY), Lusha and GTM AI (ZoomInfo's pay-as-you-go product). - 25 people you really sell to in Tokyo, Osaka, Nagoya or Fukuoka, each with a LinkedIn URL. Use your own list, not ours.
curl,jqand a spreadsheet.
Step 1: Build the test list
Save the 25 contacts as a CSV with one LinkedIn URL per row. The sample below uses placeholders.
name,linkedin_url,city
Jane Doe,https://www.linkedin.com/in/jane-doe-example,Tokyo
John Roe,https://www.linkedin.com/in/john-roe-example,OsakaMix seniority and company size. Include a few people at small firms, because that is where every database thins out. Add three columns to fill in later: found, email_ok and phone_ok.
Step 2: Size Japan on LeadOcean
A free count tells you how big Japan is before you spend a record. Send count=true as a query parameter with limit=1.
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 '{"country": ["JP"], "jobLevel": ["C-Team"]}' | jq '.meta | {total, totalIsExact, distinctCompanies}'The same count works from any MCP client. Connect https://api.leadocean.io/mcp, then ask:
Use leadocean_count_leads with country JP and jobLevel C-Team. Report the total and distinctCompanies.Step 3: Run the 25 contacts through LeadOcean
Enrich each LinkedIn URL and log the HTTP code. A 200 is a hit. A 404 means nobody matched and costs nothing. Send reveal_email to get the email and phone points.
tail -n +2 japan25.csv | while IFS=, read -r name url city; do
code=$(curl -s -o "out_$RANDOM.json" -w "%{http_code}" -X POST \
"https://api.leadocean.io/v1/people/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
-d "{\"linkedin_url\": \"$url\", \"reveal_email\": true}")
echo "$name,$code"
sleep 0.3
doneThe sleep keeps you under 5 requests a second on Free. Open the JSON files and note the email status and whether a phone is present. Judge on email_status, not on the presence of an address.
Step 4: Size and test Apollo
Apollo's people search costs 0 credits and returns total_entries. Filter with person_locations[], which takes countries and cities (Apollo API docs, September 2026). Pass the key in the x-api-key header (Apollo, September 2026).
curl -s -X POST "https://api.apollo.io/api/v1/mixed_people/api_search?person_locations[]=japan&per_page=1" \
-H "x-api-key: $APOLLO_API_KEY" -H "Content-Type: application/json" | jq '.total_entries'A free Apollo account must be registered with a work email to use this endpoint. Search shows at most 50,000 records, 100 a page, and returns no emails or phones. Enrichment is what spends credits: an email costs 1 and a phone 8 (Apollo API pricing, September 2026). Apollo Free gives 75 credits a month (Apollo pricing, September 2026). Enrich your 25 and log hits.
Step 5: Test Lusha and GTM AI on the same list
Neither needs code for a 25-row test. Use their free tiers and the same CSV.
Lusha Free: 40 credits a month, no card.
1 credit per email, 5 per phone.
25 emails = 25 credits, leaving 15 credits = 3 phones.
GTM AI Free: 1,000 data credits, no card.
Search and lookup are free. One data credit enriches one contact.
A record is charged once per 12 months.Both are cited from their own pages: Lusha pricing and API guide, September 2026, GTM AI pricing, September 2026 and GTM AI credit docs, September 2026. On GTM AI, run your Japan filters first because search is free, then spend credits only on your 25.
Step 6: Score the four
Count each column and divide by 25. Do not compare vendor totals. Each vendor defines a contact its own way.
import csv
rows = list(csv.DictReader(open("scores.csv")))
for db in ["leadocean", "apollo", "lusha", "gtm_ai"]:
found = sum(r[f"{db}_found"] == "y" for r in rows)
email = sum(r[f"{db}_email_ok"] == "y" for r in rows)
print(db, f"found {found}/25", f"usable email {email}/25")An email counts as usable only if the vendor marks it verified or catch-all valid. Pay for the one with the best usable-email rate on your list, not the biggest total.
What you get
This is the free LeadOcean count run on 2026-10-21 with leadocean_count_leads. It spent 0 records.
country JP, mailable (verified, catch_all_valid or catch_all): 330,993 people (exact), 39,621 distinct companies
country JP, all email statuses: 1,757,258 people
country JP, with a phone, any email status: 146,796 people
country JP, jobLevel C-Team, mailable: 33,225 people (of 140,820 across all email statuses)Japan is about 19% mailable by that count (330,993 of 1,757,258). A phone is on about 8% (146,796 of 1,757,258). That is the honest shape of the data, and your 25-contact score will show whether it holds for your titles.
An enrich hit has this shape, response shape from the API reference, with placeholder values:
{
"success": true,
"data": {
"profile_data": { "...": "Jane Doe, Acme" },
"contact_data": { "...": "present when reveal_email is true" },
"resume_data": { "...": "past roles, education, certifications" },
"meta": { "...": "source and fetch date" }
}
}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 a second on Free, 200 on Agency) | Honour Retry-After and keep the 0.3 second sleep |
| 402 | The 1,000 free records are spent | Move to a paid plan on the pricing page |
| Empty results | A bad enum value, such as Japan for country or CEO for jobLevel | Use JP and exact values from leadocean_list_enum_values |
| 404 on enrich | Nobody matched that LinkedIn URL | Count it as a miss. It costs nothing |
| Search stops early | One search pages to 10,000 rows (meta.depthCapped) | Narrow the filters by city or level |
FAQ
How many contacts do I need for the test?
Twenty-five is enough to rank four vendors, not to publish a rate. For a tighter read, run 100 and spend them across two months of free tiers.
Why not compare the vendor totals?
Each vendor counts a contact its own way, and most print a worldwide total with no Japan row. A hit rate on your own list is the only number that transfers to your buying.
Does LeadOcean cover Japanese-script names?
We make no claim on that. Put a few Japanese-script rows in your 25 and read what each database returns.
Can I run this from an AI agent?
Yes. The LeadOcean MCP server at https://api.leadocean.io/mcp has 13 tools, and leadocean_count_leads sizes Japan for free. Apollo and GTM AI also run MCP servers.
What does Japan cost at volume?
See what enrichment actually costs and the Japan provider ranking. LeadOcean paid plans start at Solo $97 a month.
Size your Japan audience free, then test your 25 contacts
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →