Technical
HLR queries explained, and what to use instead
An HLR lookup is often described as asking whether a mobile number is live. That shorthand hides a signalling exchange between network elements, and it matters which part of it any given service performs. This post explains the exchange from the 3GPP and ITU documents, then states plainly what our phone and carrier lookups return, which is data from public numbering plans and involves no live network query.
What happens on the signalling network
The Home Location Register (HLR) is a database in a mobile operator's core network. Mobile networks talk to it with the Mobile Application Part (MAP), which the 3GPP specification says uses the transaction services of Signalling System No. 7 1. A MAP message is not a web request. It travels between network elements such as exchanges and registers, addressed by SCCP global titles.
The best known exchange is routing a call. When a call is set up, the specification says the HLR of the called subscriber is interrogated to discover the whereabouts of the mobile station, with the SCCP address derived from the dialled MSISDN 1. The service that does this, MAP_SEND_ROUTING_INFORMATION, is used between the gateway exchange and the HLR to interrogate the HLR in order to route a call towards the called mobile 1.
What comes back is a set of conditional parameters. Per the same service definition they include the IMSI, a roaming number (MSRN), the serving exchange address, location information, the subscriber state and a number portability status 1. Each is conditional, so which ones arrive depends on the network and on what was asked.
Two numbering plans meet here
The number a person dials is an E.164 number. The 1997 edition of ITU-T E.164 limits an international number to 15 digits excluding the international prefix, built from a country code of one to three digits and a national significant number 2. The edition in force is E.164 (02/26) 3.
The subscription itself is identified by the IMSI. In the 3GPP numbering specification the IMSI has three parts: a three-digit mobile country code, a two or three digit mobile network code that identifies the home network, and the subscriber identification number within that network 4. ITU-T E.212 is the recommendation that defines the international identification plan for public networks and subscriptions 5. A register such as the HLR is where the dialled E.164 number and the IMSI are linked, which is why the answer cannot be derived from the number alone.
What each kind of check can tell you
| Question | Signalling query to the HLR | Numbering-plan check | Original-carrier lookup |
|---|---|---|---|
| Is the format valid for its country? | Not its purpose | Yes | Reads US numbers only |
| Which country or region? | Implied by the number | Yes | US numbers only |
| Which carrier first held the block? | Not its purpose | No | Yes, US only |
| Is the number switched on now? | The reply can carry subscriber state | No | No |
| Is it roaming, and where? | The reply can carry location information | No | No |
| Has it moved to another carrier? | The reply can carry a portability status | No | No |
Questions a number can raise, and where the answer lives
The last three rows are the point. They are facts held by the operator and exchanged on its signalling network, so no public table can supply them.
What our phone and carrier lookups return
Our phone product validates a number against the numbering plan, using Google libphonenumber metadata and the NANPA area code report. It returns the E.164 form, national and international formats, the country, a number type and, for North American numbers, the area code and its region. The carrier field is always null, and the response says the check cannot tell whether the number is active or has been moved to another carrier.
Our carrier lookup reads the public NANPA central office code and thousands-block reports and returns the carrier a block was first assigned to. It covers US numbers, and its ported field is always unknown. Neither product sends anything over a signalling network, and neither can see whether a handset is on.
curl -X POST https://YOUR_API_HOST/v1/phone \
-H "Authorization: Bearer $LOOKVALID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phone":"+12025550143"}'
A phone lookup, the request
In our captured example for that number the answer is number_type: fixed_line_or_mobile, area_code: 202, region District of Columbia, carrier: null, and line_type_source: numbering-plan. The type comes from the plan, and the plan cannot say more.
Choosing what to run
- Cleaning a list before use: run the numbering-plan check first. Invalid and impossible lengths are free, because a lookup that finds nothing is not charged.
- Routing or labelling US numbers by network history: add the carrier lookup, and treat its carrier as the original assignee.
- Needing live status or roaming: that is operator data, outside what these checks cover.
Start with the phone validator to see the fields on a number of your own, or follow the quickstart to call the API.
Sources
- 3GPP TS 29.002: Mobile Application Part (MAP) specification, version 17.3.0 (ETSI TS 129 002), read 2026-10-19
- ITU-T E.164: The international public telecommunication numbering plan (05/97 edition text), read 2026-10-19
- ITU-T E.164 recommendation page (edition in force), read 2026-10-19
- 3GPP TS 23.003: Numbering, addressing and identification, version 17.7.0 (ETSI TS 123 003), read 2026-10-19
- ITU-T E.212 recommendation page, read 2026-10-19