Phonelint
Line type

Phone number line type: how to tell mobile from landline and VoIP

Published 2026-09-10 · Updated 2026-09-12 · Phonelint

Line type is the field that decides whether an SMS arrives or is silently discarded. Send to a landline and the message is accepted by your gateway, billed to your account, and never delivered. Nothing bounces back to tell you. The campaign report shows it as sent.

It is also the field most often wrong, and wrong in a way that is invisible until you look at the numbering plan underneath it. Worth understanding what it actually means, because it is less absolute than it looks.

The four types you deal with in practice

Mobile

A number assigned to a cellular network. Receives SMS. This is the segment almost every text campaign is actually aimed at, and usually the only segment worth paying to reach.

Landline (fixed line)

A number assigned to a fixed-line exchange. Cannot receive SMS in any useful sense. Still a perfectly good contact for a voice campaign, which is why the right action is to move landlines to a different list rather than delete them.

VoIP

A number assigned to a voice-over-IP provider: Google Voice, a cloud PBX, a business phone system. Some VoIP numbers receive SMS reliably, some receive it sometimes, and some discard it. VoIP is the genuinely ambiguous category, and treating it as a single decision is what produces inconsistent results between campaigns.

Toll-free

Often ignored in line-type discussions, and it should not be. Toll-free numbers can be messaging-enabled, but an unregistered toll-free sender is filtered aggressively. For a marketing list, a toll-free number in the recipient column is usually a business switchboard that was typed into a form by mistake.

How line type is determined

Two different mechanisms, depending on the country, and the difference explains most of the confusion about accuracy.

Where the plan separates them (most of the world)

Most numbering plans reserve distinct ranges for mobile and fixed line. The line type is readable from the number itself, because the regulator decided in advance which ranges would be which.

Here line type is as reliable as the plan data itself, and it does not depend on knowing anything about the individual subscriber. Phonelint covers 206 country codes on this basis.

Where they share the space (the NANP)

The United States, Canada and the Caribbean territories on +1 do not separate mobile from fixed by range. A 415 number can be either. This is the single reason US line-type detection is harder than it looks, and why a validator that works well in Europe can look broken on a US list.

What the North American Numbering Plan does have is allocation structure. A ten-digit NANP number breaks into a three-digit NPA (the area code), a three-digit NXX (the central office code), and a four-digit line number. Together the first six digits define a block of 10,000 consecutive numbers, from NPA-NXX-0000 to NPA-NXX-9999, and that block is assigned to a specific carrier.

Since number pooling, the blocks got smaller. A 10,000-number CO code is split into ten thousands-blocks of 1,000 numbers each, from NPA-NXX-X000 to NPA-NXX-X999, and those are allocated individually to carriers within a rate centre. Carriers can be required to donate unused blocks back to a pooling administrator. The practical effect is that allocation in North America is recorded at two depths, six digits and seven, and both matter.

So although the plan does not label a US number mobile or fixed, it does say which carrier received the block. If the block went to a wireless carrier, the number was issued as a mobile number. That is an inference from carrier identity rather than from a reserved range, and it is the mechanism behind every US line-type result you have ever seen, including the paid ones.

It also means an unallocated block is decisive in the other direction. A number in a block that was never assigned to anyone cannot ring, and no amount of live lookup changes that. Invalid detection is the deterministic part of this problem, and it is where most of the savings on a real list come from.

Why Google's own library will not answer this

If you have tried to solve line type in code, you have probably reached for libphonenumber, and you have probably seen it return FIXED_LINE_OR_MOBILE for US numbers.

That is not a gap in the library. Libphonenumber works from static metadata about ranges, and in the NANP there is no range that separates the two. The library returns the honest answer for the data it holds. Getting past it requires block allocation data, which is a different kind of dataset with a different update cycle, and that is the actual reason line-type lookups are sold as a paid service.

The ported-number limitation, stated plainly

Since 2003, US subscribers have been able to keep their number when changing carrier. Local number portability means the carrier that holds a number today is not necessarily the carrier that was allocated the block.

So a block-based lookup tells you what a number was allocated as, not necessarily what it is today. A landline ported to a mobile carrier still sits in a block that was allocated to a fixed-line operator, and block data will keep calling it a landline.

This caveat applies to every claim on this page. Line type and carrier from a numbering plan describe the block's original assignment. Where a number has been ported, they can be out of date, and no local dataset can know that.

How often it matters is measurable rather than theoretical. On a pre-registered, out-of-sample US sample in September 2026, our line-type result agreed with Twilio Lookup 75% of the time (n=513) and with Veriphone 94% (n=582) — though Veriphone answered from cache rather than live, so that second figure partly measures shared method. Mobile recall was 96%. The number worth holding onto is a different one: the two paid references agreed with each other only 73% of the time. There is no oracle here, and anyone quoting a single accuracy figure without saying what it was measured against is quoting a number that cannot be checked. Full method is in the benchmark write-up.

What a paid lookup does differently

A live lookup queries carrier-facing infrastructure at the moment you ask, so it can see a port that block data cannot. That is a real advantage and it is worth paying for on the numbers where it changes a decision.

It is metered, though, and the meter is the whole cost model. Rates checked September 2026:

ProviderProductRate
TwilioLookup: Line Type Intelligence$0.008 / request
TelnyxNumber Lookupfrom $0.0015 / query ($0.0025 with MCC/MNC)
NumverifyEnterprise plan$129.99 / month, capped at 250,000 requests

On a 100,000-row list, Line Type Intelligence at $0.008 is $800 per pass. The cost that catches people is the second pass: lists get re-cleaned, and a meter charges again every time.

The sensible split is two passes. Use local block data first, because it is instant, unlimited and correctly identifies the numbers that cannot ring at all. Then spend live lookups only on the survivors, which is usually a much smaller set than the file you started with.

The other thing a hosted lookup requires is the list itself. Every metered provider works by you uploading your numbers to their servers. If the list is a client's customer data under a DPA or GDPR, that upload is a processor relationship you have to paper and defend. Local validation removes the question rather than answering it, because nothing leaves the machine.

What to do with each type

Line typeActionWhy
MobileKeep for SMSThe only segment reliably reachable by text
LandlineMove to a voice listA working contact, just not a textable one
VoIPSegment and test separatelyDelivery varies by provider; mixing it in hides the result
Toll-freeReview by handUsually a switchboard entered into a form in error
UnallocatedRemoveCannot ring. Deterministic, not a probability

Landlines move rather than get deleted. Deleting them throws away contacts that a dialler campaign would convert.

Checking line type across a whole list

One number at a time is a lookup. A campaign list is a different problem, because the per-row cost that is invisible at one number is the entire cost at scale.

The order that works: normalise to E.164 first, deduplicate after normalising (not before, or the same number in three formats survives as three rows), drop the numbers in unallocated blocks, split out landlines, then spend live lookups on what is left. There is a fuller version of this in the pre-campaign checklist.

For scale, Phonelint processes 1,000,000 numbers in 21.2 seconds, roughly 47,000 per second, measured on a mid-range Windows laptop. The point of that figure is not the speed itself. It is that re-running the list costs nothing in either money or time, so cleaning stops being a thing you postpone.

Why the bounce rate matters beyond the wasted send

Carriers score senders. A high proportion of undeliverable messages looks like the traffic pattern of a spammer, because it usually is what a spammer looks like. The consequences escalate: throughput throttling first, then filtering, then a blocked sender ID.

Cleaning the list is not only about the money you save on this campaign. It is about the next campaign still being deliverable.

Common questions

Is there a free phone number validator available?

Yes, including ours. The free cleaner runs in your browser and handles E.164 normalisation, deduplication, country detection and malformed rows, for up to 50,000 numbers, with nothing uploaded. What it does not do is line type, carrier or block allocation, because those need a numbering-plan database rather than a page of script. That distinction is the honest one to apply to any free tool: cleaning and validation are different jobs.

Are phone validators accurate?

They are accurate about different things. Invalid detection, where a number sits outside any allocated block, is deterministic and reliable. Line type and carrier are inferences from block allocation and can be out of date where a number has been ported. Treat any provider quoting a single accuracy percentage without naming its reference with caution, particularly given that two well-regarded paid APIs agreed with each other only 73% of the time in our testing.

Can ChatGPT look up phone numbers?

No, not in any way you should rely on. A language model has no access to numbering-plan allocation data or carrier records, and asking it to classify a number produces a confident guess with no underlying source. Line type comes from a dataset or from a carrier query, not from inference over text.

What is the format of a US-based phone number?

Ten digits: a three-digit area code (NPA), a three-digit central office code (NXX), and a four-digit line number. In international E.164 form it carries the +1 country code, giving +1 followed by those ten digits, with no spaces, brackets or dashes. Storing it that way is what stops the same contact appearing three times under three formats.

How do I check if a number has been reassigned?

Numbering-plan data cannot tell you this, and neither can we. Reassignment is tracked in the FCC's Reassigned Numbers Database, which is a separate subscription service, and checking it is a distinct step from validation. If your exposure is regulatory rather than deliverability, that database is the tool for it.

Is there a free API that can look up phone numbers?

Free tiers exist and most are capped low enough to be a trial rather than a workflow. For bulk work the question is usually not whether an API has a free tier but whether you want a per-row meter at all, since a list you re-clean monthly is charged monthly.

Try it on a number right now

The free checker on the homepage runs the same engine the desktop app uses: validity, country, line type and carrier, one number at a time.

Check a number free