Email addresses arrive buried in things that are not lists. A forwarded thread with twenty people in the headers. A page of HTML source. A CSV where the address is one field among thirty. A block of meeting notes with contacts scattered through the prose.
This extractor scans any text you paste and pulls out everything that looks like an address, in the order it found them.
What counts as an address
The pattern matches a local part, an @, a domain with at least one dot, and a top-level domain of two to twenty-four letters. It handles the characters that legitimately appear in real addresses - dots, underscores, percent signs, plus signs and hyphens - which covers plus-addressing such as user+newsletter@example.com.
It does not attempt to implement the full email specification. That specification permits quoted strings, comments and other constructions that essentially no real address uses, and matching them accurately would also match a great deal of text that is not an address at all. The trade-off here favours precision on ordinary addresses.
Two consequences worth knowing. Addresses written to defeat scrapers - name (at) domain (dot) com - are not matched, because they are not addresses. And a trailing full stop at the end of a sentence is trimmed, so Contact me at bob@example.com. yields the address without the stop.
The cleanup options
Unique removes repeats, which matters enormously with email threads. A forwarded chain with ten replies contains the same participants ten times over.
Lowercase normalises the result. Domains are case-insensitive by definition, and while the local part technically may not be, every mail provider in ordinary use treats it that way. Normalising before de-duplicating means Bob@Example.com and bob@example.com collapse into one entry rather than surviving as two.
Sort alphabetises, which groups addresses by domain and makes it obvious at a glance how many came from one organisation.
The output separator is yours to choose - line breaks for a mailing tool, commas for a mail client's To field, or a custom character for whatever comes next.
Please use this responsibly
Extracting addresses from your own inbox, your own exports and your own documents is ordinary data handling. Harvesting addresses from websites to email people who never asked to hear from you is something else, and in most of the world it is illegal.
GDPR requires a lawful basis for processing personal data, and an address scraped from a page does not provide one. CAN-SPAM in the United States specifically prohibits harvesting. Beyond the legal position, it does not work: harvested lists produce complaint rates that damage sending reputation and get domains blocklisted.
Processing happens in your browser and nothing is uploaded, which is what makes it appropriate for your own contact data.