Upload a messy list. Download SMS-ready rows.

Upload CSV, TSV, XLSX, TXT, or JSON and get back full results plus a shortlist of rows safe to send to your SMS tool. Duplicates and malformed rows cost zero credits.

Full results + SMS-ready CSVs No credit goes negative CSVs encrypted at rest
/v1/lookup · live
processing
15:42:17+44 7400 123 456+447400123456mobile · EE
15:42:17+1 415 555 2671+14155552671mobile · Verizon
15:42:18(415) 555 2671+14155552671duplicate · free
15:42:18+44 20 7123 4567+442071234567landline · BT
15:42:18abcmalformed · free
AES-256
Encrypted at rest + in transit
AES-256 in S3, TLS 1.2+ over the wire.
Zero AI
Your data never trains a model
No third-party LLM. Phone numbers masked in every log.
99.5%
99.5% uptime target
Public status page. Real, posted refund policy.
Auto-refund
Refund on every hard-fail
A lookup hard-fails? Your credit lands back instantly.

Messy in.Structured out.

Drop any export, including odd formats, duplicates and malformed entries. Get back one file with every number normalised, typed, carrier-matched, and flagged for SMS.

raw_list.csv· 6 rows
Input
#phone
1 07400123456
2(415) 555-2671 ext 12
3+1.415.555.2671
40044-20-7123-4567
51-800-555-1212
6n/a
Mixed formats, duplicates, malformed entries: exactly how exports arrive.
full_results.csv· 6 rows
Output
#e164typesms_readycarriernotes
1+447400123456mobile trueEE·
2+14155552671mobile trueVerizon·
3+14155552671mobile·Verizonduplicate
4+442071234567landlinefalseBTlandline
5+18005551212toll_freefalsen/atoll-free
6n/aunknown·n/amalformed
2 SMS-ready numbers, every row annotated, ready to send, filter, or hand off.
SMS-ready rowFlagged (duplicate or malformed, never billed)Kept but not SMS-able (landline / toll-free / VoIP)

Inspect the output before you sign up.

Download the exact sample files or open the browser preview to see which rows are kept, removed, or annotated. No account required.

Built for SMS teams. Priced for everyone else.

Four guarantees most cleaners can't make, because most of them are reselling someone else's API at a markup.

1 lookup = 1 credit. Never more.

Same phone in three different formats? Collapses to one paid lookup. Repeat numbers from a recent batch hit the cache, and cached lookups are free.

07400 123 456
+44 7400 123 456
(7400) 123 456
+447400123456· 1 credit

REST API + signed webhooks

Bearer-token API with per-key scopes and expiry. Webhooks signed with HMAC-SHA256, retried and redeliverable. Idempotency-Key supported.

POST /v1/lookup
POST /v1/lookup/bulk
GET  /v1/batches
GET  /v1/batches/:id

Spend cap that stops

Hard daily spend ceiling. No negative balance, even under contention. Refunds on hard-fails.

Async batch processing

Upload once, watch progress, then download full results, SMS-ready rows, call-ready rows, or a deduped export.

Cached lookups are free

Recently-cleaned numbers don't cost a credit when they repeat across batches. We serve them straight from cache.

For developers

The same product, behind a clean REST API.

Every web-app feature is also a /v1 endpoint. Bearer-token auth with per-key scopes and expiry. Signed webhooks for batch events with automatic retry and manual redelivery.

POST /v1/lookup, single number, same fields as the CSV
POST /v1/lookup/bulk, up to 100 numbers per call
Webhooks: batch.completed, batch.failed (HMAC-SHA256 signed)
Idempotency-Key, retry safely, never double-charged
Request
curl https://api.phonelistcleaner.com/v1/lookup \
  -H "Authorization: Bearer plc_xxx" \
  -d '{"phone":"+14155552671"}'
200 OK · application/json
{
  "e164":      "+14155552671",
  "country":   "US",
  "line_type": "mobile",
  "carrier":   "Verizon",
  "sms_ready": true,
  "cache":     "miss",
  "credit":    1
}

Upload to clean list in three steps.

01

Buy credits

Prepaid packs from $19. No subscription, no per-month minimum, no surprise auto-renewal.

02

Upload or API

Drop a file in the dashboard, or call /v1/lookup and /v1/lookup/bulk from your code.

03

Download or webhook

Download full results, SMS-ready rows, or filtered presets; automation can use batch.completed webhooks.

Prepaid packs. Everything included.

One credit cleans one number. Duplicates and malformed rows are free. Same features in every pack, pick the size that matches your list.

Small Clean
$19
2,500 credits · $0.0076 each
For a quick one-off list.
List Clean
$49
10,000 credits · $0.0049 each
For a typical contact list.
Bulk Clean
$149
50,000 credits · $0.0030 each
For regular cleaning jobs.
Large Clean
$249
100,000 credits · $0.0025 each
For large databases.
Best value
Pro Clean
$499
250,000 credits · $0.0020 each
Best value per credit.
Every pack includes
Same on every tier
  • REST API + Bearer auth
  • Signed webhooks (HMAC-SHA256)
  • Full, SMS-ready, and filtered CSV exports
  • Upload CSV, TSV, TXT, XLSX, or JSON
  • Cached lookups (free)
  • Line type, carrier, validity, country
  • Idempotency keys + retry-safe API
  • Daily spend cap protection
  • No subscription, no expiry

Need annual prepaid or a custom volume? Contact us.

Frequently asked

How do you keep the price low?

Local parsing catches obviously-bad rows before a paid lookup is ever made, deduplication collapses repeats to a single billed call, and cached lookups (from recent batches) are free. You only pay for valid, unique numbers we look up fresh.

Do you sell my list?

No. Your CSV is stored encrypted, served via short-lived signed URLs, and never visible to other customers. Phone numbers are masked in our internal logs.

What if a number fails?

If a lookup hard-fails on a row, we refund the credit. You never pay for a failed lookup.

Can I use it from my code?

Yes, every dashboard feature is also a /v1 endpoint. Bearer-token auth, scoped keys, signed webhooks for batch events.

Clean your first list today.

Start with the Small Clean pack, 2,500 credits for $19. No subscription, no monthly minimum, no per-row markup.