Beta · coverage varies by country
RealtimeBulkPhone input

Phone carrier lookup by number

Phone carrier lookup by number: the current carrier, line type (mobile, landline, VoIP) and original carrier if ported. 3 free lookups a day on this page, no sign-up.

$0.003 per check real-time, $0.0015 in bulk ($3.00 / $1.50 per 1,000). Unknowns are free. Try 20 numbers for real, free, after sign-up.

Start free

Last updated

Free carrier lookup

One number at a time: country, line type and current network. 3 free lookups per day, no sign-up.

International format with the + country code, e.g. +44 20 7946 0958.

Check only numbers you have a reason to check, under our Terms and Acceptable Use Policy. We don't store the number: only a keyed hash for the daily limit. Protected by Cloudflare Turnstile.

The answer appears here: country, line type (mobile, landline or VoIP), current network and, when the network returns it, whether the number was ported.

Check a list or more than 3 a day?Start free

A phone carrier lookup by number tells you which network serves a phone number and what kind of line it is (mobile, fixed line, VoIP, toll-free and others). When the number has moved away from the network its range was allocated to, it also returns that original carrier. It covers numbers worldwide, in real time or in bulk jobs, and is currently in beta.

What does the carrier lookup tell you?

It answers two practical questions about a number: can it receive SMS at all, and which network is it on. The first comes from line_type, the second from carrier.

A line_type of mobile means the number belongs to a mobile range. fixed_line, toll_free, premium_rate, shared_cost or uan usually mean SMS will fail or cost money for nothing. voip means the number is served by an internet-telephony provider. In some countries mobile and fixed ranges cannot be told apart, and the answer is then fixed_line_or_mobile. The line type glossary entry explains each value.

carrier is the current network name. original_carrier appears only when it differs from carrier, and a difference is a strong hint that the number was ported. country is the ISO country of the number.

This is data about the number, not about a person or a handset. It does not tell you whether the phone is switched on. That needs a live query to the home network, which the HLR lookup provides. To confirm a port and get the current network code, use the MNP lookup. If you only need the format and the type the numbering plan assigns, the free phone number validator gives that offline, without a network query.

Who uses it, and why?

Teams that send SMS, place calls or accept phone numbers on forms use the carrier lookup as the first filter.

  • SMS cost control. Sending a text to a landline or a toll-free number wastes the message fee and skews delivery reports. Filter by line_type before you send. See SMS cost reduction.
  • Routing. Some messaging providers price or route by destination network. The current carrier, not the one the number prefix suggests, is what counts once a number has been ported.
  • Sign-up and OTP fraud. A burst of sign-ups from voip numbers or a single small carrier is a common pattern in fake account creation and SMS pumping. The line type is a signal for an extra verification step.
  • Lead verification. A form entry with a fixed_line number in a "mobile" field, or a number whose country doesn't match the address, is worth a second look.

Unlike the platform checks, this service returns data rather than a yes/no answer. A conclusive answer has registered: true, which means "data found".

What do you get back?

FieldTypeMeaning
attributes.line_typeenummobile, fixed_line, fixed_line_or_mobile, voip, toll_free, premium_rate, shared_cost, personal, pager, uan, voicemail or unknown
attributes.carrierstringCurrent carrier name (up to 80 characters)
attributes.original_carrierstringCarrier the number range was allocated to, only when different
attributes.countrystringISO 3166-1 alpha-2 country of the number
registeredboolean or nulltrue when data was found; null when not conclusive
status / reasonenum / stringcompleted, unknown (e.g. NO_DATA, UPSTREAM_TIMEOUT), pending, unsupported_country
checked_at, cached, billed—When the answer was obtained, whether it came from cache, whether it was charged

An answer is conclusive only when carrier is present. Attributes we don't have are left out rather than guessed.

How is it billed?

You pay per number, and only when we return carrier data. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). A number we hold no data for comes back as unknown with reason NO_DATA and is free. Real-time and bulk checks have separate prices. See pricing.

Repeat checks of the same number inside the freshness window can come from your account's cache. Cache hits are free (cached: true, billed: false). Send max_age: 0 to force a fresh, billed check. Use max_cost to cap what a single request can cost.

What are the limits?

The carrier lookup runs in real time (POST /v1/lookup, up to 100 numbers) and in bulk jobs (POST /v1/jobs, up to 50,000 numbers and e-mails). It accepts numbers from every country, but coverage varies by country. That is why the service is labelled beta, and why NO_DATA answers are free.

  • Up to 20 checks per request. Numbers × checks is capped at 2,000 per lookup and 100,000 per job.
  • Requests that look like sequential number ranges or generated e-mail lists are rejected (20 or more consecutive numbers → suspected_enumeration).
  • A daily numbers cap applies per account (GET /v1/limits).
  • Carrier names are returned as we hold them. Brand names, mergers and MVNOs (virtual operators that use another network) can make the name differ from what a subscriber sees on their bill.

Carrier lookup by country

The carrier lookup accepts numbers from every country. For US and Canadian numbers, where porting is common, the US and Canada carrier lookup is the more specific bulk option. Our country guides explain each country's number format, mobile prefixes and porting rules, which is what decides how far a prefix alone can be trusted: United States, Germany, Australia, Bangladesh, Nepal, Sri Lanka, Thailand, Vietnam, Malaysia, Kenya, Colombia. All countries are listed in phone numbers by country.

How do I use it responsibly?

Line type and carrier are facts about a number, but the number usually belongs to a person. Check only numbers you have a lawful reason to process, such as customers, sign-ups and leads who gave you their number. Don't use the lookup to screen or profile people for eligibility decisions like credit, housing or employment. The acceptable use policy forbids that. A voip answer is not evidence of fraud on its own. Many legitimate users have VoIP numbers.

People can object to their number being checked through the opt-out form. Suppressed numbers are skipped and never charged.

Example request

With a test key, +447700900001 returns fixed test data, …002 returns unknown (NO_DATA) and …003 returns unknown (UPSTREAM_TIMEOUT). See test mode.

curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900001"],"checks":["carrier"]}'

Runs as pasted with the public sandbox key, which answers the test values only. In the SDKs, omit the key to use MOBILEVALIDATE_API_KEY.

Response (excerpt, test mode: the first item of results):

JSON
{
  "kind": "phone",
  "input": "+447700900001",
  "e164": "+447700900001",
  "country": "GB",
  "number_status": "valid",
  "checks": {
    "network.carrier": {
      "service": "network.carrier",
      "status": "completed",
      "registered": true,
      "attributes": {
        "line_type": "mobile",
        "carrier": "Test Carrier",
        "country": "GB"
      },
      "confidence": "high",
      "confidence_score": 0.99,
      "checked_at": "2026-09-25T14:25:31.270Z",
      "cached": false,
      "age_seconds": 0,
      "billed": false,
      "reason": null,
      "poll_after_ms": null
    }
  },
  "test": true
}

Try it now

Run it here with a test value: the console calls the live API from your browser with the public sandbox key and shows the real JSON and a plain-English verdict.

POST /v1/lookup

Public sandbox key · test values only · never billed

The sandbox answers the test values below. To check your own numbers for real, create a free account: your first 20 phone numbers and 10 e-mail addresses are free.

Test numbers
Test e-mails
Checks · phone · 1 selected

Sample response, captured in test mode

Phone number · GB

+44 7700 900001

Test mode
  • Carrier lookup

    network.carrier

    Mobile line

    Mobile line on Test Carrier (GB). Line type tells you whether SMS can reach it.

1 of 1 conclusiveCost $0 · test mode is never billed

Check your own numbers: 20 phone numbers and 10 e-mail addresses are checked for real, free, after sign-up. Start free

checks: ["network.carrier"] · Realtime lookup via POST /v1/lookup. Every example runs as pasted: it uses the public sandbox key, which answers the test values for free. In the SDKs, omit the key to use MOBILEVALIDATE_API_KEY.

curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["+447700900001"],"checks":["network.carrier"]}'

Real test-mode result for this check

checks["network.carrier"]
{
  "service": "network.carrier",
  "status": "completed",
  "registered": true,
  "attributes": {
    "line_type": "mobile",
    "carrier": "Test Carrier",
    "country": "GB"
  },
  "confidence": "high",
  "confidence_score": 0.99,
  "checked_at": "2026-09-25T14:25:29.004Z",
  "cached": false,
  "age_seconds": 0,
  "billed": false,
  "reason": null,
  "poll_after_ms": null
}

What you get

Fields of checks["network.carrier"], generated from the public service catalog.

FieldTypeMeaning
registeredboolean | nulltrue when data was found; null when unknown (not charged).
statusenumcompleted, pending, unknown, unsupported_country or failed.
checked_attimestampWhen the answer was obtained.
attributes.line_typeenumLine type.mobile · fixed_line · fixed_line_or_mobile · voip · toll_free · premium_rate · shared_cost · personal · pager · uan · voicemail · unknown
attributes.carrierstringCurrent carrier name.
attributes.original_carrierstringCarrier the number range was allocated to, when different.
attributes.countrystringISO 3166-1 alpha-2 country of the number.

Frequently asked questions

What is the difference between carrier and original_carrier?

carrier is the network the number is served by today, as far as our data shows. original_carrier is the network the number range was first allocated to, and is only returned when it differs, which usually means the number was ported.

Does a carrier lookup tell me whether the phone is switched on?

No. It describes the number (line type and network), not the handset. Live reachability needs a live network query, which our HLR lookup provides.

Why is the service marked beta?

Coverage and data depth still vary by country. When we hold no data for a number, the result is unknown with reason NO_DATA and you are not charged.

Should I use this or the US/CA carrier lookup for North American numbers?

For US and Canadian numbers where porting is common, the US/CA carrier lookup is the more specific option. It runs in bulk jobs only. The general carrier lookup covers all countries and also works in real time.

Can I block every VoIP number based on line_type?

You can, but many real customers use VoIP numbers. Most teams treat voip as a reason for an extra step, such as another verification method, rather than an automatic block.

Is there a free carrier lookup?

Yes. The free lookup at the top of this page checks one number at a time, 3 a day, without sign-up. For more numbers or a list, create a free account and check up to 20 phone numbers for real on the dashboard's Try it page, at no cost. Test mode with documented test values is free and unlimited. After that, a carrier lookup costs $0.003 per check in real time ($3.00 per 1,000) and $0.0015 in bulk jobs ($1.50 per 1,000), paid from prepaid credit. Unknown and other inconclusive results are always free. Our guide to free phone carrier lookups compares the free methods and where they fail.

All articles

Add Carrier lookup to your stack

Create a free MobileValidate account: approved automatically, usually within 10–15 minutes. Carrier lookup: $0.003 per check real-time, $0.0015 in bulk ($3.00 / $1.50 per 1,000).

Free to start: check 20 phone numbers and 10 e-mail addresses for real on your account, plus an unlimited test mode. You pay only for conclusive answers, from $20.