savemyday

Extract links

Easily extract urls from a webpage an export the result as CSV or JSON.

Entry URL of the webpage to extract links from

What does this tool do?

URL extractor tool allows you to extract all links from a webpage, the tool analysis HTML of the webpage and extracts all anchor <a> tags.

Limitations of our tool

  • No Javascript: we do not render a webpage like real web browsers do, we fetch the webpage and analyse its HTML to extract urls along with some additional metadata, which is why our tool is so fast but will not run for SPA such as Twitter, YouTube etc.
  • Email protection service: url extraction tool can be used for extracting emails from a webpage because they are commonly added as links eg <a href="mailto:noreply@savemyday.dev"> Send email <a> however if a website has Cloudflare email obfuscation or similar service turned on you will see gobbledygook as link.
  • Logins, bot protection and captchas: we respect website authors and we will not attempt to circumvent any protection or security measures to extract links.
  • Non-HTML content: our tool is only designed to work with HTML documents, if the link returns any other format such as PDFs, spreadsheets, documents or images, the tool will not work.

How URL extractor works?

The tool works by fetching HTML of a webpage, then by extracting all anchors and normalising them so all relative urls are converted into absolute URLs. We do this without executing JavaScript of the supplied webpage, so some websites may work correctly. We built this tool using the following:

  • Cloudflare workers: we use them to host our static assets, HTML pages and to serve dynamic requests.
  • Cheerio: is a library for manipulating HTML and XML documents, we wanted something fast so we do not hit CPU limits of the Cloudflare workers.

Code example

const webpage = await fetch('https://example.com');
const html = await webpage.text();

const content = cheerio.load(html);
const anchors = content('a')

const links = [];

for(const anchor of anchors){
    const link = content(anchor);

    /**
    * We do some additional validation, normalisation
    * and processing before giving you the results
    * but structure is same.
    */
    links.push({
        link: link.props('href'),
        label: link.text().toString(),
    })
}

Change log

03 – April – 2026

  • Improved UI and error handling.
  • New “Resolved URL” column to show final URL