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.
| Number | Country | Line type | Carrier | Status |
|---|---|---|---|---|
| +1 415 699 3333 | United States | mobile | AT&T Wireless | Valid |
| +1 312 782 3000 | United States | landline | Illinois Bell Tel | Valid |
| +1 206 333 2222 | United States | voip | Onvoy | Valid |
| +1 212 555 8888 | United 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
Plain list or spreadsheet export. Quotes, dashes and extensions are all handled.
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.
Valid numbers split by country, line type and carrier. Invalid ones as a suppression list you can feed straight back into your sender.
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,000,000
Straight out of the CRM
788,000
Malformed, unallocated and duplicate gone. 21 seconds. $0.
$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.
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.
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.
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.
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.
Up to 50,000 numbers. No install, no account.
Millions of numbers. Windows 10 and 11.
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.
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.
For anyone who would rather read the code than trust a binary — and for anyone shipping it as their own.
14-day money back, no questions asked.
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.
Quality-check inventory before it ships. No per-number cost means you can check the whole file, not a sample.
Strip unallocated numbers before they burn agent minutes and connection attempts.
Separate mobile from landline and VoIP before a send, and keep the invalids as a suppression list.
Numbering-plan data on disk, queryable offline, with the method published.
The source edition is plain Python. Wire it into your own pipeline, or rebrand it.
These are two different jobs and most lists need both. The point is the order you do them in.
| Phonelint, locally | A per-lookup API | |
|---|---|---|
| Where your list goes | Nowhere. It stays on disk. | Uploaded to the provider |
| Cost per number | None after purchase | Metered, per request |
| Rate limit | Your CPU | Set by the provider |
| Works offline | Yes | No |
| Syntactic and plan validity | Yes | Yes |
| Line type and carrier | From the numbering plan | From the numbering plan, plus live sources |
| Current carrier after porting | No | Often yes |
| Whether the line is live right now | No | 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.
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.
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.
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.
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.
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.
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.
14 days, money back, no questions. Or try the browser cleaner first and spend nothing.
Not ready to buy? Both of these are free, need no account, and work in the browser.
Sent. Check your inbox for the trial key. 100 web checks a day unlocked too.
A 50,000-number trial of the desktop app, and a higher limit on the free tools. No card.