What E.164 format is
ITU-T Recommendation E.164 is the international numbering plan that gives every phone number in the world a unique form. An E.164 number is the country code (1 to 3 digits) followed by the national significant number, up to 15 digits in total. Written for machines it carries a leading plus sign and nothing else: no spaces, brackets, dashes or the trunk prefix 0 that you dial at home.
The same UAE mobile can appear as 050 123 4567, +971 50 123 4567, 00971501234567 or 971-50-1234567 in a CRM export. Only one of those is E.164: +971501234567. Storing every number that way makes them comparable, so duplicates can be found and any SMS, WhatsApp or voice API will accept them.
- Country code: +971 UAE, +966 Saudi Arabia, +974 Qatar, +965 Kuwait, +973 Bahrain, +968 Oman, +20 Egypt, +44 UK, +1 US and Canada.
- Drop the trunk prefix: 050 in the UAE becomes 50 after +971, and 07400 in the UK becomes 7400 after +44.
- Replace the international call prefix (00 in most countries, 011 from the US and Canada) with +.
- Maximum length is 15 digits, not counting the plus sign.
GCC and MENA phone number formats
Gulf numbering plans look alike but differ in length and in whether a trunk 0 is used. That is why a list mixing local formats from several countries cannot be cleaned without a default country and full numbering-plan data.
- UAE (+971): mobiles are 9 digits starting with 5 (50, 52, 54, 55, 56, 58), dialled locally as 05X XXX XXXX. Landlines are 8 digits, e.g. 04 for Dubai and 02 for Abu Dhabi.
- Saudi Arabia (+966): mobiles are 9 digits starting with 5, written locally as 05X XXX XXXX. +966 50 123 4567 is the E.164 form.
- Qatar (+974), Kuwait (+965), Bahrain (+973) and Oman (+968): 8-digit numbers with no trunk 0, so the local number is simply the national number. Mobiles start with 3, 5, 6 or 7 in Qatar, 5, 6 or 9 in Kuwait, 3 in Bahrain and 7 or 9 in Oman.
- Egypt (+20): mobiles are 10 digits starting with 10, 11, 12 or 15, written locally as 01X XXXX XXXX.
- Arabic-Indic digits (٠١٢٣٤٥٦٧٨٩) and Persian digits (۰۱۲۳۴۵۶۷۸۹) are common in forms filled in on Arabic keyboards. They are the same numbers and must be converted to ASCII digits before any API will accept them.
Why clean lists matter for deliverability and cost
Every invalid, duplicate or landline number in a campaign list is wasted money or a wasted message. Many SMS routes bill per submitted message, so a number with a missing digit is still paid for. A duplicate means the same customer gets your offer twice, which drives opt-outs and spam reports, and a high share of failed messages hurts the reputation of your sender ID with operators.
For WhatsApp, a badly formatted number simply fails: the Cloud API expects the full international number, and a local 050… with no country code is either rejected or sent to the wrong country. Cleaning the list before import also makes your delivery reports meaningful, because failures then point to real issues such as inactive numbers rather than typos.
- Remove duplicates after normalising, not before: 0501234567 and +971501234567 are the same person.
- Drop landlines from SMS and WhatsApp sends; route them to voice instead.
- Keep invalid rows flagged in a separate file so the source system can be fixed.
- Format validation proves a number could exist, not that it is active. For that, use an HLR lookup or delivery reports.
How this formatter works
The tool uses libphonenumber-js with Google's full libphonenumber metadata, the same numbering-plan data used by Android and most messaging platforms. It checks each number against the ranges allocated in its country and returns the line type where the plan defines it: mobile, fixed line, toll-free, VoIP, premium rate or shared cost. In the US and Canada, mobile and fixed numbers share the same ranges, so the type is shown as fixed line or mobile.
Before parsing, it converts Arabic-Indic, Persian and full-width digits, removes invisible direction marks that Arabic text often carries, strips tel: and wa.me prefixes, and turns 00 into +. Numbers already starting with a country code but missing the plus, such as 971501234567, are recognised too. Everything runs in your browser: lists of up to 50,000 rows are processed in small chunks on your device and are never uploaded.
E.164 or digits only: which format to use
Use E.164 with the plus (+971501234567) when storing numbers in a CRM or database, in tel: links and for most SMS and voice APIs. Use digits only (971501234567) where the plus is not allowed: wa.me click-to-chat links, the WhatsApp Cloud API wa_id, and SMS APIs that take the destination as a plain number, such as the OmniChannels.ai SMS API.
Whichever you choose, keep it consistent across systems. Mixing formats is the most common reason the same contact appears twice and why imported lists fail validation.
