Copy All Links From a Page as Markdown, HTML or JSON Lines (2026)
Selecting text on a page is easy; getting the links out of it in a usable shape is not. Drag a paragraph into a document and every anchor collapses into blue underlined words with the destination stripped away.
This guide is about the gap between the links are on the page and the links are in my clipboard, formatted the way the next tool expects. VKT LinkHarvest v1.3.1 scans every <a> on the page, keeps watching for new ones, lets you narrow the list, then copies the result as plain URLs, Markdown, HTML or JSON Lines. Below: what each format is for, and when a file beats the clipboard.
The real problem: the label matters as much as the URL
A bare list of https addresses is complete and almost useless. Nobody can tell which line is the pricing page, which the changelog, and which the same article linked twice.
- Writing documentation or a README — the reader needs to know where a link goes before clicking it.
- Building a topic shortlist — you triage eighty candidates by title and keep twelve.
- Sending references to a team — a message with thirty naked URLs gets skimmed and forgotten.
By hand it is a four-field loop per link: right-click, copy link address, switch window, paste, go back for the title, type it. Forty links is a quarter of an hour with a predictable error rate.
Select-all into a text editor drags in navigation, cookie banners and footer boilerplate — or, on a JavaScript-rendered page, link text with no URLs.
Four copy formats, four different jobs
The dropdown has four entries. None is premium, and switching re-renders the scan you already have.
| Format | What you get | Where it goes |
|---|---|---|
| URL | One bare link per line | Scripts, crawlers, bulk paste into a link checker |
| Markdown | A link list using the anchor text as the label | Notes, README files, issues, wikis |
| HTML | <a href="..."> elements | Email, CMS rich-text fields, newsletters |
| JSON Lines | One JSON object per line | Programs, spreadsheet import, small internal tools |
The destination picks the format: script → URL, human reader → Markdown, rich-text field → HTML, line-by-line parser → JSON Lines.
Markdown and HTML keep the anchor text as the label — the part a normal copy destroys, and the difference between a list someone reads and one they close.
The full workflow, six steps
- Open the page and click the toolbar icon — or right-click and choose Extract page links, which scans without opening the popup.
- Every
<a>is collected. A MutationObserver keeps listening afterwards, so links added by an SPA route change, infinite scroll or a lazy-loading tab join the list as they appear. - Filter by keyword include or exclude, internal versus external, real anchors versus
javascript:pseudo-links. Each URL also shows its occurrence count, so a link repeated in nav and footer is one row. - Save the combination as a named recipe if you will need it again.
- Choose the copy format.
- Copy the filtered result, or tick rows and open them in background tabs.
Scan results exist in memory only. Close the page and they are gone: no file is written, nothing is sent anywhere.
Saved filter recipes: configure once, reuse forever
Most filtering is repetition. For a documentation site the useful recipe is roughly: exclude /tag/ and /author/, internal links only, no anchors, no javascript: links. Four controls, reset on every page.
A recipe stores that combination under a name. Scan, pick the recipe, and the list is already narrowed. It holds filter state rather than results, so it works on a page you have never scanned.
Two honest limits. Recipes live in local storage on that machine, so they do not follow you to a second computer, and clearing site data removes them. A recipe also narrows the current list; it does not crawl for new URLs.
Batch opening: what the interval options mean
Tick a few rows, or use the current filter result, and LinkHarvest opens them in background tabs one after another. The interval dropdown offers 0, 300 (the default), 800 and 1500 milliseconds.
- 0 ms — all at once. Fine for three or four links; hard on forty.
- 300 ms — the default. The queue drains quickly and the browser stays responsive.
- 800 ms — heavy pages, video, or a laptop already running a dozen tabs.
- 1500 ms — for sites that throttle or log you out on parallel requests.
The spacing is not only about your browser. Twenty simultaneous requests to one host look like a scraper, and the failure mode is rarely an error — it is a blank tab or a login screen.
When a file beats the clipboard
The clipboard is for the next thirty seconds; a file is for next week.
- TXT — one link per line, free. The format for a link checker or a bulk importer.
- JSON — structured output, free. For scripts that want fields instead of a text blob.
- CSV — free like the rest. UTF-8 with a BOM, the detail that lets Excel and WPS open accented and non-Latin titles without mojibake.
What is paid and what is not. Scanning, filtering, search, copying in all four formats, TXT and JSON export, and batch opening are free with no account and no licence key. The paid tier is Link Audit — 100 links per run free, up to 2,000 with a licence: US$9.99 one-time, or US$2.99 per month on the subscription plan. Chrome Web Store · Edge Add-ons.
No link limit, no trial timer, no account wall: the free tier is the working tool, not a demo of it.
Why not just use an online link extractor?
Paste-a-URL services are convenient until the page is not public. Their server fetches the URL, which brings three limits at once:
- Their server has to reach the page. An intranet, a staging site behind basic auth, or a dashboard you are signed into is out of reach.
- The page goes to a third party. For a client portal that is a compliance question, not a preference.
- Most do not execute JavaScript, so an SPA returns an empty shell.
The extension reads the DOM of the tab you are already on, with permissions limited to the active tab, scripting, storage and the context menu. Nothing is uploaded: results sit in memory and clear when the page closes, and only saved recipes and interface preferences persist, in local storage on your machine.
Frequently asked questions
Do I have to pay to copy links?
No. All four copy formats — URL, Markdown, HTML and JSON Lines — are free, with no account and no licence. CSV export is free too — the paid tier is Link Audit: 100 links per run free, up to 2,000 with a licence.
Can I copy links as Markdown with their titles?
Yes. The Markdown format outputs a link list that uses each anchor's visible text as the label, so you get readable entries instead of bare URLs.
Can it capture links that load after scrolling?
Yes. A MutationObserver watches the page after the initial scan, so links added by infinite scroll, a tab switch or an SPA route change are appended in real time.
Will batch opening dozens of tabs freeze the browser?
Tune the interval: 300 ms is the default, 800 ms suits heavy pages, 1500 ms is safest for sites that throttle parallel requests. 0 ms only makes sense for a few links.
What is paid in LinkHarvest?
The paid feature is Link Audit — checking the HTTP status of your links. You get 100 links per run free; a licence raises it to 2,000 per run and adds batch continuation plus a CSV audit report with status codes, redirect targets and response times. CSV export itself stays free: UTF-8 with a BOM, so Excel and WPS open non-Latin titles without mojibake.
Are my scan results uploaded anywhere?
No. The scan runs locally, results are held in memory only, and closing the page clears them. Only saved filter recipes and interface preferences persist, in local storage on your device.
Explore more tools in the VKT Extensions catalog, or reach us at [email protected].
