🍱 Lunchbox Hands

Extract Emails & URLs

Pull email addresses, URLs, domains, phone numbers, and IPs out of any text

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.

Drop a .txt, .csv, .log, .md or .html file here or click to upload — or just paste below
Extract
Matching options

614 characters · 14 matches across the selected types. Everything runs in your browser — no URL is ever fetched.

[email protected]
[email protected]
[email protected]
3 total · 3 unique

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.

Get weekly dev tools and tips