Use case

Keep dialers off dead numbers.

Your reps' hours are the most expensive thing a stale "valid" wastes. Validate the list before the dialer sees it, and know exactly what each verdict was based on.

A dead number that passes validation still gets dialed — by a human, on payroll, logging a no-answer your forecast counts as pipeline. Multiply by every stale row in the CRM and "cheap" data is the most expensive line in the sales budget.
01

Upload the list

One POST /v1/bulk/phone with the raw CSV — or drag the file into the dashboard, no code. 10,000 rows per job on paid tiers; credits reserved per row, refunded for any row that errors.

02

Filter on the verdict

The results CSV gives valid, line_type and E.164 per row. Route mobiles to the dialer, landlines to a different cadence, invalids to the bin — before a rep touches any of them.

03

Wire it into the stack

A webhook fires when the job finishes (bulk.completed, HMAC-signed), or plug the MCP connector into your agent tooling. Same credits, same meter, every door.

curl -X POST "https://api.boundstone.io/v1/bulk/phone?country=US" \
  -H "authorization: Bearer bs_live_YOUR_KEY" \
  -H "content-type: text/csv" \
  --data-binary @call-list.csv
What this doesn't do yet, said plainly: today's phone tier is metadata-grade (format, region, line type — the same class of data every response discloses). Licensed carrier + ported-status data lands at launch; live HLR liveness is V2 at a published 5 credits. Each appears in checks.performed the day it's real — never before.

The arithmetic: a 10,000-row list costs 10,000 credits — half of Starter's monthly 20,000 at $79. That's $0.004 a number to keep the dead ones away from people you pay by the hour.

Try it without a key first — the homepage demo runs the same zero-cost checks live.

Early access — free tier is 250 credits/month, forever

Pre-launch — benchmark results and early API access. One email. We validate emails for a living — we're not going to spam yours.