On this page
Kuwait phone numbers use the country code +965 and have 8 digits, with no area code and no trunk prefix. Mobile numbers start with 41, 5, 6 or 9, such as 500 XXXXX or 9XXX XXXX; from abroad you just put +965 in front: +965 500 XXXXX, stored in E.164 as +96550XXXXXX. Landlines start with 2. The prefix doesn't tell you the network: mobile numbers have been portable since 15 June 2013.
This guide is part of our phone numbers by country series. The tables are generated from libphonenumber's metadata, our MNP atlas and our public catalog. Example numbers are masked with X. The code samples use libphonenumber's own example numbers, which are for testing only; don't call or text them. On 2026-11-08 we read the numbering plan and decisions of the Communication and Information Technology Regulatory Authority (CITRA), its notices to the ITU and the operators' and press reports on portability. Several CITRA decisions are published in Arabic only. This is a summary, not legal advice.
What does a Kuwait phone number look like?
A Kuwaiti number is eight digits with no 0 in front and no area code. CITRA's National Number Plan, last updated on 10 August 2023, sets the whole scheme in one table (CITRA, 2023):
| Leading digits | Length | Use in CITRA's plan | Holder named in the plan |
|---|---|---|---|
10–17 | 3 | Emergency and short numbers | — |
18 | 7 | Corporate numbers | — |
2 | 8 | Fixed telephony | CITRA / Ministry of Communications |
41 | 8 | Mobile | Virgin |
5 | 8 | Mobile | stc |
6 | 8 | Mobile | Ooredoo |
9 | 8 | Mobile | Zain |
The plan adds one sentence that matters for validation: "All Kuwaiti eight-digit number ranges starting with the digits (41), (5), (6), and (9) are to be considered valid numbers in Kuwait's National Numbering Plan." CITRA allocates blocks inside those ranges to licensed operators on application, and it doesn't notify the ITU of each allocation. It first announced this layout to the ITU in August 2021 and repeated it in September 2022, asking networks abroad to open all the ranges (ITU, 2022).
| Item | Value |
|---|---|
| Country calling code | +965 |
| International call prefix (dialling out) | 00 |
| Trunk prefix (dialling at home) | none |
| Mobile: digits after +965 | 8 |
| Fixed line: digits after +965 | 8 |
| Toll-free: digits after +965 | 7 |
| Mobile, national format (masked) | 50X XXXXX |
| Mobile, international (masked) | +965 50X XXXXX |
| Mobile, E.164 (masked) | +96550XXXXXX |
| Fixed line, national format (masked) | 22XX XXXX |
| Fixed line, international (masked) | +965 22XX XXXX |
| Fixed line, E.164 (masked) | +96522XXXXXX |
Two lines need a word. The "Toll-free: 7 digits" row is how libphonenumber types the 18 corporate numbers, such as 180X XXX; CITRA calls them corporate numbers. They are not mobiles. And libphonenumber writes mobiles starting 5 as 500 XXXXX (three and five digits), while numbers starting 6 or 9 come out as 9XXX XXXX. The digits are the same either way, so don't validate the grouping.
Store only the E.164 form: +965 and the eight digits, with no spaces, dashes or brackets. Because there is no trunk prefix, nothing is dropped: 500 12345, +965 500 12345 and 00965 5001 2345 are the same number.
Which prefixes are mobile numbers?
CITRA's answer is simple: 41, 5, 6 and 9. libphonenumber's answer is not. The generator counted every 8-digit number that the library's mobile pattern for KW accepts:
| National prefix | International | Share of the block that is mobile (8-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
AA, for 9 blocks AA = 41, 50, 55, 66, 90, 94, 96, 97, 99 | +965 AA | 100% | — |
51 | +965 51 | 80.0% | not mobile: 518, 519 |
52 | +965 52 | 3.0% | not mobile: 520, 521, 523, 524, 526–529; partly mobile: 522 (10.0%), 525 (20.0%) |
56 | +965 56 | 20.0% | not mobile: 560–564, 567–569 |
57 | +965 57 | 2.0% | not mobile: 570–574, 576, 578, 579; partly mobile: 575 (10.0%), 577 (10.0%) |
58 | +965 58 | 2.0% | not mobile: 580–587, 589; partly mobile: 588 (20.0%) |
60 | +965 60 | 60.0% | not mobile: 601, 602, 605, 608 |
61 | +965 61 | 4.0% | not mobile: 612–615, 617–619; partly mobile: 610 (10.0%), 611 (10.0%), 616 (20.0%) |
62 | +965 62 | 2.0% | not mobile: 620, 621, 623–625, 627–629; partly mobile: 622 (10.0%), 626 (10.0%) |
63 | +965 63 | 2.0% | not mobile: 630–632, 634, 635, 637–639; partly mobile: 633 (10.0%), 636 (10.0%) |
64 | +965 64 | 2.0% | not mobile: 640–643, 645, 647–649; partly mobile: 644 (10.0%), 646 (10.0%) |
65 | +965 65 | 70.0% | not mobile: 652–654 |
67 | +965 67 | 29.0% | not mobile: 671–675, 678, 679; partly mobile: 670 (90.0%) |
68 | +965 68 | 2.0% | not mobile: 680–685, 687, 689; partly mobile: 686 (10.0%), 688 (10.0%) |
69 | +965 69 | 33.0% | not mobile: 691, 692, 694, 695, 697, 698; partly mobile: 693 (30.0%) |
91 | +965 91 | 4.0% | not mobile: 912–918; partly mobile: 910 (10.0%), 911 (20.0%), 919 (10.0%) |
92 | +965 92 | 11.0% | not mobile: 921, 923–929; partly mobile: 920 (10.0%) |
93 | +965 93 | 3.0% | not mobile: 931, 932, 934–939; partly mobile: 930 (10.0%), 933 (20.0%) |
95 | +965 95 | 11.0% | not mobile: 951–954, 956–959; partly mobile: 950 (10.0%) |
98 | +965 98 | 50.0% | not mobile: 981–984, 986 |
Only nine two-digit blocks are fully mobile in the library: 41, 50, 55, 66, 90, 94, 96, 97 and 99. Others are partly covered, such as 51, 60, 65 and 98, and many have only a few four-digit sub-blocks, often with repeated digits. Blocks that appear in no row at all, 53, 54 and 59, are rejected entirely. The library lists the blocks its maintainers have seen in use, while CITRA opens the whole range in advance.
This is the most important fact in this guide for developers:
| Number | CITRA plan | libphonenumber 1.13.13 | What it means |
|---|---|---|---|
500 XXXXX, 9XXX XXXX in a listed block | Valid mobile | MOBILE | Accept |
52XX XXXX, 62XX XXXX outside the listed sub-blocks | Valid mobile range | invalid | Possibly real; treat as unconfirmed |
40XX XXXX, 42XX XXXX | Not in the plan (only 41 is) | invalid | Reject |
2XXX XXXX | Fixed line | FIXED_LINE | Not a mobile |
So a Kuwaiti number that libphonenumber calls invalid may still be a working mobile, if it is 8 digits in a CITRA mobile range. That is the reverse of the usual problem, where a library accepts numbers that don't exist. The code below keeps those numbers apart instead of throwing them away.
Who holds the blocks?
Kuwait has three mobile network operators: Zain (9), Ooredoo (6) and stc (5), which traded as VIVA until it rebranded in December 2019 (stc, 2019). The 41 range belongs to Virgin Mobile, which launched in May 2022 as Kuwait's first mobile virtual network operator, an operator that uses another company's network (Developing Telecoms, 2022).
libphonenumber's carrier data for +965 (965.txt) has one line per first digit and, as we read it on 2026-11-08, still names "VIVA" for 5, almost seven years after the rebrand. Even a current name shows only who received the range. A ported number keeps its digits, so look up the current network per number.
What are 18 numbers and short numbers?
| Range | Use (CITRA plan) | Digits | libphonenumber type |
|---|---|---|---|
18X XXXX | Corporate numbers (company hotlines) | 7 | TOLL_FREE |
1XX (10–17) | Emergency and short numbers, such as 112 | 3 | short number |
+965 159 | Hotline for Kuwaiti citizens abroad (announced to the ITU in 2022) | 3 | short number |
2XXX XXXX | Fixed lines | 8 | FIXED_LINE |
None of these can receive an OTP, so reject them in a mobile field.
Why does a simple regex fail for Kuwaiti numbers?
Most tutorials give "8 digits starting with 5, 6 or 9", sometimes with 4. Each version is wrong in a different way:
[569]\d{7}misses the41range.[4569]\d{7}accepts40,42… which are not in the plan.- The CITRA-exact pattern
41\d{6}|[569]\d{7}matches the plan, but says nothing about which blocks are in service.
And the library is stricter than the plan, as shown above. Our post on why an E.164 regex is not enough shows the same problem elsewhere. For Kuwait, the honest answer combines both: the library for "known in use", CITRA's ranges for "possible", and a live lookup for "in service".
How do I validate a Kuwaiti number in code?
Remove spaces and punctuation, parse with full metadata and the default region KW, and return one of four answers: a known mobile, a number in a CITRA mobile range the library doesn't know yet, a valid number that isn't a mobile, or invalid. You can try single numbers first in our free phone number validator.
Python (pip install phonenumbers):
import re
import phonenumbers
from phonenumbers import PhoneNumberType
# CITRA's plan: every 8-digit number starting 41, 5, 6 or 9 is a valid mobile number.
CITRA_MOBILE = re.compile(r"41\d{6}|[569]\d{7}")
def classify_kw(raw: str) -> tuple[str | None, str]:
"""(E.164 or None, "mobile" | "citra_range" | "not_mobile" | "invalid") for a Kuwaiti number."""
s = re.sub(r"[\s().-]", "", raw)
try:
n = phonenumbers.parse(s, "KW")
except phonenumbers.NumberParseException:
return None, "invalid"
if phonenumbers.region_code_for_country_code(n.country_code) != "KW":
return None, "invalid"
e164 = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)
if phonenumbers.is_valid_number(n):
if phonenumbers.number_type(n) == PhoneNumberType.MOBILE:
return e164, "mobile"
return None, "not_mobile"
# libphonenumber knows only part of the 5, 6 and 9 ranges; CITRA opens all of them.
if CITRA_MOBILE.fullmatch(str(n.national_number)):
return e164, "citra_range"
return None, "invalid"
# Inputs with X are masked; the demo fills X with 0 and masks the result again.
for raw in ["500 12345", "+965 500 12345", "00965 5001 2345", "52XX XXXX", "62XX XXXX",
"40XX XXXX", "2234 5678", "1801 234", "500 1234"]:
e164, kind = classify_kw(raw.replace("X", "0"))
if e164 and "X" in raw:
e164 = e164[:6] + "X" * (len(e164) - 6)
print(f"{raw!r:18} -> {(e164, kind)}")JavaScript (npm install libphonenumber-js):
import { parsePhoneNumberFromString } from "libphonenumber-js/max";
// CITRA's plan: every 8-digit number starting 41, 5, 6 or 9 is a valid mobile number.
const CITRA_MOBILE = /^(?:41\d{6}|[569]\d{7})$/;
/** [E.164 or null, "mobile" | "citra_range" | "not_mobile" | "invalid"] for a Kuwaiti number. */
export function classifyKw(raw) {
const input = String(raw).replace(/[\s().-]/g, "");
const phone = parsePhoneNumberFromString(input, "KW");
if (!phone || phone.countryCallingCode !== "965") return [null, "invalid"];
if (phone.isValid()) return phone.getType() === "MOBILE" ? [phone.number, "mobile"] : [null, "not_mobile"];
// libphonenumber knows only part of the 5, 6 and 9 ranges; CITRA opens all of them.
return CITRA_MOBILE.test(phone.nationalNumber) ? [phone.number, "citra_range"] : [null, "invalid"];
}
// Inputs with X are masked; the demo fills X with 0 and masks the result again.
for (const raw of ["500 12345", "+965 500 12345", "00965 5001 2345", "52XX XXXX", "62XX XXXX",
"40XX XXXX", "2234 5678", "1801 234", "500 1234"]) {
let [e164, kind] = classifyKw(raw.replaceAll("X", "0"));
if (e164 && raw.includes("X")) e164 = e164.slice(0, 6) + "X".repeat(e164.length - 6);
console.log(JSON.stringify(raw).padEnd(18), "->", JSON.stringify([e164, kind]));
}We ran both on 2026-11-08 (Python 3.12 with phonenumbers 9.0.40, Node.js 24 with libphonenumber-js 1.13.13). The unmasked inputs are libphonenumber's example numbers, plus a 7-digit version of the mobile example. Both returned the same answers; this is the Python output (JavaScript prints arrays with double quotes and null):
'500 12345' -> ('+96550012345', 'mobile')
'+965 500 12345' -> ('+96550012345', 'mobile')
'00965 5001 2345' -> ('+96550012345', 'mobile')
'52XX XXXX' -> ('+96552XXXXXX', 'citra_range')
'62XX XXXX' -> ('+96562XXXXXX', 'citra_range')
'40XX XXXX' -> (None, 'invalid')
'2234 5678' -> (None, 'not_mobile')
'1801 234' -> (None, 'not_mobile')
'500 1234' -> (None, 'invalid')The first three are one number written three ways. The two citra_range rows are numbers that libphonenumber rejects but CITRA's plan allows; keep them, mark them unconfirmed and confirm them before you rely on them. 40… isn't in any mobile range. The landline and the corporate 18 number are valid but not mobile, and the last input is one digit short.
The generated test table runs the raw library call over masked inputs. The shape regex column tests the "4, 5, 6 or 9" tutorial pattern, after spaces, dashes and brackets are removed:
| # | Case | Input (masked) | Shape regex ^(?:\+965|00965)?[4-69]\d{7}$ | libphonenumber (KW) |
|---|---|---|---|---|
| 1 | National (no trunk prefix) | 50X XXXXX | passes | valid, MOBILE |
| 2 | International, with spaces | +965 50X XXXXX | passes | valid, MOBILE |
| 3 | International dialling prefix 00 | 00965 50X XXXXX | passes | valid, MOBILE |
| 4 | E.164 | +96550XXXXXX | passes | valid, MOBILE |
| 5 | Dashes and brackets | (50X) XXXXX | passes | valid, MOBILE |
| 6 | One digit short | 50XXXXX | fails | invalid |
| 7 | One digit too many | 50XXXXXXX | fails | invalid |
| 8 | Mobile shape, unused block 40 | 40XXXXXX | passes | invalid |
| 9 | Fixed line | 22XX XXXX | fails | valid, FIXED_LINE |
| 10 | Toll-free range | 180X XXX | fails | valid, TOLL_FREE |
Rows 8 and 10 are the ones to remember:
- Row 8:
40passes the loose regex, but only41is a mobile range in CITRA's plan, and libphonenumber rejects it too. - Row 10: the
18corporate number is valid, asTOLL_FREEin the library. It can't receive an SMS.
For a whole file, our free phone list cleaner normalises numbers to E.164 and removes duplicates in your browser. Our Python and JavaScript guides cover more languages. Kuwait's metadata changes often (see "What changed recently?"), so update the library regularly; each update moves numbers from citra_range to mobile.
Does number portability change the carrier?
Yes. Mobile number portability (MNP) started on Saturday 15 June 2013, as a Ministry of Communications initiative before CITRA existed. Zain said customers could switch at its branches, keep their number and pay nothing for the move (Zain, 2013). CITRA was set up by Law No. 37 of 2014 and now regulates porting.
In December 2025 CITRA announced a full regulatory framework for portability. As reported in the Kuwaiti press (The Times Kuwait, 2025):
- Who can port. Prepaid, postpaid and data lines, 50 days after first activation, and again 90 days after the previous port. A user can switch between prepaid and postpaid while porting.
- One stop. The receiving operator handles the whole port, and the old contract ends automatically when it is done.
- 12 hours. A port must be completed within 12 hours, and the user can choose a porting date up to 30 days after applying.
- Fees. The receiving operator may charge up to 5 Kuwaiti dinars per successful port; the donor operator may charge nothing. CITRA can change the cap.
- No win-back pressure. Operators may not contact users to influence their decision or offer incentives without CITRA's approval.
- A central database. Licensed intermediaries run a central portability database and report on technical performance weekly and monthly. Breaches are punished under Law No. 37 of 2014.
A separate decision signed by CITRA's chairman requires the mobile operators to report every month, within the first eight working days, all ports of the previous month: successful, rejected and cancelled, plus numbers returned to their range holders (Arab Times, 2025). We found no published porting totals.
Our MNP atlas has no verified row for Kuwait yet.
The facts above are what we would add to the atlas. Our MNP atlas compares portability across countries, and how to check if a phone number is ported shows the lookup. With thirteen years of porting and a 12-hour process, the first digit is only a hint. For routing, pricing or fraud rules, look up the current network per number.
What are the rules for SMS, caller ID and personal data?
These summarise the decisions and reports as we read them on 2026-11-08. Not legal advice; ask counsel how they apply to you.
Personal data: CITRA's regulation and the e-commerce law
Kuwait has no general personal data protection law. Two instruments do most of the work (DLA Piper, 2025):
- The Data Privacy Protection Regulation. CITRA issued it by Decision No. 26 of 2024 on 7 February 2024. It replaced Decision No. 42 of 2021 and its amendments, and applies from its publication in the official gazette (CITRA decision, Arabic). It covers CITRA's licensed service providers, under a definition broad enough to reach websites, apps and cloud services that process personal data. Providers must show their terms in Arabic and English, state the purpose and obtain consent before providing the service, delete the data when consent is withdrawn, record transfers abroad and the countries involved, and report a personal data breach to CITRA and the people affected within 24 hours.
- The E-Commerce Law, Law No. 20 of 2014. It forbids collecting or processing personal data without the person's consent, and forbids passing it on without consent or a court order.
DLA Piper lists "no specific provisions" for electronic marketing. So there is no Kuwaiti equivalent of an opt-in rule for SMS in a statute, but consent is still the basis for processing the number at all.
Sender names and bulk SMS
Business SMS in Kuwait goes out from registered alphanumeric sender names, not from ordinary mobile numbers. CITRA's Decision No. 165 of 2024 (10 June 2024) requires the mobile operators to interconnect their bulk SMS services and fixes the settlement rate between operators at 5 fils per message (CITRA decision, Arabic). That is a wholesale rule between networks, not the price a business pays.
The registration rules themselves are set by the operators. Messaging providers document them like this (AWS; Unifonic; Clickatell):
- Register the sender name first. Every sender name is pre-registered with the networks. A local company needs its Kuwaiti commercial registration or trade licence, the civil ID of an authorised signatory and a signed, stamped no-objection letter on company letterhead; providers ask for separate letters for Ooredoo and Zain, and also cover stc and Virgin.
- Promotional names are marked. Promotional sender names must begin with
AD-, and promotional and transactional names are registered separately. A name registered as transactional may not carry promotional content. - No numbers as senders. Short codes and long numbers aren't supported for business SMS; use an alphanumeric name.
- Opt-in and opt-out. Marketing messages must include opt-in and opt-out instructions.
- Content limits. Political, adult and gambling content is not allowed.
Providers differ in details, so check yours before a campaign.
Arabic text uses a different SMS encoding from Latin text, so a message splits into more parts sooner. Our SMS character counter shows how many parts a bilingual message will take.
Caller names and "My Numbers"
CITRA issued a bylaw on caller name identification in public telecom networks by Decision No. 28 of 2024 on 13 February 2024 (CITRA decision, Arabic). The decision is public; we couldn't extract the bylaw's text, so we don't describe its details.
On 16 August 2026 CITRA launched "My Numbers" in the government's Sahel app. Citizens and residents can see every mobile number and telecom service registered under their name with any operator, and CITRA asked everyone to review the list (CITRA, 2026). For a business, that confirms that a Kuwaiti line is registered to a named person. It doesn't tell you who uses a number today, and our checks never return a subscriber's name.
If you send customer numbers to a check service, decide with counsel which consent or contract covers it and how the transfer rules apply to a provider outside Kuwait. Our posts on whether a phone number is personal data and on consent for WhatsApp checks give the baseline we work to: your own customers, a stated purpose, minimal data and honoured objections.
Which messaging apps and channels reach people in Kuwait?
We found no official statistics on messaging-app use in Kuwait, so measure your own customers rather than trusting a market average. SMS reaches every active mobile and remains the fallback for OTP, but only from a registered sender name.
Customer lists in Kuwait often mix +965 numbers with residents' home-country numbers. Normalise every row with its own country, not a default of KW, and check foreign numbers with their own country's rules. Our Qatar guide covers the neighbouring market, which has a similar flat 8-digit plan.
The method is the same as in our channel-by-country guide: check which apps your opted-in customers are registered on, route each one to the channel they use, and keep SMS as the fallback. To open a chat without saving a contact, our WhatsApp link generator builds a wa.me link from the E.164 number.
How do I check WhatsApp registration for a Kuwaiti customer list?
Classify every row with classify_kw() first. A check tells you whether a number is registered at the time of the check. It can't tell you whether the person wants your messages:
| Answer | What it means | What to do |
|---|---|---|
registered: true | The number has a WhatsApp account at checked_at | Offer WhatsApp to customers who opted in to it |
registered: false | No account at checked_at | Use SMS or another channel |
unknown | No conclusive answer (not billed) | Keep the current channel; retry later |
invalid_number | Failed format validation (not billed) | Fix the data at the source |
See WhatsApp number check for the fields. It runs in real time and in bulk jobs.
What changed recently?
The rows for KW and +965 in our numbering-plan changes dataset, built from libphonenumber's release notes:
| Change named in the release notes (2019-01-08 to 2026-09-23) | Releases |
|---|---|
| Numbering-plan metadata (validation, lengths, types) | 13 |
| Original-carrier prefix data | 2 |
| All | 15 |
Latest numbering-plan updates for KW: 2025-07-02 (v9.0.9), 2024-02-07 (v8.13.30), 2023-03-09 (v8.13.8), 2022-09-08 (v8.12.55), 2022-02-09 (v8.12.43).
Thirteen metadata updates since 2019 is a lot for one flat plan. It fits the picture above: the library adds Kuwaiti blocks as they come into use, while CITRA's plan already allows them. The other changes were in the market and the rules:
- 2013: mobile portability started (15 June).
- 2014: Law No. 37 set up CITRA, and the E-Commerce Law (No. 20) required consent for personal data.
- 2019: VIVA rebranded as stc (December).
- 2021: CITRA's earlier data privacy regulation (Decision No. 42 of 2021), and the current numbering layout notified to the ITU (August).
- 2022: Virgin Mobile launched on the
41range (May). - 2024: the new Data Privacy Protection Regulation (7 February), the caller name identification bylaw (13 February) and the bulk SMS interconnection decision (10 June).
- 2025: the portability framework (December).
- 2026: "My Numbers" in the Sahel app (16 August).
What can MobileValidate check for Kuwaiti numbers?
Generated from our public catalog:
Catalog data as of 2026-11-07.
| Check | Accepts Kuwait numbers | Notes |
|---|---|---|
| Format and country (every lookup) | Yes | Each number is parsed first; an invalid number returns invalid_number and is never billed. |
| Carrier lookup (beta) | Yes | Line type and current network where data exists; no data means unknown, not billed. Real time and bulk. |
| US/CA carrier lookup (premium) | No (US, CA only) | Answers unsupported_country for other countries, not billed. |
| Live network status (HLR) | Yes | Live reachability, porting, roaming (true or false) and current network; unknown is free. Real time and bulk. |
| Number portability (MNP) | Yes | Ported or not ported, and the current network code; unknown is free. Real time and bulk. |
| Spam reputation | Limited access | All countries except sanctioned ones; report coverage is strongest in North America and Europe. |
| Messaging apps | Yes: WhatsApp, Telegram, Viber*, Signal*, iMessage*, RCS*, LINE*, Zalo*, Botim*, Facebook Messenger* | Registered, not registered or unknown; unknown is free. |
| Social networks | Yes: Facebook, Instagram, Threads, X (Twitter), TikTok*, Snapchat* | Not for Kuwait numbers: LinkedIn (US, IN only). |
| Online accounts (Apple, Amazon, Microsoft, Netflix) | Yes: Apple, Amazon, Microsoft, Netflix | Registered, not registered or unknown; unknown is free. |
* bulk jobs only. The live list is at GET /v1/services.
A lookup returns network and registration facts. It never returns a subscriber's name or address, and we don't offer "number details" searches.
One limit to know: our API parses numbers with the same library, so as of 2026-11-08 a number in the citra_range group above comes back as invalid_number. That answer is never billed, but it means we can't check those numbers yet either. Numbers that libphonenumber knows, which is most numbers in use, run through every check in the table.
For Kuwaiti numbers, a live network status (HLR) check shows whether a number is reachable right now, whether it has been ported and which network serves it. An MNP lookup answers porting alone, and the carrier lookup gives the line type. Our free MCC-MNC lookup turns the network code in an answer into an operator name. For channels, WhatsApp and Telegram run in real time and in bulk; the starred checks run in bulk jobs only.
How do I start for free?
- 20 free real checks. Every live account can run 20 phone numbers and 10 e-mail addresses through the real checks for free on the dashboard's Try it page. Use them on your own number first.
- A free carrier lookup. The carrier lookup page has a public form for 3 lookups a day, no sign-up needed.
- Free tools. The phone number validator and phone list cleaner check format in your browser; all of them are on the tools page.
- A free test key. Get a test key for the sandbox. It gives fixed test answers so you can build every branch of your code; see test mode.
- A free estimate.
POST /v1/jobs/estimatetakes the same body as a job, checks nothing and shows the maximum cost before you start. - Then add credit. Create your account; approval is automatic. Top-ups of larger amounts get 5% to 10% bonus credit; see pricing. Unknown, invalid and duplicate results are never charged.
A bulk flow for a Kuwaiti customer list
- Export the numbers you hold with consent or another lawful basis, one per row.
- Classify them with
classify_kw(), or upload them as they are withdefault_country=KW, so500 XXXXXis read as Kuwaiti. Keep thecitra_rangerows aside for now. - Run
POST /v1/jobs/estimatewith your checks, for examplehlrandwhatsapp, and read the cost breakdown. - Start the job, then download the results as CSV or NDJSON.
curl https://api.mobilevalidate.com/v1/jobs \
-H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
-F file=@customers.csv -F checks=hlr,whatsapp -F default_country=KWFor single numbers, here is a small reachability check against the real-time endpoint. It uses the public sandbox key mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym and our test values. The sandbox accepts only those UK drama numbers, so the example uses them; with a live key, pass the E.164 numbers that classify_kw() marked mobile.
import os
import requests # pip install requests
API = "https://api.mobilevalidate.com/v1/lookup"
KEY = os.environ["MOBILEVALIDATE_API_KEY"]
def reachability(numbers: list[str]) -> dict[str, tuple]:
"""Per E.164 number: (reachable or unreachable, ported?, current network MCC-MNC). None means we don't know."""
r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
json={"numbers": numbers, "checks": ["hlr"], "wait": 5})
r.raise_for_status()
out = {}
for row in r.json()["results"]:
hlr = row["checks"]["number.hlr"]
a = (hlr["attributes"] or {}) if hlr["status"] == "completed" else {}
out[row["e164"]] = (a.get("status"), a.get("ported"), a.get("mcc_mnc"))
return out
for number, info in reachability(["+447700900001", "+447700900002", "+447700900003"]).items():
print(number, info)We ran it against the sandbox on 2026-11-08. It printed:
+447700900001 ('reachable', False, '23415')
+447700900002 ('unreachable', False, '23415')
+447700900003 (None, None, None)The first test value is reachable and not ported, the second exists but is unreachable (switched off or out of coverage), and the third stands for a timeout: all three fields are None and it isn't billed. Keep None apart from False: None means we don't know. Requests with 20 or more consecutive numbers are refused (403 suspected_enumeration), and our acceptable use policy forbids finding recipients for unsolicited messages. People can object through our opt-out form.
What are the key takeaways?
- Kuwaiti numbers have 8 digits with no area code and no trunk prefix. Mobiles start with
41,5,6or9, landlines with2, and18corporate numbers have 7 digits. In E.164, put+965in front and change nothing else. - CITRA's plan opens the whole
41,5,6and9ranges; libphonenumber knows only the blocks seen in use. A number it rejects may still be real: mark it unconfirmed instead of deleting it. - The first digit shows the original operator at most. Porting has existed since 15 June 2013, and the 2025 framework makes a port a 12-hour, one-stop process.
- Kuwait has no general data protection law. CITRA's 2024 Data Privacy Protection Regulation and the 2014 E-Commerce Law make consent the basis for processing a number.
- Business SMS needs a sender name registered with the networks; promotional names begin with
AD-, and marketing messages need opt-in and opt-out instructions. - Check WhatsApp or network status only for customers you hold lawfully, and never treat registration as consent.
Platform, regulator and company names are used descriptively. MobileValidate is not affiliated with any of them.
Sources
- Kuwait National Number Plan (country code +965), 10 August 2023 — Communication and Information Technology Regulatory Authority (CITRA), Kuwait, 2023
- Kuwait (country code +965): communications of 30 August 2021 and 20 September 2022 — International Telecommunication Union (ITU-T), national numbering plans, 2022
- Zain: mobile number portability in Kuwait is a step forward (press release, 14 June 2013) — Zain Kuwait, via Zawya, 2013
- Kuwait tightens telecom rules with comprehensive MNP framework (29 December 2025, reporting Al-Qabas) — The Times Kuwait, 2025
- Submit report on mobile number portability (28 December 2025) — Arab Times (Kuwait), 2025
- Decision No. 26 of 2024 issuing the Data Privacy Protection Regulation, 7 February 2024 (Arabic) — Communication and Information Technology Regulatory Authority (CITRA), Kuwait, 2024
- Data protection laws of the world: Kuwait (last modified 4 February 2025) — DLA Piper, 2025
- Decision No. 165 of 2024 on the interconnection of bulk SMS, 10 June 2024 (Arabic) — Communication and Information Technology Regulatory Authority (CITRA), Kuwait, 2024
- Decision No. 28 of 2024 issuing the bylaw on caller name identification in public telecom networks, 13 February 2024 (Arabic) — Communication and Information Technology Regulatory Authority (CITRA), Kuwait, 2024
- CITRA launches "My Numbers" service via Sahel app (16 August 2026) — Communication and Information Technology Regulatory Authority (CITRA), Kuwait, 2026
- VIVA rebrands as stc (press release, December 2019) — Kuwait Telecommunications Company (stc), via Zawya, 2019
- Kuwait welcomes its first MVNO courtesy of VMMEA (31 May 2022) — Developing Telecoms, 2022
- Kuwait sender ID registration (AWS End User Messaging SMS user guide) — Amazon Web Services, 2026
- Kuwait sender ID registration requirements — Unifonic documentation, 2026
- Kuwait: SMS country regulations and restrictions — Clickatell, 2026
- libphonenumber carrier prefix data for +965 (965.txt) and PhoneNumberMetadata.xml (region KW) — libphonenumber project (Apache License 2.0), 2026
Frequently asked questions
How many digits is a Kuwait phone number?
Eight. Mobile and landline numbers in Kuwait have 8 digits, with no area code and no trunk prefix, for example 500 XXXXX or 9XXX XXXX. In international form you put +965 in front: +965 500 XXXXX, stored as +96550XXXXXX. Corporate numbers starting 18 have 7 digits, and short numbers have 3.
What is the +965 country code and how do I write a Kuwait number for WhatsApp?
+965 is Kuwait's country calling code. Because Kuwait has no trunk prefix, you add +965 to the 8 digits and change nothing else: 500 12345 becomes +965 500 12345, stored as +96550012345. That E.164 form works for WhatsApp, SMS APIs and every other platform. From abroad you can also dial 00965.
Which prefixes are mobile numbers in Kuwait?
CITRA's numbering plan says every 8-digit number starting 41, 5, 6 or 9 is a valid mobile number: 5 for stc, 6 for Ooredoo, 9 for Zain and 41 for Virgin Mobile. Numbers starting 2 are fixed lines. Because numbers can be ported, the first digit shows only the original operator.
Why does libphonenumber reject some Kuwaiti mobile numbers?
Because its Kuwait metadata lists only the blocks known to be in use, for example most of 50, 55, 66, 90 and 99, but only small parts of 52, 57, 61 or 93. CITRA's plan opens the whole 5, 6 and 9 ranges. A number in a newly opened block can therefore be real and still fail validation until the library is updated. Treat it as unconfirmed, not as a typo.
Can I keep my number when I switch operator in Kuwait?
Yes. Mobile number portability started on 15 June 2013. Under CITRA's framework announced in December 2025, prepaid, postpaid and data lines can port 50 days after activation and again 90 days after the last port. The receiving operator handles everything, the port must finish within 12 hours, and the fee is capped at 5 dinars.
What are the rules for business SMS in Kuwait?
Kuwait has no specific anti-spam law, but business SMS goes out only from alphanumeric sender names registered with the networks. Messaging providers report that promotional names must begin with AD-, that short codes and long numbers aren't supported as senders, and that marketing messages need opt-in and opt-out instructions. Political, adult and gambling content is not allowed.
Can I check whether Kuwaiti customers are on WhatsApp?
Yes, for numbers you hold with consent or another lawful basis, such as your own customers. A MobileValidate WhatsApp check answers registered, not registered or unknown with a checked_at date; unknown is never billed. It returns no name or profile, and requests that look like scans of number ranges are refused.
Related services and guides
More from the blog
All articlesGuides
Phone numbers by country: formats, portability, channels and rules
How phone numbers differ by country: formats and E.164, numbering changes, portability, line types, messaging channels, and a dated tracker of calling and texting rules.
11 min read
Developers
E.164 phone number format: a practical guide for developers
How to normalize phone numbers to E.164 in JavaScript and Python, the pitfalls that break deduplication, and how the MobileValidate API normalizes input.
9 min read
Developers
E.164 regex: why a pattern is not enough to validate phone numbers
The common E.164 regex accepts impossible numbers. Real counterexamples, the shortest valid international numbers, and what to use a regex for instead.
7 min read

