How to Convert Phone Numbers to International Format in Bulk
You have a list of 500 phone numbers in local format — (555) 123-4567, 07911 123456, 0151 12345678 — and you need them all in international format with country codes. Your SMS platform, CRM, or API requires E.164 format (+15551234567) and rejects anything else.
Converting one number is easy. Converting hundreds while handling different source countries, missing country codes, and inconsistent formatting is where it gets tedious.
What Is International Format?
Phone numbers can be written in several standard formats:
| Format | Example | When to Use |
| ----------------- | ----------------- | ------------------------------------------------------- |
| E.164 | +15551234567 | APIs, databases, SMS platforms. The universal standard. |
| International | +1 555-123-4567 | Human-readable with country code |
| National | (555) 123-4567 | Within the same country |
| Local | 123-4567 | Within the same area code |
E.164 is the format most systems require. It starts with +, followed by the country code, then the subscriber number — no spaces, dashes, or parentheses. Every valid phone number has exactly one E.164 representation, which makes it ideal for deduplication and storage.
For a full reference on how different countries format their numbers, see our international phone number format guide.
Method 1: Paste into NumSwift (Fastest)
NumSwift's international phone number converter handles bulk conversion automatically:
- Set your default country (for numbers without country codes)
- Paste your entire list of phone numbers
- Get every number converted to international format with the correct country code
NumSwift uses Google's libphonenumber library to parse each number, determine the correct country code (or apply your default), and output clean international format. It handles mixed formats in the same list — some with country codes, some without, some with dashes, some with spaces.
For very large lists, the bulk phone number extractor processes thousands of numbers without slowing down.
Method 2: Excel Formula
If you know the country code and all numbers are from the same country:
Strip Formatting and Add Country Code
="+"&"1"&TEXTJOIN("", TRUE, IF(ISNUMBER(--MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)), MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1), ""))
This strips non-numeric characters and prepends +1 (US country code). Replace "1" with your country code.
Limitations:
- Only works when all numbers are from the same country
- Doesn't handle numbers that already have a country code (you'll get
+1+15551234567) - Can't validate whether the result is actually a valid phone number
- Doesn't remove trunk prefixes (the leading
0in UK numbers like07911123456should become+447911123456, not+4407911123456)
Handle the Trunk Prefix
For countries that use a leading 0 (UK, Germany, Australia, most of Europe):
="+"&"44"&IF(LEFT(B1,1)="0", MID(B1,2,LEN(B1)-1), B1)
Where B1 contains the digits-only version. This strips the leading zero before adding the country code.
Still limited: You need a separate formula for each country's rules, and it doesn't validate the result. For the full picture on spreadsheet phone number handling, see our Excel and Google Sheets guide.
Method 3: Google Sheets
Google Sheets adds regex support:
="+"&"1"®EXREPLACE(A1, "[^\d]", "")
Same approach as Excel but cleaner syntax. Same limitations apply.
Method 4: Python Script (For Large Lists or Mixed Countries)
When your list contains numbers from multiple countries or you need proper validation:
import phonenumbers
raw_numbers = [
"(555) 123-4567", # US local
"07911 123456", # UK local
"+49 151 12345678", # Germany international
"0412 345 678", # Australia local
]
default_country = "US"
for raw in raw_numbers:
try:
parsed = phonenumbers.parse(raw, default_country)
if phonenumbers.is_valid_number(parsed):
e164 = phonenumbers.format_number(
parsed, phonenumbers.PhoneNumberFormat.E164
)
international = phonenumbers.format_number(
parsed, phonenumbers.PhoneNumberFormat.INTERNATIONAL
)
print(f"{raw:25s} → {e164:20s} ({international})")
else:
print(f"{raw:25s} → INVALID")
except phonenumbers.NumberParseException as e:
print(f"{raw:25s} → PARSE ERROR: {e}")
Output:
(555) 123-4567 → +15551234567 (+1 555-123-4567)
07911 123456 → +447911123456 (+44 7911 123456)
+49 151 12345678 → +4915112345678 (+49 151 12345678)
0412 345 678 → +61412345678 (+61 412 345 678)
This handles:
- Numbers with and without country codes in the same list
- Trunk prefix removal (the
0in UK and Australian numbers) - Validation against real numbering rules
- Multiple output formats (E.164, international, national)
The default_country parameter tells the parser how to interpret numbers without a country code. Numbers that already include a + and country code are parsed regardless of this setting.
When You Have Mixed Countries Without Country Codes
This is the hardest case. If your list has 07911 123456 (UK) and 0412 345 678 (Australia) but neither includes a country code, no automated tool can reliably tell them apart without additional context.
Solutions:
- Separate by source. If UK numbers came from one spreadsheet and Australian numbers from another, process them separately with different default countries.
- Use NumSwift per batch. Set the country selector to UK, paste the UK numbers. Then switch to Australia and paste those.
- Add country codes at collection time. The best fix is preventive — ask for international format when collecting numbers. Include a note on your form: "Include country code (e.g., +44 for UK)."
E.164 Format: Why It Matters
Most professional systems require E.164:
- Twilio, MessageBird, Vonage — SMS APIs require E.164 for sending messages
- Salesforce, HubSpot — CRMs normalize to E.164 for deduplication
- WhatsApp Business API — Requires E.164 for all contacts
- Google Contacts — Stores numbers internally in E.164
If you store numbers in local format, you'll hit conversion issues every time you integrate with another system. Converting once to E.164 and storing that as the canonical format saves repeated cleanup.
Tips
-
Always store E.164 as the source of truth. Display numbers in friendly format for humans, but keep E.164 in your database.
-
Don't guess country codes. A 10-digit number could be US, Canadian, or several Caribbean countries. Use context (source of the data) to determine the correct country.
-
Test with known numbers. Before bulk-converting 500 numbers, test with 5 that you can verify. Confirm the output matches what you expect.
-
Watch for extensions. Numbers like
555-123-4567 ext. 890need the extension stripped before conversion. NumSwift handles this automatically; manual methods may not.
Related Guides
- International phone number format guide — country codes, trunk prefixes, and formatting conventions for 30+ countries
- How to clean and deduplicate a phone number list — normalize and remove duplicates after converting to international format
- Phone number formats explained — understand the difference between E.164, national, and local formats
- Phone number formats by country — country-specific formats and rules for 30+ countries
Bottom Line
For a quick bulk conversion, paste your numbers into NumSwift's international phone number converter — set the country, paste, and get clean international format instantly. For automated workflows, use Google's libphonenumber in Python or JavaScript to parse and format at scale. Either way, E.164 is the target format: one representation per number, universally accepted.