Upload a list and Bastro normalizes it, collapses it to unique numbers, checks each one against live registries, and hands back a clean file, a flagged file, and the record of both.
Drag a CSV in, in whatever shape your dialer or CRM exported it. You confirm which column holds the phone number and which columns ride along; nothing is guessed silently.
Every number is then normalized to E.164 at the parsing boundary — one canonical form, so every check downstream compares like with like. A number formatted three different ways across your file is one number to Bastro.
Within a job, identical numbers are collapsed before any registry is queried — a number that appears 40 times in your file is checked once, and its verdict fans back out to all 40 rows in your report.
The scope is deliberate: dedupe lives inside the job, and nowhere else. Verdicts are never recycled across jobs or across customers, because a verdict is a statement about a number at a point in time — reusing last month's answer would quietly hand you stale data.
There is no mirrored litigator database sitting on our disks aging quietly. When your job runs, checks execute against vendor registries at that moment, through a vendor-agnostic adapter — so a verdict is as fresh as the registry the minute you pressed run, and swapping or adding a data vendor never changes your workflow.
| Scope | Flags | Backed by |
|---|---|---|
| TCPA litigator scrub | Known TCPA litigators and serial plaintiffs | Vendor registry, queried at job time |
| DNC scrub | Federal and state Do-Not-Call registrations | Vendor registry, queried at job time |
| Relocated number scrub | Reassigned, disconnected, and ported numbers | Vendor registry, queried at job time |
A finished job produces three artifacts: a summary, a clean file ready for your dialer, and a flagged file where every row states its scope, the registry that flagged it, and the reason it was flagged.
Verdicts are stored per job as the audit record, and your job history is retained. Six months from now you can answer "was this number checked, when, and what came back" with a file, not a recollection.
Scrubbing reduces measurable risk; it does not confer immunity. Querying the FCC's Reassigned Numbers Database carries a query safe harbor under FCC rules; litigator scrubbing carries none. See 47 CFR § 64.1200 for DNC obligations. Bastro provides data services, not legal advice.
Everything above is one authenticated request away: submit numbers and scopes, get verdicts back. API-key auth, rate-limited, same job-scoped dedupe, same per-job audit record.
POST /api/v1/scrub
authorization: Bearer ba_live_************
{
"scopes": ["litigator", "dnc", "relocated"],
"numbers": ["+13125550142", "+16465550178"]
}