Logo

MonoCalc

/

Phone Number Extractor

Text

Phone numbers are personal data, so everything runs in your browser. Nothing you paste is uploaded.

Load a sample:

Text to scan

463 chars465 B
Drop a text, CSV, Markdown, log or JSON file here

.txt, .csv, .md, .log, .json, up to 5.00 MB, read in your browser

Shortcuts: Ctrl/Cmd + Enter extracts now, Ctrl/Cmd + Shift + C copies the result.

Extracted numbers

7 numbers

Total matches

9

before de-duplication

Unique numbers

7

2 duplicates removed

Valid

7

passed the numbering plan

Rejected

0

failed validation or heuristics

Filtered out

0

removed by your filters

Countries

5

top: United States

With extension

1

ext, extn, x or # captured

Possible only

0

right length, unassigned prefix

Avg confidence

8.9 / 10

mean score of the kept numbers

Scanned

463 chars

61 words · 11 lines

Parsing and output

Used for any number written without a + country code.
+14155550132 — the database-safe form.
Must pass the numbering plan for its country.
Order of the final list.
one per line
Placed before each number, up to 20 characters.
Quote entries for SQL, JSON or a code literal.
Replaces each number in the redacted view, 1–40 characters.

Filters

Number type

No selection means every type is kept. Click a country bar in the results below to filter by country.

Comma-separated ISO codes, e.g. US, CA, GB.
Counts the E.164 digits — country code plus national number — from 4 to 20.
E.164 caps a number at 15 digits.
0 keeps everything, 10 keeps only perfect matches.
One regular expression per line, tested against the E.164 value and the original text. Example: ^\+1555 drops the US placeholder range.

Result detail

Global contact sheet — Q3 -------------------------- Priya Raman (sales, US) (415) 555-0132 London desk +44 20 7946 0958 Sydney office +61 2 9374 4000 Mumbai support +91 98765 43210 Berlin studio +49 30 901820 Toll-free (North America) 1-800-555-0199 Front desk with extension +1 212-555-0143 ext. 4471 Duplicate of Priya, messy 415.555.0132 Old fax, no longer in use 0044 20 7946 0958

Valid

Possible

Rejected candidate

Removed by a filter

About This Tool

Phone Number Extractor – Pull Every Number Out of Any Text

Telephone numbers almost never arrive in a tidy column. They hide inside email threads, scraped directory pages, CRM notes fields, invoices, chat logs and meeting minutes, written in whatever shape the author felt like at the time: (415) 555-0132, +1 415-555-0132, 415.555.0132, +91 98765 43210, 0044 20 7946 0958, Tel: 020 7946 0958 ext. 221. Reading a ten-thousand-word document by eye to find them is slow and unreliable. This phone number extractor scans the whole block in one pass and returns a clean, de-duplicated, validated list.

What E.164 is and why it matters

E.164 is the ITU standard that gives every telephone number on earth one unambiguous written form: a +, the country calling code, then the national significant number, with no spaces, punctuation or trunk prefix, and a maximum of fifteen digits in total. The London number written locally as 020 7946 0958 becomes +442079460958: the leading 0 is a trunk prefix used only for domestic dialling, so it is dropped and replaced by +44. Storing numbers this way is what makes them comparable, de-duplicable and dialable from anywhere, which is why E.164 is the default output format here.

How the extraction pipeline works

The text is normalised first, so full-width 415, Arabic-Indic ٤١٥ and Devanagari digits become ASCII, and non-breaking spaces, en dashes and em dashes become ordinary separators. Each substitution is one character for one character, which keeps every character offset valid — that is what lets the redaction view splice a mask back into your own text without shifting anything. A scanner then collects phone-shaped digit runs, re-cuts any run that accidentally swallowed two adjacent numbers, and parses each candidate: a leading + or 00 selects the country from its calling code, everything else is read using your default region.

Valid, possible and loose

Matching a pattern is not the same as being a real number. Every candidate is checked against the numbering plan of the country it resolved to — the lengths that regulator assigns and the prefixes it has allocated. Valid only keeps numbers that pass both tests. Possible keeps anything with a plausible digit count but an unrecognised prefix, which catches newly issued ranges. Loose keeps any phone-shaped run inside the four-to-twenty digit window that no plan sits outside. Whatever a mode drops is listed in the rejected panel with a plain-English reason, so nothing disappears silently.

Why regex-only extraction is unreliable
A hand-rolled pattern such as \d{3}-\d{3}-\d{4} matches 123-456-7890 — an area code that was never assigned — while missing +44 20 7946 0958 entirely. It also happily matches dates, IP addresses, version strings and card numbers. Validating against real numbering-plan lengths and prefixes is what separates a contact list from a pile of false positives.

Classification, extensions and confidence

Each number is labelled mobile, fixed line, toll-free, premium rate, shared cost or unknown, using the prefix blocks each regulator publishes — 7 for UK mobiles, 1[5-7] for German mobiles, 8(00|33|44…) for North American toll-free. Trailing extension markers ext, ext., extn, x and # are captured and carried through, so RFC 3966 output renders as tel:+1-212-555-0143;ext=4471. A deterministic confidence score out of ten sums five points for passing validation, two for an explicit country code, and one each for recognisable formatting, an exact plan length and clean word boundaries.

Shaping the list you actually need

De-duplication works on the normalised value, so (415)555-0132, 415.555.0132 and +1 415 555 0132 collapse into one entry with an occurrence count. Filters narrow the result by country, by line type, by digit window, by confidence threshold or by your own regular expressions — ^\+1555 drops the reserved placeholder range in one line. Sort by document order, ascending, descending or grouped by country, choose your separator, and wrap each entry with a prefix and suffix to paste straight into a SQL IN clause or a JSON array. Exports cover TXT, CSV with the full detail table, JSON and vCard.

A valid number is not a working line
Passing the numbering-plan check proves the number is well formed for its country, nothing more. The line may be disconnected, ported or belong to someone who never consented to be contacted. Verify before dialling, and respect GDPR, TCPA and equivalent consent and do-not-call rules — and remember the numbering-plan table here covers the world’s major plans, so an unusual country may validate on length alone.

Redaction and privacy

Because phone numbers are personally identifiable information, the tool also runs the pipeline in reverse: the redacted view returns your original document with every detected number replaced by a configurable mask, preserving the structure so the file is still readable when shared with a vendor or an auditor. The per-line mapping view pairs each source row with the numbers found on it, ready to join back to a spreadsheet. Every step — scanning, parsing, redacting, exporting — runs locally in your browser, and the share link carries your option settings only, never the text.

Frequently Asked Questions

Is the Phone Number Extractor free?

Yes, Phone Number Extractor is totally free :)

Can I use the Phone Number Extractor offline?

Yes, you can install the webapp as PWA.

Is it safe to use Phone Number Extractor?

Yes, any data related to Phone Number Extractor only stored in your browser (if storage required). You can simply clear browser cache to clear all the stored data. We do not store any data on server.

How does the phone number extractor work?

The text is first normalised so full-width, Arabic-Indic and Devanagari digits, non-breaking spaces and typographic dashes become their plain ASCII equivalents, one character for one character. A scanner then walks the whole document collecting digit runs that carry phone punctuation, splits any run that accidentally swallowed two adjacent numbers, and parses each candidate against a numbering-plan table: a leading + or 00 picks the country from its calling code, anything else is read using your default region. Each number is normalised to E.164, classified by line type, scored for confidence and then de-duplicated, filtered, sorted and formatted.

What is the difference between Valid only, Possible and Loose?

Valid only requires the national number to have a length the country's plan actually assigns and to start with an allocated prefix, so 415-555-0132 passes for the United States but 123-45 does not. Possible keeps anything whose digit count fits the plan's length range without checking the prefix, which is useful for new ranges the table has not caught up with. Loose keeps any phone-shaped digit run between 4 and 20 digits, including candidates sitting inside identifiers, so you trade precision for recall. Whatever a mode drops appears in the rejected list with the reason.

How is the confidence score calculated?

It is a deterministic sum out of 10, never a guess: passing the numbering-plan check adds 5, an explicit + country code adds 2, recognisable formatting such as parentheses, dashes or dots adds 1, a national number whose length exactly matches the plan adds 1, and clean boundaries — no letter immediately before or after the match — add 1. Set a minimum threshold to hide weak matches, and read the per-row meter to see which numbers deserve a manual look.

Why were a date, an IP address or a version string skipped?

Sequences such as 2024-01-15, 192.168.1.100, 1.2.3.4, sixteen consecutive digits and thirteen-digit barcodes are structurally indistinguishable from phone numbers once you strip the punctuation, so they are filtered out by a heuristic and listed in the rejected panel with the reason. If your text genuinely contains numbers in those shapes, turn off Skip dates, IPs and version strings and they will be parsed like everything else.

Can the extractor keep extensions and produce tel: links?

Yes. With Include extensions on, trailing markers such as ext, ext., extn, x and # are captured and kept with their number, so +1 212-555-0143 ext. 4471 survives intact. Choose the RFC 3966 output format and the same match is rendered as tel:+1-212-555-0143;ext=4471, which is exactly what an anchor href needs. E.164, International, National and an As-found passthrough are the other four output formats, and every number in the results table can be copied on its own.

Is my text uploaded anywhere?

No. Phone numbers are personally identifiable information, so every step runs locally in JavaScript: the text you paste, the files you drop on the page, the extracted numbers and the redacted output never leave your browser. The share link carries your option settings only — region, format, strictness and filters — and never the text or the numbers it contained.