Phone Number Extractor
Paste text and every phone number in it comes back normalized to E.164, the +14155550134 form that telephony systems, CRMs and messaging APIs actually want. A default country resolves the numbers written without one, trunk zeros are dropped, and the deduplication runs on the normalized value rather than on the punctuation.
Try an example loads a support rota with the same number written four different ways.
Stripping the punctuation is not normalizing
The common approach is to add a column holding the digits with the brackets and dashes taken out. That is not normalization, and you can see why with one example. Here is the same London landline three ways, and the same New York number three ways:
written digits only E.164
020 7946 0018 02079460018 +442079460018
+44 20 7946 0018 442079460018 +442079460018
00 44 20 7946 0018 004479460018 +442079460018
(415) 555-0134 4155550134 +14155550134
415.555.0134 4155550134 +14155550134
+1 415 555 0134 14155550134 +14155550134
In the digits-only column, six values. In the E.164 column, two. If you deduplicate on digits-only you remove one duplicate out of four. If you feed digits-only to a messaging API it rejects most of them. E.164 is the only representation where the same phone is the same string.
Getting there needs a default country, which is why that is the first control on the page. A number written 020 7946 0018 is only meaningful next to the knowledge that it is British; the same digits mean nothing in the United States, where numbers do not start with a zero.
How a written number becomes E.164
Five rules, tried in order. The first one that fits wins.
- It starts with a plus. It already carries its country code. Keep the digits, add the plus back.
- It starts with 00, or with 011 in a North American context. That is an international access prefix, which means the same thing as a plus. Drop it and treat the rest as a full international number.
- It starts with a zero and the default country uses a trunk prefix. The United Kingdom, Germany, France, India, Australia and most of Europe write national numbers with a leading zero that is dropped when dialing internationally. Strip it, prepend the calling code.
- It is already the right length for a national number in the default country. Ten digits with a United States default, nine with a French one. Prepend the calling code.
- It starts with the default calling code and the rest is the right length. Somebody wrote the country code without the plus. Treat the whole thing as international.
Anything that fits none of these comes back with an empty E.164 cell and a reason, and a note above the table quotes the first one. Usually the fix is the default country: a list of German numbers read with a United States default will fail on the length rule, and one click puts it right.
Not everything with digits in it is a phone number
An extractor that matches any run of digits turns every invoice number, order id, date range and dollar figure in the document into a phone number. This one requires at least seven digits inside a run made of digits and the usual separators, which is the shortest plausible national number, and then checks that the result lands between eight and fifteen digits once the country code is on it. Fifteen is the E.164 maximum and it is a hard rule, not a heuristic.
On the sample, that means:
020 7946 0018,07700 900123,(415) 555-0134and the rest are found.Invoice 12345andticket 987654are not: six digits is below the floor.2026-09-03is not: eight digits, but they normalize to a fifteen-digit international number that fails the length check for the default country, and the reason says so.
You will still get the occasional false positive from a long reference number. The Drop what will not normalize option is the lever: leave it off and everything comes through with an empty E.164 column for the ones that failed, so you can see and judge them. Turn it on and the output holds only numbers that resolved cleanly.
The country list, and what each entry knows
Thirty-three countries, chosen to cover what actually lands in a spreadsheet rather than to be exhaustive. Each one carries two facts the normalization needs: its calling code, and how many digits a national number has. A few also carry the fact that they write national numbers with a leading zero.
| Country | Calling code | National digits | Trunk zero |
|---|---|---|---|
| United States, Canada | +1 | 10 | no |
| United Kingdom | +44 | 9 or 10 | yes |
| Germany | +49 | 9, 10 or 11 | yes |
| France | +33 | 9 | yes |
| India | +91 | 10 | yes |
| Australia | +61 | 9 | yes |
| Spain | +34 | 9 | no |
| Singapore | +65 | 8 | no |
The default country only affects numbers written without a country code. A +49 number in a document read with a United States default still normalizes correctly to Germany, and the country column says DE.
What this cannot tell you
Whether the number is assigned, whether it is a mobile or a landline, and who it belongs to. All three need a carrier database, and any tool that claims them from a regular expression is inferring from number ranges that change. What you get here is the format right, consistently, so that the system you feed it to can do its own lookup.
The country column is a genuine inference from the calling code and is reliable, with one caveat worth knowing: +1 covers the United States, Canada and about twenty Caribbean territories, so a +1 number is reported as US because that is the first match on the list. If the distinction matters, the area code is the thing to look at and this page leaves it intact for you.
Frequently Asked Questions
What is E.164 and why does everything want it?
It is the ITU standard for writing a phone number unambiguously: a plus, a country calling code, and the national number with no spaces, no punctuation and no trunk prefix, up to fifteen digits total. Every telephony API, SMS gateway and CRM asks for it because it is the only format where one phone is one string, regardless of who typed it or where they were.
Why does the same number appear twice in my output?
Either deduplication is off, or the two are genuinely different once normalized. Check the E.164 column: if the two rows show the same value, deduplication is off. If they differ, one of them normalized against the wrong assumption, and the default country is the setting to change.
How do I keep the original text as well as the normalized value?
Leave "Keep the original text" on, which is the default. You get a phone column holding the number exactly as it was written, an e164 column holding the normalized form, and a country column. That way you can always trace a normalized value back to what produced it.
It missed a number that is clearly there.
Check its digit count. Runs of fewer than seven digits are ignored deliberately, because the alternative is treating every order number in the document as a phone number. If it is longer than seven, the extension may be the problem: 555-0134 x22 is read as one long number that fails the length check. Extensions are not part of E.164 and have to be handled separately.
Can I use it on a spreadsheet column?
Yes. Copy the column and paste it, or drop the whole CSV on the box. Every cell is scanned, so numbers in a free-text notes column are found alongside ones in a dedicated phone column.
My country is not in the list.
Write the numbers with a country code, or paste them with a leading plus, and the default country never comes into it: rule one applies and they normalize correctly whatever the dropdown says. The list covers the countries whose national-format numbers turn up most often in the files people bring here.
Does anything I paste leave my computer?
No. There is no upload endpoint on this page and no network request in the code that does the work. JavaScript in your own tab reads the text, processes it and hands back the result. Nothing is stored between visits either, so reloading gives you an empty box again. You can confirm it by opening your browser's network panel and watching it stay quiet while you work.
Related
One phone, one string
Free, no account, no upload. Paste the text, pick the country, take the E.164 column.
Back to the extractor