Extract email addresses from text

Paste text and get a clean list of email addresses to copy or download as TXT. Remove repeats and review syntax warnings before using the list.

Paste text to extract email addresses

Processed in your browser · saves drafts when allowed Ready
Extracted email addresses

Extract email addresses from text in three steps

01

Paste content

Paste a paragraph, contact list or other text containing email addresses. Use the sample to see how plus aliases, Unicode and mailto links are handled.

How do the options affect the result?

OptionWhen to use it
Remove duplicatesKeep the first occurrence. The part before @ must match exactly; domain matching ignores case. Turn it off to keep every occurrence.
Sort A–ZUse it for an alphabetical list. When off, results follow their order in the pasted text.
Allow Unicode before @Enable for addresses such as quốc.tế@example.com. Sending and receiving servers still need to support internationalized email.
Lowercase domainsChange only the part after @ in the exported list; the part before @ is preserved.

Read warnings and review the list before using it

Recognized patterns
The tool recognizes common forms such as sales+site@example.com, subdomains and mailto:hello@example.com?subject=Hi. It checks the syntax of candidates it detects. “Rejected candidates” counts only strings found by the detector and then rejected; severely malformed strings may never be detected or counted.
Verify addresses
A syntax match does not show whether a domain receives mail or a mailbox exists. Review typos, unintended addresses and permission to use the list before importing it into an email system. The tool does not check DNS/MX, send a test message or verify deliverability.

Where is the text and draft stored?

Email detection and filtering run in your browser. If local storage is available, the text and options are kept as a draft on this device for the next visit. Select Clear to remove the input, result and this tool’s draft; use private browsing or clear site data if you do not want a saved draft.

Comments & feedback

Rate this tool

Loading ratings…

Write a commentNo account needed

Do not share passwords, sensitive information or the contents of files you are processing.

Reviewed before posting. Email stays private.

Embed this tool on your websiteFree · Copy once, receive tool updates automatically

Paste the iframe into HTML, WordPress or any platform that supports embeds. The tool runs in the visitor’s browser; adjust its height and theme as needed.

View the embed guide and supported platforms →

<div style="max-width:900px">
  <iframe data-kitotool-embed src="https://kitotool.com/embed/en/email-extractor/" title="Email Extractor — KitoTool" width="100%" height="920" style="display:block;width:100%;border:1px solid #dbe3ee;border-radius:12px" loading="lazy" referrerpolicy="strict-origin-when-cross-origin"></iframe>
  <p style="margin:6px 2px 0;text-align:right;font:12px/1.5 system-ui,sans-serif;color:#64748b">Free tool by <a href="https://kitotool.com/en/email-extractor/" target="_blank" rel="nofollow noopener noreferrer" style="color:#2359d4;text-decoration:underline">KitoTool</a></p>
</div>

The code includes a visible credit below the iframe; its link uses nofollow for a widely distributed widget.

Optional: automatically resize the iframe

Add this script once to the page containing the iframe.

<script>
(function(){var origin="https://kitotool.com";function frames(){return document.querySelectorAll("iframe[data-kitotool-embed]")}function measure(f){if(f.contentWindow&&new URL(f.src).origin===origin)f.contentWindow.postMessage({type:"kitotool:measure"},origin)}window.addEventListener("message",function(e){if(e.origin!==origin||!e.data||e.data.type!=="kitotool:resize"||!Number.isFinite(e.data.height))return;frames().forEach(function(f){if(f.contentWindow===e.source&&new URL(f.src).origin===origin)f.style.height=Math.max(320,Math.min(12000,Math.ceil(e.data.height)))+"px";});});function connect(){frames().forEach(function(f){f.addEventListener("load",function(){measure(f)});measure(f)})}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",connect,{once:true});else connect()})();
</script>