To extract a URL from a hyperlink in Google Sheets, copy the raw formula text from the formula bar (or the underlying cell text), then paste that text into the URL Extractor to get one normalized, deduplicated URL per line in your browser. Google Sheets displays clickable links and HYPERLINK() formulas that hide the real address behind friendly display text like "Click here" or "Visit site", so the address you can see on the sheet is usually not the URL you actually want to capture. The reliable way to recover those destinations is to lift the raw formula or cell text out of the spreadsheet, feed it to a plain-text URL scanner, and let the browser URL parser normalize case, hostnames, and trailing slashes for you. Because the scan runs locally and accepts up to one million UTF-16 code units, you can drop an entire export of a column's formulas into a single pass and walk away with a clean list of unique addresses ready for download.

how to extract url from hyperlink in google sheets
Extract URLs From Google Sheets Hyperlinks in Three Steps

Google Sheets keeps the real URL hidden behind a friendly label in two common situations. A HYPERLINK() formula places the address in the first argument and the display text in the second, so clicking the cell opens the URL but reading the cell only shows the label. A clickable cell link added through the Insert menu stores the destination inside the cell object, so the formula bar shows the label and the address is invisible without a script.

That gap is exactly what people mean when they ask how to extract URL from hyperlink in Google Sheets. They want the destination, not the label. The recurring search snippets around this question — one titled "Extract a URL From Text or a Hyperlink in Google Sheets", another lists "REGEXEXTRACT, Apps Script" — show three common attempts: a regex that almost works, IMPORTXML against imported HTML, and an Apps Script that reads the link object. Each one solves a slightly different piece of the problem, and each one leaves a normalization step undone. The local scan described below is the post-processing pass that finishes the job.

Three Ways to Lift URL Text Out of a Sheet

Before any scanner can run, the URL-shaped text has to leave the cell. These three approaches cover the cases readers actually hit:

  • Copy the formula bar text for HYPERLINK() rows. Click the cell, press F2 (or click the formula bar), select the entire formula, and copy it. The pasted value reads =HYPERLINK("https://...","label") with the real address still inside the quotes, which is exactly what a plain-text URL scanner needs.
  • Export a CSV or TSV and open it locally. File > Download > Comma-separated values keeps the cell text but drops the hyperlink objects. Use it when a column is mostly HYPERLINK formulas and the labels are short, since the URLs still appear in the exported cells as visible text.
  • Paste the entire range straight from the browser. Select the column, copy it with Ctrl+C, and paste the result into a plain-text field such as the URL Extractor input. Visible labels are preserved alongside URL-bearing formula text, so the scanner picks out the real addresses from ordinary prose around them.

For very large sheets, paste in batches or split the export with a local text splitter if a single range exceeds the one-million-code-unit input cap. The scanner rejects over-limit text rather than truncating it silently, so the paste has to fit in one pass or be broken into chunks first.

Run an Extraction Pass on the Pasted Text

  1. Paste the text containing http, https, or www addresses into the URL Extractor input. Up to one million UTF-16 code units is accepted per paste.
  2. Trigger the scan and review the result list. Each candidate is matched with conservative prose boundaries. Terminal periods, exclamation marks, question marks, and colons are stripped, while a closing parenthesis, bracket, or brace is removed only when it is unmatched inside the candidate — so /a_(b) is preserved but the prose wrapper around (https://example.org/) is dropped.
  3. Check the unique count and the normalized spellings. www candidates receive https:// before validation, so WWW.Example.com emerges as a complete HTTPS address. The browser URL constructor lowercases hostnames, adds a missing root slash, and serializes the result. Duplicates are removed only when the serialized values match exactly, so https://EXAMPLE.com and https://example.com/ collapse into one entry but query-order differences stay separate.
  4. Click Download to save a one-URL-per-line UTF-8 TXT file. The file uses LF line separators and contains the same strings shown in the preview, so the saved list is auditable line by line against the on-page result. A temporary Blob URL is created only on this click and revoked immediately afterward.

What the Browser Parser Does to Each URL

The scanner does not return the literal string you pasted. It hands every candidate to the browser URL constructor, which performs structural parsing and the WHATWG URL Standard serialization rules. Hostnames become lowercase, a missing root path can become a trailing slash, and default URL serialization rules apply. Valid fragments, queries, ports, paths, and credentials remain intact, because stripping credentials would change the parsed address.

Concretely, a candidate like WWW.Example.COM/path/ becomes https://example.com/path/, while https://EXAMPLE.com/?utm_source=x and https://example.com/?x=1 stay as two separate entries because the serialized query strings still differ. Tracking parameters are never stripped, so if your goal is to clean a list of campaign-tagged URLs, that has to be a separate step after extraction. This normalization is also why the famously fragile regex approach — the one referenced in the "Extract a URL From Text or a Hyperlink in Google Sheets" Stack Overflow thread where "the regex answer almost works" — leaves a trailing comma stuck on the captured address: the URL Extractor treats commas and semicolons as candidate boundaries, so the scanner strips them before validation instead of leaving them in the output. The behavior follows the same path the MDN URL constructor reference describes.

Limits and Out-of-Scope Patterns

The scanner intentionally narrows detection to HTTP, HTTPS, and www-style addresses. Bare domains without the www prefix, mailto, ftp://, file://, javascript:, and email addresses are outside the declared detection scope and will not appear in the output. Scheme matching is case-insensitive, so HTTP://, Http://, and http:// all reach the parser, but a bare domain like example.com still requires the leading www to be picked up.

Two hard caps gate the result. The input is rejected above one million UTF-16 code units and unique URLs are capped at ten thousand; over-limit inputs are rejected rather than silently truncated. Malformed UTF-16 surrogate sequences are also rejected before scanning, so a corrupted paste cannot reach the parser with replacement characters standing in for missing data. Invalid candidates are skipped without preventing valid neighbors from being returned, so one bad line never costs you the rest of the list. The tool does not claim to be a full HTML or email parser, and for HTML href extraction, CSV fields, Markdown link destinations, or mail archives, a format-aware parser is the right choice when structure matters.

Comparing Ways to Recover URLs in Google Sheets

ApproachWhat it returnsBest whenCaveat
HYPERLINK() formula textThe literal URL inside the first argument, with quoting intactYour column is dominated by =HYPERLINK("...") callsLabels and URLs stay mixed in the same string
IMPORTXML against imported HTMLhref attributes from an HTML source tableYour URLs live inside imported HTML rather than native cellsOnly works for HTML-shaped input and may yield relative paths
Apps Script getLinkUrl()The destination of a clickable cell linkYou have plain clickable links and are comfortable running a small scriptRequires authorization and a separate column for output
Paste into URL ExtractorOne URL per line, deduplicated, normalizedYou have plain text containing URLs and want a clean downloadable TXTOut-of-scope schemes (mailto, ftp, bare domains) are not detected

The four rows describe different starting points and different outputs, and they are not interchangeable. The first three are Google Sheets–side mechanisms that lift URLs out of cells; the fourth is the final cleanup pass that takes the mixed text and returns a normalized list. Most readers searching the keyword end up combining two of them: a Sheets-side mechanism to recover the raw URL text, and a local scan to deduplicate and normalize before downloading.

If your workflow already lives inside Google Sheets and you would rather stay there, the IMPORTXML and Apps Script paths are documented in the Google Sheets help center under "Extract URLs from hyperlinks and copy to another column". If your workflow is portable and you would rather lift the text out of the sheet and clean it locally, the URL Extractor is the shorter path: paste once, scan once, download a UTF-8 list, and walk away. The local scan is also the safer choice when the source text includes private URLs, signed links, or credentials you do not want to push through a third-party API, because the matching, normalization, and TXT generation never leave the current browser tab. Credentials embedded in a URL remain visible in the result because stripping them would change the parsed address, so avoid pasting secrets, tokens, signed links, private hosts, or personal data into any workflow unless the destination and local device are trusted.

If you're weighing options, Extract Emails From Outlook Text in Your Browser Locally covers this in detail.

If you're weighing options, How to Extract Phone Numbers From a WhatsApp Group covers this in detail.