# Live carrier check (HLR lookup)

A live carrier check asks the mobile networks, at the moment of the lookup, whether a number is in service, which network serves it and whether it is roaming. On Spaw it is not enabled.

Date: 2026-09-27

A live carrier check, often called an HLR lookup after the home location register in which a mobile network keeps its subscribers, is a query sent into the carrier networks at the moment of the lookup to learn whether a number is in service now, which network serves it after any port, and whether the handset is roaming. Numbering plans and regulators' allocation tables cannot answer those three questions: they record how a number was allocated, not what is happening to it today.

## What Spaw answers

The live carrier-network check (`hlr: true`) is not enabled on the service: `hlr_checked` answers false and nothing extra is charged.

The API accepts `hlr: true` on single, batch and bulk lookups, and monitored lists take `live_check`. The four fields the check would fill are `reachable`, `ported`, `current_carrier` and `roaming`; each is null until a check runs, so every answer today carries them null. A lookup made with `hlr: true` answers exactly as one made without it.

Everything else in the answer is read from local data. `carrier` names the operator the number was allocated to, from the regulator's block holder where a table covers it and from the numbering plan's prefix metadata otherwise, and a number ported to another network keeps the block it was born in (see [NPA/NXX](/glossary/npa-nxx)). Only a query into the carrier networks, an HLR or number-portability lookup, can say who serves it today, which is why the check's answer has fields of its own and is never merged into `carrier`.

One rule of the [SMS policy](/glossary/sms-policy) depends on the check. `require_reachable` refuses a number unless a live check reached the handset: `blocked_by: "unreachable"` when the network could not reach it, `"unconfirmed"` when no check answered. While the check is not enabled, every lookup answers `unconfirmed` under that rule, so leave it off.

When a check runs, it is the one call that leaves Spaw's servers: it sends that number, and only that number, to a carrier-network partner, and the network's answer is held for a day under a hash of the number. A number in a block nobody holds, or in a range reserved for [fiction](/glossary/fictional-number), is never checked.

## What it does not mean

A reachable number is not a verified owner. The check reports what the network knows about the subscription, not who is typing the number into a form, and it is not SIM-swap detection.

It names nobody. There is no caller name, no reverse lookup and no subscriber detail in any answer, with or without the check.

Without it, `valid: true` means a number is assignable, not that it is in service. Which regulator tables Spaw reads for each country, and what they can settle, is under [phone facts by country](/tools/phone-number-lookup/countries).

Reference: https://spaw.co/glossary/live-carrier-check
