Paste text or drop a .txt, .csv, .log or .html file and pull out every email address, URL, and
domain in it — plus phone numbers, IP addresses, hashtags, and @handles if you want them. Each
result tab shows a count, you can dedupe and sort by first seen, alphabetically, or by
frequency, and export as plain lines, comma-separated, CSV with counts, or JSON. Everything
runs locally in your browser. Need to remove those values instead of collect them? Use the
PII Scrubber. To check the addresses you found, try the
Email Validator; to break one URL apart into its pieces,
use the URL Parser.
This is a text-cleanup utility, not a lead-generation tool. It only ever looks
at text you give it — it never crawls a site, follows a link, or resolves a domain, and no
network request is made at any point. Please use it on data you already own: support exports,
server logs, bounce reports, CRM dumps, a document you are auditing. Harvesting addresses from
other people's sites to send unsolicited email is exactly what CAN-SPAM's harvesting provisions
and GDPR's lawful-basis requirement exist to stop.
What this is actually good for
The everyday version of this job is a pile of text that has useful values buried in it: an
exported support thread where you need the sender addresses, a web server log where you need
the distinct client IPs, a marketing document where you want to audit every outbound link, a
bounce report where you need to pull the failing addresses into a suppression list, or an old
HTML page whose links you want to check before a migration. Scanning those by eye is slow and
lossy; a regex in a terminal works but has to be rewritten every time.
The Domains tab is the quiet favorite: it collects the hostname from every
email and every URL in one list with counts, which is a fast way to see which providers your
contacts actually use or which third parties a document links to. There is no public-suffix
list behind it, so mail.example.co.uk is reported as-is rather than being folded
into example.co.uk.
A found address is not a deliverable address
This tool matches shapes, not mailboxes. An address can look perfect and still bounce, and a
syntactically odd one can be perfectly live — see
valid email syntax doesn't mean deliverable
for why. Normalization matters for the same reason: by default only the domain half is
lowercased, because the local part is technically case-sensitive under RFC 5321 even though
almost every provider ignores that. If you want the aggressive, provider-aware normalisation
that folds Gmail dots and plus-tags together, that is a different job — the
Email Normalizer does it. Once you have a list, the
Line Sort / Deduplicate tool handles set operations like
subtracting an existing suppression list from a new one.
Built to survive a hostile file
Naive extraction regexes are a classic source of catastrophic backtracking: patterns shaped
like [\w.]+(\.[\w]+)*@ can hang a browser tab on a long run of repeated
characters. The matchers here avoid nested quantifiers over the same character class, cap
every repetition, and scan for email addresses with a hand-written pass anchored on each
@ instead of a regex. The test suite runs every extractor over 28 different 200 KB
adversarial inputs — long runs of a@, 1., www.,
unbalanced brackets — and fails if any of them takes more than a second, which each finishes in
roughly 10-25 ms. If that failure mode is new to you,
catastrophic backtracking explained
covers it.
Frequently asked questions
Is this an email-harvesting or lead-scraping tool?
No, and it cannot be used as one. The tool only reads text you paste in or a file you drop on the page — it never crawls a website, follows a link, resolves a domain, or makes any network request of its own. It is a cleanup utility for logs, exports, and documents you already have. Collecting addresses to send unsolicited commercial email is a bad idea legally as well as ethically: CAN-SPAM in the US specifically penalizes address harvesting, and under GDPR an email address is personal data you need a lawful basis to collect and use. Extract addresses from your own data, not from other people’s websites.
Does my text leave my browser?
No. The pattern matching is plain JavaScript running on the page, so your text, your dropped file, and the results all stay on your machine. There is no upload, no server round-trip, and no signup. You can confirm it by opening your browser’s network tab while the tool runs.
What counts as an email address here?
A pragmatic pattern, not full RFC 5322: a local part (letters, digits, dots and the usual specials like + _ - ’), an @, and a hostname whose last label is at least two letters. That covers plus-tags ([email protected]), subdomains, and internationalized names in Unicode letters. Trailing sentence punctuation such as . , ; : ) > ] is stripped, hosts with no dot like user@localhost are excluded unless you tick the option, and quoted local parts ("weird name"@example.com) and RFC comments are not supported. Finding a syntactically valid address also says nothing about whether mail to it would be delivered; the Email Validator tool checks whether the domain can actually receive mail.
How are URLs wrapped in punctuation handled?
Closing brackets are only dropped when they are unbalanced, so https://en.wikipedia.org/wiki/Foo_(bar) keeps its closing parenthesis while "(see https://example.com)" does not. Trailing . , ; : ! ? and quotes are trimmed, and URLs inside angle brackets or quotes are picked up cleanly. http, https and ftp are always matched; bare www. links are on by default; bare domains such as example.com/docs are off by default because they also match filenames like report.final; mailto: links are off by default because those addresses already show up under Emails.
How reliable are the phone, IP, and hashtag extractors?
The phone matcher is deliberately loose: an optional +, then 7 to 15 digits with spaces, dots, dashes or parentheses between them. It will catch most international and local formats but will also miss extensions and pick up some long ID numbers; ISO dates and IPv4 addresses are explicitly excluded. IPv4 results are range-checked octet by octet, IPv6 results are structurally validated (one :: at most, correct group count, optional dotted-quad tail), and a dotted quad inside an IPv6 address is not reported twice. Hashtags need at least one letter, so issue references like #123 are skipped, and the @ inside an email address is never mistaken for a handle.