Skip to the tool
URLExtractor

URL Extractor from Text

Paste anything with links in it — an email, a chat log, meeting notes, a data export — and get back every web address it contains, with the line it came from. Everything happens in this browser tab.

You provide
Pasted text, or a local TXT, CSV, TSV, JSON or Markdown file.
You receive
Every web address found, with its line number, in the order it appeared.
Use it when
Use it when the links are sitting inside prose, an email, a chat log or a data export.

Drag a file here, or

TXT, CSV, TSV, JSON or Markdown · up to 10 MB

Your text is parsed in this browser tab. Nothing is uploaded and nothing is stored.

Paste text on the left and choose Extract URLs. Or try Load example to see how punctuation, duplicates and unsafe schemes are handled.

What this tool cannot do

  • A plain CSV holds only the text you can see. If a spreadsheet cell shows “Click here” with a hidden link behind it, that target is not in the CSV at all.
  • Bare domains (example.com, with no scheme and no www) are off by default because they are genuinely ambiguous — main.py and shop.io both look like domains.
  • An address that is split across two lines by the original formatting is read as two fragments, because that is what the text contains.
  • Files are read up to 10 MB. Larger text files should be split first.

How this tool reads your text

Most "extract URLs" tools are a single regular expression. That works until it doesn't, and the failures are always the same handful of cases: a full stop at the end of a sentence gets swallowed into the address, a Wikipedia link with brackets in its path gets cut in half, or a markdown link loses its closing parenthesis.

This tool splits the job into three steps instead.

First it finds candidate starting points — an explicit https://, a www. label, an email address, or (only if you ask) a bare domain. Then it extends each one until it reaches a character that cannot appear in an address written in prose. Finally it trims trailing punctuation, counting brackets as it goes so that balanced ones survive.

That last step is where the difference shows up:

How punctuation around a link is handled
What you pasteWhat comes outWhy
Visit https://example.com/pricing.https://example.com/pricingA single trailing full stop is sentence punctuation.
(https://example.com/terms)https://example.com/termsThe closing bracket has no opener inside the address.
https://reference.example.org/wiki/Extraction_(data)https://reference.example.org/wiki/Extraction_(data)The brackets are balanced, so they belong to the path.
[docs](https://example.com/docs)https://example.com/docsMarkdown syntax, same unbalanced-bracket rule.
<https://example.com/x>https://example.com/xAngle brackets always end a run.

Whenever a character is removed, the row says so in its Notes column. Nothing is quietly rewritten.

What counts as a link

By default the tool accepts addresses with an explicit http:// or https:// scheme, plus anything starting with a www. label. For the www. case it adds https:// so the address can be parsed, and flags the row — the site may genuinely be http-only, and we do not know which.

Bare domains are a separate, opt-in mode. When you turn it on, each candidate is checked against the Public Suffix List, so example.co.in is accepted while notes.txt and report.pdf are not. Be aware that .py, .sh and .io are all real top-level domains, so main.py will be accepted in that mode. That ambiguity is exactly why it is off by default.

Using it

  1. 1

    Paste your text, or open a file

    Drag a TXT, CSV, TSV, JSON or Markdown file onto the drop zone, or paste directly. A file starts extraction as soon as it loads.

  2. 2

    Adjust the options if you need to

    Advanced options control whether www. hosts, bare domains and email addresses are recognised, and let you keep or drop specific domains.

  3. 3

    Review, then copy or export

    Duplicates are collapsed into a single row with an occurrence count. Filter by keyword or domain, select the rows you want, then copy them or download TXT, CSV or JSON. The export always contains the full selection, not just the rows on screen.

Duplicate URL RemoverMerged several exports? Remove the repeats first.

Frequently asked questions

Is my text uploaded anywhere?

No. The parsing runs in this browser tab, in JavaScript. Nothing you paste is sent to our server, and nothing is stored. You can confirm this by opening your browser’s network panel and extracting — no request is made.

Why is the same address listed only once?

Identical addresses are collapsed into one row with an occurrence count, so a long document does not produce hundreds of identical lines. The counts add up to the total shown as “found”. Addresses that differ in any way — including capitalisation of the path, or a different query string — stay separate, because they are genuinely different addresses.

Why was a link with brackets cut short?

It should not be, if the brackets are balanced. The tool counts opening and closing brackets inside the candidate and only removes a closing one when there is no matching opener. If you have found a case where it gets this wrong, the bug report page is the fastest way to tell us.

Can it read links out of a Word document or a PDF?

Not directly. Copying text out of Word and pasting it here works for addresses that are written out in full. For a PDF, use the PDF tool, which reads the clickable link annotations and their page numbers.

What happens to an address with a javascript: or data: scheme?

The scanner only accepts runs that begin with a supported scheme followed by ://, so a bare javascript: never becomes a row. Where one does appear — for example in the HTML tool — it is listed as text, marked unsafe, and is never turned into a clickable link.

Related tools

Guides for this tool

Share this pageWhatsAppXLinkedInFacebook