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-0134 and the rest are found.
  • Invoice 12345 and ticket 987654 are not: six digits is below the floor.
  • 2026-09-03 is 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.

CountryCalling codeNational digitsTrunk zero
United States, Canada+110no
United Kingdom+449 or 10yes
Germany+499, 10 or 11yes
France+339yes
India+9110yes
Australia+619yes
Spain+349no
Singapore+658no

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.

One phone, one string

Free, no account, no upload. Paste the text, pick the country, take the E.164 column.

Back to the extractor