URL Extractor
Extract every link from pasted text in one click - deduplicate, sort, keep one URL per domain, and pick a separator, all in your browser.
- Free, no account
- No watermark
- No usage limit
About the URL Extractor
Paste any text and this pulls every link out of it in one pass, free, instant, and entirely in your browser. That part is easy and most tools manage it. What actually decides whether the list is worth anything is how the tool treats links buried in brackets and trailing punctuation, and that is where the free extractors quietly break a share of your URLs and never tell you.
Drop in an article, a raw email, a page's HTML source, or a spreadsheet dump saved as text, and you get back a clean list you can copy with one button. Because everything runs on your machine, whatever you paste stays in the tab. Nothing is uploaded, nothing is logged, which starts to matter the moment the text is a client document or a private email rather than a public page.
The three counters up top are worth watching: how many links were found in total, how many are unique, and how many distinct domains they hit. Those numbers rarely match, and the gap between them is usually the reason you ran the tool.
How to use
- Paste your text into the top box. One link or ten thousand, an article, a scraped page, an email full of tracking links, whatever you have.
- Watch the list build itself. No Extract button to hunt for. Links are pulled the instant you paste, and the output box updates live as you edit.
- Decide about bare links. Include bare links is on by default and catches addresses that start with
www.or read likedomain.com/patheven with nohttp://in front. Switch it off if you only want fully qualifiedhttp/httpslinks. - Stack the cleanup options. Leave Remove duplicates on to collapse repeats, turn on One per domain to keep the first link from each site, flip Sort A-Z to alphabetize. Run all three together if the job needs it.
- Pick a separator. New line is the default and the safest for pasting elsewhere. Comma or Space are there when your next step expects them.
- Read the counts, then copy. Grab the result with the button, or hit Clear and start fresh.
The bracket problem is where cheap extractors fall apart
In real writing a link almost never sits by itself. Someone writes "the full guide is at https://example.com/guide." with a period on the end, or wraps it as "(see https://example.com)". A lazy matcher grabs that period or closing paren along with the address and hands you a broken link, and you don't find out until you click it and hit a 404.
Parentheses are the nasty case. Take (see https://en.wikipedia.org/wiki/Foo_(bar)). The link you want is https://en.wikipedia.org/wiki/Foo_(bar), since Wikipedia genuinely uses parentheses in article paths, so that closing paren belongs to it. But there is an extra paren at the very end, from the "(see" wrapper. Most extractors do one of two dumb things: stop at the first ) and give you the truncated ...Foo_(bar, or keep the extra ) and hand back a ...Foo_(bar)) that 404s.
This tool counts the brackets instead. Reading the tail from the end, it asks whether each closing bracket has a matching opener somewhere inside the URL. If it does, it belongs and stays. If it doesn't, it is sentence punctuation and gets stripped. So Foo_(bar)) loses exactly one paren and settles on the address you actually meant. The check loops, so a URL trailed by ). or ), or a pile of closing punctuation still comes out clean.
It sounds like a minor detail. It is also the difference between a list where every link works and one where a third are silently broken, and that broken third is the single most common bug in link extraction, which is why a good extractor trims the tail before it does anything else.
One per domain, for when you care about sites not pages
One per domain is the option most competitors skip, and it saves the most time on any job where the sites matter more than the individual pages. Turn it on and the tool keeps the first link it sees from each registered domain and drops the rest, so a document linking example.com/a, example.com/b, and example.com/c collapses to a single example.com/a.
Auditing which sites an article links out to, building a list of referring domains, reading a link profile without wading through every page, that is what this switch is for. The Domains counter shows the number even with the option off, so "47 links across 6 domains" tells you at once that the text leans on a handful of sources.
One honest limit. To find the registered domain the tool takes the last two labels of the host, example.com out of www.blog.example.com. Fast and correct almost everywhere, but it stumbles on multi-part country TLDs, a .co.uk or .com.au reads as co.uk rather than the real name in front of it, so bbc.co.uk and theguardian.co.uk both look like co.uk and merge into one. Doing that perfectly needs the Public Suffix List, a hand-kept catalog of every exception too heavy to load into a browser tool for an edge most lists never touch. On ordinary .com, .org, .net, and .io domains it is spot on. If your text is thick with country-code domains, leave One per domain off there.
Pulling links out of raw HTML
Copy a page's actual source and the links live inside href="..." and src="..." attributes. This handles that cleanly. A match stops at the quote, so you get https://example.com/page with no tag or quote riding along, and the same for image and script URLs. Paste raw markup, get a tidy list of every link and asset on the page.
Two things to expect. You get both the links people click and the resources the page loads, so image, script, and stylesheet URLs come along too, thin them with One per domain if it turns noisy. And relative links like href="/about" won't be caught, since /about has no host and pasted text carries no base URL to attach one.
What a match does and doesn't prove
Worth being straight, since the tools that skip past this are the ones that mislead you. A match proves a string has the shape of a URL. It does not prove the link is alive. A typo'd address and a long-dead page both match perfectly, and the only way to know a link still loads is to actually request it, which this tool never does, since that would mean sending your text off your machine. Treat the output as a strong candidate list and a fast first pass, not a verified record of working links.
Frequently asked questions
Why does "Found" say more than "Unique"?
Because your text repeated some links. "Found" counts every match, "Unique" counts distinct ones. Link the same article four times in a newsletter and that is four found, one unique. The gap between the two is a quick read on how repetitive your source was, and with Remove duplicates on, the output lands on the unique count.
Does it treat `example.com/Page` and `example.com/page` as the same link?
No, and that is deliberate. The scheme and host are compared without regard to case, so HTTPS://Example.COM and https://example.com collapse into one, because a domain never cares about case. But the path and query are kept exactly as typed, since on plenty of servers /Page and /page really are two separate resources. Merging them would quietly drop a real page, so the safe call is to leave them distinct.
Why won't a plain `example.com` in a sentence get caught?
On purpose. A bare domain with no path and no www. is too easy to confuse with ordinary words, filenames, and version numbers to grab safely, so example.com sitting in prose is left alone while example.com/pricing or www.example.com is caught. It is the line between pulling real links and flagging every config.json and v1.2 as one.
Can I feed it a whole file's worth of text?
Yes, there is no small line cap. Paste an entire export, sitemap, or crawl dump and it works through the lot in the browser. A very large paste leans on your device's memory rather than a server, so the ceiling is your machine and not an upload limit, which is usually the better trade for anything private.
Which separator should I use for the command line?
Space. Tools like curl and wget split their arguments on whitespace, so a space-separated list drops straight in. Pick Comma for a config value or spreadsheet cell, and stay on New line for most other tools and scripts.
Is anything I paste sent anywhere?
No. The matching, trimming, de-duplication, grouping, and sorting all happen on your device. Nothing is uploaded, saved, or logged, which is the whole reason it is safe to run on a client file or a private email you would never hand to a random website.