API review

BetterContact API review

Waterfall aggregator that cascades 20+ data providers (RocketReach, Apollo, ContactOut, Datagma, PDL, Enrich.so, Prospeo, Hunter and more) to find verified work emails and mobiles, charging only for valid results; async API with webhooks plus Lead Finder and Company Finder search. Best for one-bill access to 20+ email/phone providers without holding their keys.

Verified 25 Oct 2026 · 9 endpoints listed

What a call costs

The actions you pay for, as BetterContact prices them in credits.

ActionCostPer
Valid work email (incl. Bouncer verification)1 creditper email found
Verified mobile phone10 creditsper mobile (Pro: only P1 'high propensity' numbers charged per Connect Intelligence)
Company Finder0.1 creditper company returned
Enrich lead profile0.1 creditper profile found
Enrich company profile0 creditsper call
Not found / undeliverable0 creditsper lead
Annual billing2 months free (pay 10, get 12)per year

Pricing, plan by plan

US dollars, as BetterContact's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Free tier 50 free credits on signup, no credit card (pricing page and app login page). The app signup page says 'Start free - 100 credits included'; unconfirmed which amount is granted because our signup was blocked.

Starter

$15/mo

billed monthly

200 credits/month

API included
Plan details

No phone verification, catch-all verification or Connect Intelligence on Starter

Pro 1,000

$49/mo

billed monthly

1,000 credits/month

API included

Pro 3,000

$149/mo

billed monthly

3,000 credits/month

API included

Pro 5,000

$199/mo

billed monthly

5,000 credits/month

API included

Pro 10,000

$399/mo

billed monthly

10,000 credits/month

API included

Pro 20,000

$799/mo

billed monthly

20,000 credits/month

API included
Show all 9 plansShow fewer plans

Pro 30,000

$1,199/mo

billed monthly

30,000 credits/month

API included

Pro 50,000

$1,999/mo

billed monthly

50,000 credits/month

API included

Enterprise

$799/mo

billed monthly

from $799/mo, above 20,000 credits, custom volume; BYOK supported

API included
Plan details

Custom bulk discounts

Rate limits

Per API key, across all endpoints together.

LimitStarter, free and legacy accounts under 1,000 monthly creditsPro and accounts from 1,000 monthly creditsHigher volumes
Limit100 requests/min200 requests/minOn request
More on limitsLess

429 with body 'Retry later'; back off exponentially (a client retrying at full speed can get the account blocked). Unknown/deactivated keys throttled to 5 requests per 5 minutes per IP. GET /account is exempt.

How to get an API key

BetterContact uses API key. The steps below follow BetterContact's own docs.

  1. Create a BetterContact account. API access starts on the Starter plan.
  2. app.bettercontact.rocks/api_requests; regenerate or deactivate there; keys are per user, credits pooled per organisation
  3. Send it with every request: header X-API-Key (NOT Authorization: Bearer, which returns 401); enrich_profile endpoints also accept api_key in the body.
  4. Make a first call: Submit up to 100 leads for waterfall email and/or mobile enrichment. Keep the key in an environment variable, never in the command.
    curl -X POST "https://app.bettercontact.rocks/api/v2/async" \
      -H "Authorization: Bearer $BETTERCONTACT_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{}'

Where the docs live

WhatWhere
Documentationdoc.bettercontact.rocks/quickstart
API referencedoc.bettercontact.rocks/llms.txt
OpenAPI specdoc.bettercontact.rocks/api-reference/openapi.json
llms.txtdoc.bettercontact.rocks/llms.txt
Base URLhttps://app.bettercontact.rocks/api/v2

Strengths and limits

Where it fits

  • One-bill access to 20+ email/phone providers without holding their keys
  • Mobile numbers with phone verification (Trestle, IPQS, internal) and Connect Intelligence scoring on Pro
  • Catch-all email verification (catch_all_safe / catch_all_not_safe) on Pro
  • Batch enrichment of up to 100 leads per call with webhook delivery
  • Search-and-enrich in one call: Lead Finder with enrich_email_address / enrich_phone_number

Where it falls short

  • Stacking inside another waterfall (it already calls Prospeo, Hunter, Apollo, PDL and others)
  • Phone enrichment on Starter without the phone add-on (402 rejected)
  • Verifying webhook origin cryptographically: webhooks carry no signature
  • Company Finder pipelines that need push delivery: Company Finder has no webhook

Worth knowing

  • Branch on body.status, never on HTTP code: GET endpoints answer 202 with an empty body while running; only status 'terminated' guarantees results
  • Submissions are not idempotent: retrying a POST that actually succeeded enriches and charges twice; check GET /account before resubmitting after a timeout
  • on_hold (balance hit zero mid-flight) resumes by itself after a top-up, so do not resubmit; but a Company Finder on_hold never resumes and must be resubmitted
  • 402 means either out of credits or feature not on plan (phone add-on, catch-all add-on); read message to tell them apart
  • Unknown request id: 406 on enrichment, 404 on Lead/Company Finder
8 moreShow fewer
  • Filter values not in the Taxonomies list (industries, technologies, seniority, departments, functions, revenue, funding rounds, countries) silently match nothing; Company Finder silently ignores exclude and unknown keys; company domain is case-sensitive
  • A Lead Finder search for one domain with limit 1 is rejected with 422; use /enrich_profile/company
  • credits_left / credits_consumed on Company Finder are decimal strings ('998.5')
  • Per-lead webhook custom_fields come back as an array of {name, value, position}, not the object you sent
  • Pricing page says 'No charge for catch-alls whatsoever', but the credits doc says catch-alls ARE charged when verify_catch_all is off, and catch-all verification is not on Starter
  • Rate limits rose from 60/min (our April 2026 copy) to 100 or 200/min by plan
  • Credit roll-over: the pricing page plan cards say 'capped at your subscribed credit amount' but the same page's example and FAQ say capped at 2x (5,000-credit plan holds max 10,000). Annual plans extend roll-over to 12 months. Source: bettercontact.rocks/pricing (verified 2026-10-25)
  • Free signup credits disagree in the vendor's own copy: 50 (pricing page, app login page) vs 100 (app signup page). Source: bettercontact.rocks/pricing; app.bettercontact.rocks/users/sign_up (verified 2026-10-25)

Our take

We left BetterContact out of an enrichment waterfall we built for a B2B data company: it is itself a multi-provider waterfall, so it overlapped the providers we already called, and the orchestration platform we used could run it only on the platform's own credits.

Who should use it

Use BetterContact for
One-bill access to 20+ email/phone providers without holding their keys
Look elsewhere for
Stacking inside another waterfall (it already calls Prospeo, Hunter, Apollo, PDL and others)

If BetterContact is not the answer

Other Enrichment tools in this directory, each with its own review.

Before you build

Four things to settle first, each read off BetterContact's own pages.

  • Confirm the API is on your planAPI access starts on the Starter plan. Free tier: 50 free credits on signup, no credit card (pricing page and app login page).
  • Keep the key out of your codeAPI key. It is sent as: header X-API-Key (NOT Authorization: Bearer, which returns 401); enrich_profile endpoints also accept api_key in the body.
  • Design around the rate limitPer API key, across all endpoints together.
  • Know the catch before you scaleBranch on body.status, never on HTTP code: GET endpoints answer 202 with an empty body while running; only status 'terminated' guarantees results

Want us to build it for you?

Tell us what you want BetterContact to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.

Read from bettercontact.rocks/pricing, doc.bettercontact.rocks/llms.txt and doc.bettercontact.rocks/api-reference/api_rate_limits. Verified 25 Oct 2026.

All 9 endpointsFor developers: method, path, what it does and what it costs.

Base URL: app.bettercontact.rocks/api/v2

Bulk and async: Up to 100 leads per POST /async; Lead Finder and Company Finder up to 200 results per page

Webhooks: Yes for /async and Lead Finder (not Company Finder). Sent once when the request reaches terminated; body identical to the GET payload; retried up to 5 attempts (10s, 2min, 3min, 4min). No signature or auth header: treat URL as secret and confirm via GET /async/{id}. Per-lead contact_webhook (push_contact_individually) is never retried.

9 endpoints
MethodPathWhat it doesCost
POSTasync/asyncSubmit up to 100 leads for waterfall email and/or mobile enrichment1 credit per deliverable email, 10 per verified mobile; 0 for undeliverable/not found; catch-alls charged unless verify_catch_all is on (then only catch_all_safe charged)
GETasync/async/{request_id}Fetch enrichment resultsfree
POSTasync/lead_finder/asyncSearch new leads by company + people criteria (include/exclude on every list filter)Search itself consumes no enrichment credits (free-request quota on lower plans); enrichment flags charge normal enrichment credits
GETasync/lead_finder/async/{request_id}Fetch Lead Finder resultsfree
POSTasync/company_finder/asyncSearch companies by firmographic, funding and hiring criteria (include only)0.1 credit per company returned, each page charged separately; no match free
GETasync/company_finder/async/{request_id}Poll Company Finder results (no webhook available)free
POST/enrich_profile/leadSynchronous single-person profile (title, seniority, location, LinkedIn, current company); no email or phone0.1 credit per profile found; 0 on 404
POST/enrich_profile/companySynchronous single-company profile (industry, headcount, HQ, description, keywords, LinkedIn)free
GET/accountOrganisation credit balancefree