Clean and validate millions of phone numbers.
Nothing leaves your machine.

Remove invalid, duplicate and unallocated numbers from huge lists before spending money on live phone lookups.

One-time purchase. 14-day money back. Windows 10 and 11.

Phonelint v2.0 — 464,067 numbers, offline
contacts_export_raw.csv  464,067 rows BrowseRun
Input
464,067
Speed
42,459/s
Elapsed
10.9s
Network I/O
0 bytes
NumberCountryLine typeCarrierStatus
+1 415 699 3333United States mobileAT&T Wireless Valid
+1 312 782 3000United States landlineIllinois Bell Tel Valid
+1 206 333 2222United States voipOnvoy Valid
+1 212 555 8888United States —— Not allocated

A real run on a mid-range Windows laptop: 464,067 numbers at 42,459 a second, nothing uploaded. Throughput depends on your machine.

Line types benchmarked against

Twilio LookupVeriphoneNANPAOfcom
0
Number blocks on disk
0
Numbers per second, measured
0 bytes
Sent anywhere
How it works

The numbering plan lives on your disk

1. Drop the file in

Plain list or spreadsheet export. Quotes, dashes and extensions are all handled.

2. It matches locally

1.88 million number blocks ship inside the app. No request leaves your machine, so there is no per-lookup bill and no rate limit.

3. Export what you keep

Valid numbers split by country, line type and carrier. Invalid ones as a suppression list you can feed straight back into your sender.

Output folder
United States/
  mobile/
    Verizon Wireless.txt 1,481
    T-Mobile USA.txt 1,072
  landline/
    AT&T.txt 2,294
  voip/
    Inteliquent.txt 240
invalid.txt 2,118
The economics

Why pay an API to reject numbers you could reject locally?

Phonelint is not trying to replace Twilio or Telnyx. It is the step before them. Clean the list on your machine, then spend live lookups only on the numbers where live information actually matters.

1

Raw list

1,000,000

Straight out of the CRM

→
2

Phonelint, locally

788,000

Malformed, unallocated and duplicate gone. 21 seconds. $0.

→
3

Your API, if you want it

$1,696

Saved at $0.008 a lookup, by not checking 212,000 numbers that were never going to resolve.

Illustrative, using a 78.8% valid rate measured on a real 10,000-number run and Twilio Lookup's list price. Your own rate is whatever your list is — what phone validation actually costs works through the per-provider arithmetic.

Accuracy

How much can a phone validator actually know?

Phonelint checks numbering-plan validity on your machine. Live providers add information it cannot have. To find out how much that is worth, we froze a sample and published its SHA-256 before making a single lookup, so the result could not be chosen after the fact.

75%
Agrees with Twilio · n=513
94%
Agrees with Veriphone’s cached check · n=582
73%
Twilio and Veriphone agree with each other

The third figure is the useful one. Two paid providers disagree with each other on more than a quarter of the same numbers, which is what a phone number actually is: a record several parties hold differently. The full benchmark has the method, the sample and the cases we got wrong. Treat any single accuracy claim with that in mind, ours included, and spend live lookups where they change a decision.

What "valid" means here, and what it does not

Phonelint tells you
  • The number is syntactically possible for its country
  • The block is assigned in the numbering plan, not unallocated
  • The line type recorded for that block
  • The carrier the block was originally allocated to
Phonelint does not tell you
  • Whether the line is currently active
  • Whether anyone answers it
  • The current carrier after porting
  • Whether the number belongs to the person you think

Number portability is the important one. A number keeps its original block assignment in the numbering plan after it moves networks, so the carrier shown is the allocation, not a live lookup. Why libphonenumber returns FIXED_LINE_OR_MOBILE is the same limit as it appears in code. When the live carrier matters, that is exactly what your Twilio or Telnyx key is for, and Phonelint hands it a much shorter list.

Free or paid

An offline bulk phone list cleaner, and a browser one

Two tools, and the difference matters. The browser cleaner fixes how numbers are written. The desktop app is a true offline bulk phone list cleaner — it needs no internet connection at all and checks whether each number was ever issued. Only the second can stop you paying to look up a number that was never allocated.

Free Browser cleaner

Up to 50,000 numbers. No install, no account.

  • Normalise to E.164
  • Remove duplicates
  • Drop invalid numbers
  • Split by country
  • Numbering-plan allocation
  • Unallocated-block detection
  • Line type
  • Carrier
  • Spreadsheet column detection
Open the free cleaner
$29 once Phonelint desktop

Millions of numbers. Windows 10 and 11.

  • Everything in the free cleaner
  • 1.88M numbering-plan blocks on disk
  • Detects unallocated blocks
  • Line type: mobile, landline, VoIP
  • Original carrier allocation
  • Finds the phone column in a spreadsheet
  • Export split by country, type and carrier
  • No per-number fee, no rate limit
Get Phonelint · $29

The free cleaner removes formatting problems. Phonelint removes the numbers that should never have reached your paid lookup provider in the first place. That is the difference you are paying for.

Pricing

Buy it once

Windows 10 and 11. Not code-signed, so Windows shows a “Windows protected your PC” screen on first run — More info, then Run anyway. Why, and what we publish instead.

Standard
$29
  • Desktop app, unlimited local validation
  • 1.88M number blocks included
  • Spreadsheet column detection
  • Free updates for v2
Get Phonelint
Source
$249

For anyone who would rather read the code than trust a binary — and for anyone shipping it as their own.

  • Everything in Standard
  • Full Python source, readable and auditable
  • Check the no-upload claim yourself
  • Rebrand and resell
  • No licence server
Get the source

14-day money back, no questions asked.

Who buys it

Built for people who hold other people's lists

Lead-gen and marketing agencies

Clean a client's multi-million-number database without uploading the client's data to a third party. That is often a contractual question, not a preference.

Data vendors and list brokers

Quality-check inventory before it ships. No per-number cost means you can check the whole file, not a sample.

Call centres and dialler operators

Strip unallocated numbers before they burn agent minutes and connection attempts.

SMS and comms businesses

Separate mobile from landline and VoIP before a send, and keep the invalids as a suppression list.

Researchers and analysts

Numbering-plan data on disk, queryable offline, with the method published.

Developers

The source edition is plain Python. Wire it into your own pipeline, or rebrand it.

Compared with

Local cleaning against a per-lookup API

These are two different jobs and most lists need both. The point is the order you do them in.

 Phonelint, locallyA per-lookup API
Where your list goesNowhere. It stays on disk. Uploaded to the provider
Cost per numberNone after purchase Metered, per request
Rate limitYour CPUSet by the provider
Works offlineYesNo
Syntactic and plan validityYesYes
Line type and carrierFrom the numbering plan From the numbering plan, plus live sources
Current carrier after portingNoOften yes
Whether the line is live right nowNo Some providers, at a price

Where a row says an API does something Phonelint does not, that is the honest answer and the reason Phonelint keeps a slot for your own API key. Clean locally first, then spend lookups on the shorter list.

Questions

Before you buy

Does anything at all get sent anywhere?

Validation is entirely local. The app contacts the licence server once to activate and periodically to check the licence is still valid, and that exchange carries the licence key and a device name, never your numbers. Live enrichment is off unless you add your own API key, and then only the numbers you select are sent, to the provider you chose.

How current is the numbering data?

The plan data ships with the app and is refreshed in updates. It tells you how a block is allocated, not who is using a specific line today. For anything time-sensitive, use the enrichment slot.

Will it tell me if a number is real and answering?

No, and nothing that avoids a live network query can. It tells you a number is possible and its block is allocated. That removes most of a typical list's dead weight before you pay anyone to check the rest.

What happens with ported numbers?

A ported number keeps its original block assignment, so the carrier shown is the original allocation rather than the current network. If current carrier matters to you, that is a live-lookup question.

How do I know the download is what you say it is?

Windows will show a blue “Windows protected your PC” screen on first run. The build is not code-signed. Click More info, then Run anyway. That warning reflects publisher reputation, not anything found in the file.

A code signature tells you who built a file. It does not tell you what the file does. A signed binary from a company you have never heard of can still upload your client's list, and the certificate says nothing about that either way. For a product whose whole claim is that nothing leaves your machine, a signature is not the evidence that matters.

Two things are. Every build's SHA-256 is published on the download page, so you can confirm the file on your disk is byte for byte the one we released. And if you would rather not run our binary at all, the source edition is plain, readable Python — read it, confirm there is no network call, and run it yourself.

Mac or Linux?

Windows 10 and 11 today. The source edition is plain Python and PySide6, so it will run elsewhere with work, but there is no supported build yet.

What if it does not do what I need?

14 days, money back, no questions. Or try the browser cleaner first and spend nothing.

Your list never leaves your computer

Get Phonelint · $29

Not ready to buy? Both of these are free, need no account, and work in the browser.

A 50,000-number trial of the desktop app, and a higher limit on the free tools. No card.