Skip to main contents
Guides & Tutorials

Carrier Lookup API: What Carrier Data Actually Returns

A phone number that passes format validation can still be a burner VoIP line with zero activity. I break down what carrier data actually returns and how I'd act on each field.

Warda Shabbir
Warda ShabbirJul 3, 2026
Carrier Lookup API: What Carrier Data Actually Returns

I used to think phone validation was a solved problem. A number either matches a valid format or it doesn't, and if it can receive an OTP, it's good enough to store. Then I spent a few weeks digging into why a "verified" phone field in one of my own projects was still full of dead numbers, and I learned that format checks and OTP flows only prove a number is well formed and reachable at one moment in time. They tell you nothing about the line itself. Carrier data is what fills that gap, and it turns out a single API call returns a lot more than I expected.

In this piece I want to walk through exactly what that response contains, what each field actually means in practice, and where I'd use it if I were building a signup flow, a lead scoring model, or an SMS campaign today. None of this is theoretical for me. I've watched a "verified" contact list quietly rot because nobody was checking whether the numbers on it were still alive, let alone what kind of lines they were.

Why Format Validation and OTP Aren't Enough on Their Own

Most apps that collect phone numbers stop at two checks. The first is a format check, which confirms the number looks like a real number for its country. The second is an OTP flow, which confirms whoever entered the number can currently receive a text at it.

Neither of those checks tells you what kind of line you're dealing with, which carrier currently owns it, how recently it's shown any activity, or whether it's tied to a stable, real subscriber. I've seen plenty of numbers that pass both checks and still turn out to be disposable VoIP lines that get abandoned within a week. If your business depends on being able to reach someone by phone next month, not just today, that's a real problem.

This is the gap that a carrier lookup fills. The Trestle carrier lookup API is one example I've looked at closely, and it returns carrier name, seven line type classifications, a phone activity score, and a handful of additional identity signals, all in one JSON response. Nothing about it requires a second call or extra parsing logic. You get a structured object back and you can start acting on it right away.

The Seven Line Types Hiding Inside Every Phone Number

Once I understood the response shape, the line type field is the one I kept coming back to, because it's the single most actionable piece of the whole payload. It drives most of the routing and risk decisions I'd want to make downstream.

There are seven line types a carrier lookup can return: mobile, landline, fixed VoIP, non-fixed VoIP, toll-free, premium rate, and unknown. Each one behaves differently, and treating them all the same is where a lot of phone-based workflows quietly break.

Mobile is the type I care about most for anything time sensitive. A mobile number tied to a carrier is attached to a physical SIM and a real subscriber, and it can receive both calls and texts. It's the baseline I'd want for two-factor authentication flows, for outbound campaigns, and for any lead scoring model that weights contactability.

Landline numbers are usually real and usually belong to an actual person, but they can't receive SMS. That distinction matters more than people assume. If your app sends an OTP to a landline, nothing errors out. The message just goes nowhere, and the user is left wondering why their code never arrived.

Fixed VoIP numbers are registered to a physical address, typically through a business phone provider. In my experience these carry decent identity signals and work fine for most workflows, though I'd still double check SMS deliverability on fixed VoIP before relying on it for anything critical.

Non-fixed VoIP is where I'd slow down. These numbers aren't tied to a fixed address, they're easy to get without any identity check, and they're disposable by design. On paper they look just like a mobile number. In practice they show up disproportionately in fake signups, spam form submissions, and low-intent junk leads. If I only had budget to act on one signal in this whole response, it would be flagging non-fixed VoIP at the point of entry.

Toll-free, premium rate, and unknown round out the list. They're less common in everyday signup forms, but they're worth excluding from consumer contact flows where they don't belong, and worth watching for in fraud contexts where an odd line type shows up where you wouldn't expect one.

Carrier Name Tells You Who Holds the Number Right Now

The carrier name field identifies which network currently owns a number, and I want to stress the word "currently." Numbers get ported between carriers all the time when someone switches providers, so the carrier you see today may not be the one that was originally assigned to that area code.

I've found current carrier data useful in three specific ways. The first is SMS routing. Deliverability varies by carrier, so knowing the network lets you route messages more reliably or flag numbers where delivery is likely to be shaky. The second is fraud detection. A carrier that's geographically inconsistent with the rest of a user's submitted data is a signal I'd want a review process to catch, not ignore. The third is porting detection. A number that's been ported recently, especially from a consumer mobile carrier over to a VoIP provider, can point to account takeover activity, and that's exactly the kind of pattern financial and authentication systems should be watching for.

It's worth noting that NIST's digital identity guidelines still recognize phone-based verification as a legitimate authentication channel, while calling out the specific risks that VoIP lines and number portability introduce. Carrier data is essentially how you surface those exact risks in real time instead of finding out about them after the fact.

Phone Activity Score Adds a Dimension Carrier Data Alone Can't

Line type and carrier name tell you what a number is and who currently holds it. Neither one tells you whether the number is actually being used. That's where the phone activity score comes in, and it's the field I underestimated at first.

The score reflects recent usage patterns pulled from across multiple data sources, and it ranges from consistent recent activity down to no detected activity in the past twelve months. Here's the part that surprised me: a number can be a completely legitimate mobile number, registered to a real subscriber, and still score zero on activity. Maybe the person switched carriers and cancelled the old line. Maybe they ported to a new number. Maybe the line has simply gone dormant.

For any workflow making a routing or risk decision, I'd treat a low activity score as a reason to deprioritize or flag a contact, no matter how clean the format and line type look. A number that passes every other check but shows no activity in a year isn't a number worth spending outreach budget on.

How I'd Wire This Into a Real Signup Flow

The integration pattern here is simple once you see it laid out. You call the API when a number is submitted, you check the response against whatever thresholds matter for your product, and you branch the workflow from there.

In practice that might look like sending non-fixed VoIP numbers to a review queue or blocking them outright. It might mean routing mobile numbers with low activity scores into a lower priority follow-up track instead of your main sequence. It might mean quietly excluding landlines from any SMS-based flow so you're not silently losing users at the OTP step. None of this logic is complicated. The part most teams skip is simply making the API call in the first place and having the data available to branch on.

If I were setting thresholds from scratch, I'd start conservative. Block or hard-review non-fixed VoIP on anything tied to money or account creation, since that's where the fraud signal is strongest. Let fixed VoIP and landlines through everywhere except SMS-dependent steps. Use the activity score as a soft signal rather than a hard gate at first, then tighten it once I'd seen a few weeks of real data come through. It's much easier to loosen a rule that's too strict than to clean up after one that let too much through.

What You Get Back in a Single Call

The carrier lookup is built for synchronous use right at the point of submission. Response times are fast enough that you can call it inline, between form submit and account creation, without adding noticeable delay for the person on the other end.

The JSON response gives you everything in one shot: line type, carrier name, carrier type, prepaid status, a commercial flag, the phone activity score, and optionally name and address data tied to the number. There's no secondary lookup and no stitching data together across endpoints. You get one structured object and you route based on what's in it.

This same idea shows up outside of phone-specific tools too. When I was comparing platforms for the WhatsApp CRM comparison, the pattern was the same: the platforms that handled phone-based data quality well up front made every downstream messaging workflow noticeably less painful. That's really the core argument for carrier data in general. It's not about the lookup itself. It's about what every system downstream gets to skip once the number arrives already classified.

Where Carrier Data Pays Off Down the Line

The actual value of a carrier lookup shows up later, not at the moment of the call. Lead scoring models that factor in line type consistently outperform models built only on format-validated numbers. Authentication flows that exclude non-fixed VoIP at signup see fewer fake accounts slip through. Contact campaigns that filter by activity score get higher connect rates against the exact same underlying list, because they're not wasting effort on numbers nobody's using anymore.

These gains compound because they start right at data capture. A number that enters your system already classified, with carrier, line type, and activity data attached, stays useful across every workflow that touches it later. A number that enters as a bare string has to be cleaned up, re-checked, or worked around at every stage after that. The API call itself is cheap. The data quality it buys you compounds for as long as that number sits in your system.

FAQs

What does a carrier lookup API actually return?

It returns the carrier name, line type, phone activity score, prepaid status, and other identity signals, all in a single JSON response.

What are the 7 line types a carrier lookup can return?

Mobile, landline, fixed VoIP, non-fixed VoIP, toll-free, premium rate, and unknown, each with its own risk and routing profile.

Why is non-fixed VoIP a red flag?

These numbers are disposable and require no identity verification to get. They show up disproportionately in fake accounts, form spam, and low-intent signups.

Can I send an SMS to a landline number?

No. Landlines can't receive SMS. If you try, it fails silently, no error comes back, and the user never sees the message.

What is a phone activity score?

It reflects how recently a number has actually been used. A low score can mean the number is cancelled, dormant, or abandoned, even when the format looks completely valid.

Is carrier data the same as format validation?

No. Format validation only checks whether a number is shaped correctly. Carrier data tells you what the number actually is and whether it's still usable.

How fast is the carrier lookup API?

Fast enough to run inline. You can call it between form submit and account creation without any delay a user would notice.