Deliverability

How much does an HLR lookup cost? HLR lookup pricing explained (2026)

HLR lookup prices per number and per 1,000: what drives the cost, the pricing models on the market, hidden fees, and how to estimate a list before you pay.

By Published 7 min read

On this page

An HLR lookup costs $0.006 per number in real time and $0.005 per number in bulk at MobileValidate, which is $6.00 and $5.00 per 1,000 (prices as of 2026-10-17, see pricing). You pay only for conclusive answers: reachable, unreachable and invalid. Unknown answers, badly formatted input, duplicates and cache hits are free, so the real cost per row of a list is usually below the list price.

Across the market, the price per lookup is only half the answer. What you actually pay depends on which outcomes are billed, whether you need the answer in real time, how credit is sold and whether it expires. This guide explains each of those, then shows how to price a list before you run it. If you want to know whether the lookup saves more than it costs, read when an HLR lookup pays for itself. If you want to know what each answer means, read HLR lookup results explained.

What does an HLR lookup cost at MobileValidate?

Three network checks are often compared on price. Here are all three, exactly as listed on the pricing page from 2026-10-17:

CheckReal time, per checkReal time, per 1,000Bulk, per checkBulk, per 1,000
HLR lookup$0.006$6.00$0.005$5.00
MNP lookup$0.002$2.00$0.002$2.00
Carrier lookup$0.003$3.00$0.0015$1.50

Each check has one price per mode for every country it covers. There is no monthly plan and no setup fee: you top up a prepaid balance and each conclusive answer draws from it. For large committed volumes you can ask for a quote when you request access.

A tilted price tag listing a real-time and a bulk price per 1,000 lookups, a bar chart comparing three network checks, and a receipt where only conclusive rows carry a charge under a cost cap.A tilted price tag listing a real-time and a bulk price per 1,000 lookups, a bar chart comparing three network checks, and a receipt where only conclusive rows carry a charge under a cost cap.
What an HLR lookup costs depends on the unit price and on which answers are billed.

What drives the cost of an HLR lookup?

An HLR lookup is a live question to the number's home network, not a table lookup. To deliver a text message, the network sends the MAP operation SendRoutingInfoForSM to the home location register and gets back where the subscriber can be reached (3GPP TS 29.002; 3GPP TS 23.040). For a foreign number, that query crosses the international signalling network between operators (GSMA IR.70). The register holds the details of every SIM card the operator has issued (Wikipedia). An HLR lookup service asks the same kind of question without sending a message.

So four things shape the price:

  1. Network access per country. Each query reaches a real network, and the cost of reaching networks differs by destination. Some providers pass that on as a price per country; others average it into one price.
  2. Real time versus bulk. Answering inside your request needs capacity that is always ready. Bulk jobs can be queued and batched, which is why bulk is usually the cheaper option.
  3. Volume. Providers lower the unit price for larger purchases or committed monthly volumes.
  4. Which outcomes are billed. This matters as much as the unit price, and it is easy to miss in the small print.

Which HLR outcomes are billed?

Our rule is short. A conclusive answer from the network is billed; anything else is free.

OutcomeWhat it meansBilled?
reachableThe network knows the subscriber and considers them reachableYes
unreachableThe number exists, but the phone can't be reached nowYes
invalidThe network reports the number as not assignedYes
unknownNo conclusive answer, for example a timeout or network errorNever
unsupported_countryThe country is not coveredNever
Invalid inputNot a valid number format (invalid_number), so never queriedNever
DuplicateThe same number again in one request or jobNever
Cache hitA fresh answer already in your account's cache (cached: true)Never

Note the two kinds of "invalid". An invalid HLR status is an answer from the network, and it is usually the most valuable one: it tells you to stop sending. A malformed number never reaches the network, so it costs nothing. Every result carries billed: true or false, so you can reconcile each charge.

What pricing models will you find on the market?

HLR providers sell the same kind of query in quite different ways. None is wrong, but they suit different buyers.

ModelHow it worksGood forWatch out for
Per-lookup creditsBuy credit, pay a flat price per lookupIrregular volumes, testing, mixed listsMinimum purchase, credit expiry
Monthly plansA fee buys a monthly allowance; extra lookups cost moreSteady, predictable volumeUnused allowance lost, overage rates, minimum term
Per-country price listsEach destination has its own rateLists from a few cheap countriesHard to predict mixed lists; expensive outliers
Volume tiersThe unit price falls as you buy moreLarge, regular buyersBig upfront payment to reach the good tier

The billing rule sits on top of any model. Some providers charge every query, including timeouts and errors. Others charge only completed answers. On a clean list the difference is small. On an old list with many unreachable networks or timeouts, charging for failed lookups can raise your real price per useful answer noticeably. Always ask which outcomes are billed before comparing unit prices.

What hidden costs should you check?

The unit price is easy to compare. These items are not, and they often decide the total:

  • Minimum top-up or minimum purchase. Our minimum top-up is $20.
  • Credit expiry. Some credit expires after a set period. Ours does not expire while your account is active (Terms §10); an account with no check, top-up or sign-in for 24 months may be closed after at least 30 days' notice.
  • Billing for unknowns and failures. Covered above. We never bill unknown.
  • Duplicates and malformed rows. If a provider queries every row as uploaded, a messy list costs more. We validate and dedupe before anything runs.
  • Repeat lookups. Checking the same number twice in a week may be billed twice. Repeat checks inside our freshness window come from your cache for free. Send max_age: 0 only when you need a fresh answer, which is billed.
  • Monthly minimums and overage. A plan you don't use fully raises the real price per lookup.

Is an MNP or carrier lookup enough?

Often it is, and it costs less. Each check answers a different question, which HLR vs MNP vs number validation explains in depth. The short version:

  • Need the current network of a ported number, for SMS routing? The MNP lookup answers that for $2.00 per 1,000. Number portability lets a subscriber keep a number when they change operator, so the prefix alone can be wrong (Wikipedia).
  • Need to drop landlines and other lines that can't take SMS? A carrier lookup reads the line type for $1.50 per 1,000 in bulk.
  • Need to know if a mobile number is assigned and reachable now? Only the HLR lookup sees that, at $5.00 per 1,000 in bulk or $6.00 in real time.

Free format validation comes first in every case: it removes junk before you pay for anything.

How do you estimate a list's cost before running it?

Send the list to POST /v1/jobs/estimate. It takes the same body as a job, checks nothing and charges nothing. Here it is with the documented test numbers, one of them twice:

Shell
curl https://api.mobilevalidate.com/v1/jobs/estimate \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900001", "+447700900002", "+447700900002", "+447700900003"], "checks": ["hlr"]}'

The answer counts valid, invalid, duplicate and cached rows and returns max_cost, the most the job can cost if every check answers conclusively. Here total is 4 and duplicate is 1, so three checks would run. With a test key max_cost is always 0, and unit_price shows your live price. Then create the job with a cap. Three live HLR checks in bulk cost at most $0.015, so a $0.02 cap lets this job run:

Shell
curl https://api.mobilevalidate.com/v1/jobs \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: hlr-cost-001" \
  -d '{"numbers": ["+447700900001", "+447700900002", "+447700900003"], "checks": ["hlr"], "max_cost": {"amount": "0.02", "currency": "USD"}}'

If the worst case is higher than max_cost, the request is refused with cost_limit_exceeded and nothing is charged. In test mode, …001 answers reachable, …002 unreachable and …003 unknown. In live mode the first two would be billed and the third would not. The bulk jobs guide covers uploads, progress and result files.

What does a worked example look like?

Take a CSV of 50,000 customer numbers you want to clean before sending them service messages, in a bulk job at $5.00 per 1,000 (prices as of 2026-10-17). The counts below are illustrative, not typical results:

StepRowsCost
Uploaded50,000
Malformed numbers (invalid_number)1,200$0
Duplicates800$0
Valid numbers to check (the estimate's max_cost)48,000$240.00 at most
Served from cache (checked recently, still fresh)3,000$0
unknown answers1,000$0
Billed: reachable, unreachable, invalid44,000$220.00

The job reserves $240.00, charges $220.00 and releases the remaining $20.00 to your balance. That is $4.40 per 1,000 uploaded rows, below the list price. The same 44,000 answers in real time would cost $264.00. If line type alone answers your question, a bulk carrier lookup on the 48,000 valid numbers would cost at most $72.00.

To decide whether the $220.00 is worth spending, plug your own wasted-send cost into the break-even formula.

What are the key takeaways?

  • From 2026-10-17, our HLR lookup costs $6.00 per 1,000 in real time and $5.00 per 1,000 in bulk, billed only for reachable, unreachable and invalid.
  • Compare billing rules, not just unit prices: charging for unknowns, duplicates and repeats changes the real price.
  • Check minimum top-ups, credit expiry and monthly minimums before you buy.
  • Use the cheapest check that answers your question: MNP for routing, carrier lookup for line type, HLR for live status.
  • Run the free estimate first and pass max_cost, so a list can never cost more than you agreed to.

Sources

  1. 3GPP TS 29.002: Mobile Application Part (MAP) specification — 3GPP, 2026
  2. 3GPP TS 23.040: Technical realization of the Short Message Service (SMS) — 3GPP, 2026
  3. IR.70 SMS SS7 Fraud, version 3.1 — GSM Association, 2005
  4. Network switching subsystem: Home location register (HLR) — Wikipedia, 2026
  5. Mobile number portability — Wikipedia, 2026

Frequently asked questions

How much does an HLR lookup cost per number?

At MobileValidate, prices as of 2026-10-17 are $0.006 per conclusive HLR lookup in real time and $0.005 in bulk jobs, which is $6.00 and $5.00 per 1,000. Unknown answers, invalid input, duplicates and cache hits are free, so the cost per row of a list is usually lower than the list price.

Do I pay for an HLR lookup that returns unreachable or invalid?

Yes. reachable, unreachable and invalid (the network reports the number as not assigned) are conclusive answers from the network and are billed. unknown, for example after a timeout or a network error, is never billed. A badly formatted number is a different case: it is marked invalid_number before any query and is free.

Why is real time more expensive than bulk?

A real-time lookup is answered inside your request, so it needs capacity ready at all times. A bulk job can be scheduled and batched. At MobileValidate the HLR lookup costs $6.00 per 1,000 in real time and $5.00 per 1,000 in bulk (prices as of 2026-10-17).

Is an MNP or carrier lookup enough instead of an HLR lookup?

Often, yes. If you only need the current network of a ported number for routing, the MNP lookup answers it for $2.00 per 1,000. If you only need to drop landlines, a bulk carrier lookup costs $1.50 per 1,000. Only the HLR lookup tells you whether a mobile number is assigned and reachable right now.

Does unused credit expire?

Not while your account is active. Under section 10 of our Terms, credit does not expire; an account with no check, top-up or sign-in for 24 months may be closed after at least 30 days' notice by e-mail.

How do I know what a list will cost before I run it?

Send the list to POST /v1/jobs/estimate. It is free, checks nothing, and returns the counts of valid, invalid, duplicate and cached rows plus the maximum cost. Pass that amount as max_cost when you create the job, and the job can never cost more.

All articles

Know before you send.

Tell us about your use case. We review every request and set you up with test and live keys.