Extract email addresses
Pulls every email address out of a block of text and removes duplicates.
Paste any text and this tool will extract email addresses from it — one per line, duplicates already removed. It works on copied web pages, chat exports, log files, spreadsheets pasted as text and anything else where addresses are buried in surrounding words.
Runs entirely in your browser. Your text is never uploaded — open DevTools, Network tab, and you will see zero requests while you use this tool.
How to use it
- Paste the text containing the addresses into the box.
- Press Extract emails — the box is replaced by the list.
- Optionally press Sort A→Z to order it.
- Press Copy, or Download .txt to save the list.
What this tool does
The text is scanned for anything shaped like an address: one or more letters, digits, dots, plus signs or hyphens, then an @, then a domain with at least one dot. Every match is collected, duplicates are dropped automatically, and the results are written back into the box one per line.
Duplicates are removed on every run. That is deliberate — a page copied from a website usually repeats the same contact address in the header, the footer and three places in between, and a list with the same address eleven times is useless.
Some edge cases worth knowing. Addresses with a plus tag such as name+news@example.com are matched in full. Subdomains work: sales@mail.example.co.uk comes through complete. Addresses written to defeat scrapers — name [at] example [dot] com — are not matched, because they are not addresses. A trailing full stop attached to the end of a sentence can occasionally be absorbed into the match, so glance at the last characters of the list before importing anywhere. Matching is case sensitive in output, meaning Info@ and info@ are kept as separate lines; the mailbox part of an address technically can be case sensitive, so nothing is silently merged.
Examples
Input:
Contact Anna (anna@example.com) or the desk at hello@example.com. Press: press@example.com, or hello@example.com again for anything else.
Output:
- anna@example.com
- hello@example.com
- press@example.com
Three addresses out of four mentions — hello@example.com appeared twice and is listed once.
A messier case, straight from a pasted signature block:
| In the text | Extracted |
|---|---|
| <a href="mailto:jo@example.org">Jo</a> | jo@example.org |
| billing+invoices@example.org | billing+invoices@example.org |
| support at example dot org | not matched |
Note that mailto: links work fine — the prefix is not part of the match, so raw HTML can be pasted straight in.
When you need it
- Pulling addresses out of a long email thread so you can build a proper distribution list.
- Cleaning a contact list that arrived as a Word document or a PDF copy-paste instead of a spreadsheet.
- Collecting the reply-to addresses from a chat or forum export.
- Auditing a page before publishing it, to see which addresses are exposed in the source.
- Recovering addresses from an old CRM export where the columns collapsed into one field.
- Checking a form submission dump for addresses that got typed into the wrong field.
Use the extracted list responsibly: collecting addresses from a page you do not own in order to email people who never asked is spam, and in most jurisdictions it is also illegal.
This page replaces the older combined extractor at /tools/extract-emails-urls/. If you need links instead of addresses, the URL extractor is listed under Related tools below.
Doing it without this tool
Notepad++: Search, Find in Files or Mark, tick Regular expression, and use [\w.+-]+@[\w-]+\.[\w.-]+. Then Search, Bookmark, Copy Bookmarked Lines — though that copies whole lines, not just the addresses.
Excel: there is no clean built-in way. The usual route is Text to Columns on spaces, then filter with =IF(ISNUMBER(SEARCH("@",A1)),A1,""), then remove blanks and use Data, Remove Duplicates.
Word: Find and Replace with Use wildcards on, searching [A-z0-9.\-_]{1,}\@[A-z0-9.\-]{1,}. Word wildcards are their own dialect and this breaks easily.
Command line: grep -Eio "[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}" file.txt | sort -u. Fast and exact, if you have a terminal.
Google Sheets: =REGEXEXTRACT(A1,"[\w.+-]+@[\w-]+\.[\w.-]+") pulls the first address from each cell, one cell at a time.
Privacy: your text never leaves your browser
This is the point that matters most on this particular page. Email addresses are personal data. Pasting a list of them into a website that processes them server-side means handing real people’s contact details to a third party you know nothing about — and if that list came from your employer or a client, it may also be a reportable data breach.
Nothing of the sort happens here. The matching is a regular expression executed by JavaScript inside your tab. No request is made when you press the button, no copy of the text or of the extracted list is kept, and the page continues to work with the network disconnected. Close the tab and every trace is gone.
Related tools
Frequently asked questions
Yes, automatically. Each address appears once in the result even if the source text mentions it a dozen times.
No. Those are not valid addresses, and guessing at obfuscated forms would produce far more wrong results than right ones.
Yes. Addresses inside mailto: links and attributes are matched, so you can paste raw page source.
Yes. Tagged addresses like name+news@example.com are matched in full, including the tag.
No practical limit. Matching is fast enough for very large documents because it runs locally.
Yes, press Sort A→Z after extracting to get an alphabetical list, which also makes near-duplicates easy to spot.
No. Everything happens in your browser, which matters because email addresses are personal data.