← Blog

What is an HLR lookup? The live query behind whether a number rings

An HLR lookup is a live query to a carrier's own database — the only way to learn a mobile number is active and reachable, which number metadata can never tell you.

Contents

You searched "what is an HLR lookup" because something in your stack needs to know whether a phone number actually rings — not just whether it's shaped like a valid number. Those are two different questions, and the gap between them is exactly what an HLR lookup fills. This post explains what the HLR is, what a lookup against it tells you, how it differs from the metadata you can get for free, and — plainly — which of these Boundstone does and does not do today.

What the HLR is

HLR stands for Home Location Register. It's a central database inside every mobile carrier's core network that holds the live record for each subscriber the carrier owns: which SIM belongs to which number, which plan is active, and — critically — where that subscriber is currently registered on the network, including whether they're roaming on another operator right now.

When you place a call or send an SMS to a mobile number, the network queries the HLR (and its companion, the VLR, or Visitor Location Register) to work out where to route it. The HLR is authoritative because it is the network's own source of truth. Nothing outside the carrier knows whether a number is currently switched on and reachable — because nothing outside the carrier is the carrier.

An HLR lookup is a live query

An HLR lookup (or "HLR dip") is a query sent into that signalling network — historically over SS7, today usually through an aggregator's API — asking the HLR about one specific number. Unlike a table lookup, it touches live infrastructure, and it comes back with things only the network knows:

  • Whether the number is active — assigned to a live subscriber, not disconnected.
  • The current serving carrier — who actually operates the number today, after any porting.
  • Reachability and roaming status — whether the handset is currently registered, and if so, whether it's roaming.

That's the whole value: an HLR lookup is the only way to learn that a number rings. It's also why it costs money per query — you're paying for a round trip into a carrier's core network, not a lookup in a file you already downloaded.

Why metadata can't tell you this

Most phone validation you'll reach for first is metadata, not a live query. Google's libphonenumber ships each country's published numbering plan as data and matches a number against it. That's genuinely useful and, for plenty of jobs, all you need — it's how you get format, country, and line type for free, offline, with no per-call cost:

import { parsePhoneNumber } from 'libphonenumber-js/max'

const phone = parsePhoneNumber('+16504472983')
console.log(phone.isValid())   // true — the number fits its plan
console.log(phone.getType())   // 'FIXED_LINE_OR_MOBILE'

But notice what isValid() means: the number could exist under its country's plan. It does not mean anyone holds it, that it hasn't been disconnected, or that a phone would answer. Metadata describes how a number's range was designated — it cannot see the live network. There's a fuller walk-through of the metadata path in validating phone numbers in JavaScript. When you need to know a number is live, metadata has nothing more to give you. That's the HLR's job, and only the HLR's.

HLR lookup vs carrier lookup vs ported status

These three get muddled, so they're worth separating:

  • Carrier lookup answers "which network operates this number now." Because of number portability, the carrier a range was originally assigned to often isn't the one serving it today — a carrier lookup resolves the current operator.
  • Ported status answers the narrower "has this number moved away from its original carrier."
  • HLR liveness is the fullest of the three: is the subscriber active and reachable at this moment.

All three are live queries against network data, and all three bill per lookup. Metadata gives you none of them — it can only report the original designation, which drifts from reality the moment a number is ported or disconnected.

What Boundstone does today — and what it doesn't

Here's the honest boundary. Boundstone does metadata-grade phone validation today, and nothing that requires a live network dip. Every phone response carries the checks it did and didn't run, so a valid: true never overstates itself:

{
  "valid": true,
  "e164": "+16504472983",
  "country": "US",
  "line_type": "fixed_line_or_mobile",
  "national_format": "(650) 447-2983",
  "checks": {
    "performed": ["format", "region", "line_type_metadata"],
    "not_performed": ["carrier_lookup", "ported_status", "hlr_liveness"]
  }
}

checks.performed is ["format", "region", "line_type_metadata"]. checks.not_performed is ["carrier_lookup", "ported_status", "hlr_liveness"] — the three live queries above, named explicitly. Boundstone does not perform HLR liveness, carrier lookup, or ported-status detection by default, and the response says so instead of leaving you to assume. Those live checks are a paid opt-in: send hlr:true and the dip runs for 5 credits, priced against what a real dip costs — an HLR query bills per call — and refunded when the network cannot answer.

Anyone who hands you a confident "this number is active" without showing you a live check either ran one (and should say so) or is guessing off metadata and calling it reachability. The not_performed list exists so you never have to wonder which.

The short version

  • HLR = Home Location Register, the carrier's live database of who owns a number and where they're registered.
  • An HLR lookup is a live network query — the only way to know a number is active, which carrier serves it now, and whether it's reachable. It costs per dip because it touches carrier infrastructure.
  • Metadata (libphonenumber) can't tell you any of that. It validates the shape and designated type of a number, offline and free. Start there — it's often the whole job.
  • Boundstone is metadata-grade by default, live on request. hlr_liveness, carrier_lookup and ported_status come back not_performed unless you send hlr:true, which runs a real dip for 5 credits and refunds it when the network cannot answer.

Want the metadata layer now, with the honesty contract on every response? The keyless phone validator runs it with no signup and no card.

Frequently asked questions

What is an HLR lookup and what does it tell you?

An HLR (Home Location Register) lookup is a real-time query sent to a mobile carrier's central subscriber database to check whether a phone number is currently live and reachable. It can reveal whether the number is active, switched off, or unassigned, along with the current carrier and whether the number has been ported to a different network. Because it queries the carrier network directly, it reflects a number's status at the moment of the query rather than only whether the number is formatted correctly.

Does a 'valid' phone result mean the number actually rings?

Not necessarily, and it depends on what kind of check produced that result. Boundstone's phone verification performs format, region, and line-type metadata checks, so a 'valid' means the number is correctly structured and dialable in principle, not that it is switched on at this moment. Carrier lookup, ported status, and HLR liveness are listed as not_performed on every response, which is the point of the honesty contract: we tell you what a result does and does not prove rather than implying a live check we never ran.

Does Boundstone perform HLR lookups?

Not today. Boundstone's current phone verification covers format, region, and line-type metadata, and every response explicitly lists carrier lookup, ported status, and HLR liveness under checks.not_performed by default. A live HLR dip (carrier, ported status, reachability) is available as a paid opt-in with hlr:true at 5 credits; by default we report those as not performed instead of guessing, so you always know the exact boundary of what was actually checked.

Thomas Tsui

Founder of Boundstone — building phone, email and IP validation you can actually verify.

One honest API for email, phone and IP — every response lists what it checked and what it didn't claim to. Free tier: 250 credits/month, no card, credits never expire.

More from Boundstone — API documentation · Benchmark methodology · The benchmark series · Buyer's checklist