User Rating 0.0 β˜…β˜…β˜…β˜…β˜…
Total Usage 0 times
Supports http, https, and ftp URLs mixed with any text
Is this tool helpful?

Your feedback helps us improve.

β˜… β˜… β˜… β˜… β˜…

About

Raw URL dumps are unreadable in documentation and notes. This tool extracts every URL from arbitrary text, fetches each page's title element via live HTTP request, and generates proper Markdown link syntax: [Title](url). Image URLs (detected by extension: .png, .jpg, .gif, .webp, etc.) are automatically formatted as ![](url). The tool uses CORS proxy cascading to handle cross-origin restrictions inherent in browser-based fetching. Limitation: some sites block proxy requests or return empty titles. In those cases the converter falls back to a cleaned pathname as the link label.

Markdown link correctness matters. A broken or unlabeled link in a README or wiki degrades findability and reader trust. Manually copying titles from dozens of tabs is error-prone. This tool processes bulk URL lists in seconds. Note: fetching is sequential with a per-request timeout of 8s to avoid hanging on unresponsive servers. Titles are extracted from the HTML <title> tag only. JavaScript-rendered titles (SPA pages without SSR) may not resolve correctly.

url to markdown markdown link generator convert urls markdown formatter link extractor markdown image

Formulas

The conversion pipeline follows a deterministic three-stage process for each input line.

Stage 1 β†’ Extract: Apply URL regex pattern to input text. The pattern matches schemes http, https, ftp followed by :// and valid URI characters per RFC 3986. Trailing punctuation (., ,, )) is stripped via lookahead.

Stage 2 β†’ Classify: For each extracted URL, test the pathname against the image extension set E = {.png, .jpg, .jpeg, .gif, .svg, .webp, .avif, .bmp, .ico, .tiff}.

{
![](url) if ext(url) ∈ E[title](url) otherwise

Stage 3 β†’ Resolve Title: For non-image URLs, fetch the HTML document through a CORS proxy chain. Extract content of the first <title> tag using the pattern <title[^>]*>(.+?)</title> with case-insensitive dotAll matching. If fetch fails or no title found, derive fallback label L from the URL pathname: split by /, take the last non-empty segment, replace hyphens and underscores with spaces, apply title case.

Where url is the raw extracted URL string, ext(url) extracts the file extension from the pathname component, and title is the resolved or fallback page title with special Markdown characters ([, ]) escaped.

Reference Data

File ExtensionTypeMarkdown OutputMIME Category
.pngImage![alt](url)image/png
.jpgImage![alt](url)image/jpeg
.jpegImage![alt](url)image/jpeg
.gifImage![alt](url)image/gif
.svgImage![alt](url)image/svg+xml
.webpImage![alt](url)image/webp
.avifImage![alt](url)image/avif
.bmpImage![alt](url)image/bmp
.icoImage![alt](url)image/x-icon
.tiffImage![alt](url)image/tiff
.htmlPage[Title](url)text/html
.htmPage[Title](url)text/html
.phpPage[Title](url)text/html
(no extension)Page[Title](url)text/html (assumed)
.pdfDocument[Filename](url)application/pdf
.mdDocument[Filename](url)text/markdown
.jsonData[Filename](url)application/json
.xmlData[Filename](url)application/xml
.csvData[Filename](url)text/csv
.mp4Video[Filename](url)video/mp4

Frequently Asked Questions

The tool fetches HTML through CORS proxies. Some servers block proxy requests, return 403/429 status codes, or use Cloudflare protection. Single-page applications that render titles via JavaScript after initial page load will also return empty or generic titles since the tool parses raw HTML without executing scripts. In these cases the converter extracts the last path segment, converts hyphens to spaces, and applies title case as a readable fallback label.
Classification is based strictly on the URL pathname's file extension. The tool checks against a set of 10 common image extensions: .png, .jpg, .jpeg, .gif, .svg, .webp, .avif, .bmp, .ico, and .tiff. URLs without extensions or with non-image extensions are treated as pages. This means a dynamically served image without an extension (e.g., via a CDN query parameter) will be classified as a page link, not an image.
Duplicate URLs are deduplicated automatically. Each unique URL appears exactly once in the output, preserving the order of first occurrence. This prevents redundant Markdown entries when processing text that references the same resource multiple times.
Yes. The URL extraction regex captures query strings (everything after ?) and fragment identifiers (after #) as part of the URL. Parentheses within URLs are handled by balanced matching. Encoded characters like %20 are preserved as-is in the output Markdown link. The title fetch uses the complete URL including query parameters.
Each URL fetch has an 8-second timeout enforced via AbortController. This prevents a single unresponsive server from blocking the entire conversion queue. The timeout is fixed at 8 seconds as a balance between allowing slow servers to respond and keeping total processing time reasonable for bulk lists. A list of 20 URLs could take up to 160 seconds in the worst case, though most pages respond within 1-2 seconds.
Yes. Square brackets [ and ] within fetched titles are escaped to \[ and \] to prevent breaking Markdown link syntax. Newlines and carriage returns within title tags are stripped. HTML entities like & in titles are decoded to their character equivalents before output.