External URLs
Every /URI action on the page, split into protocol, domain and query string so you can group by site and spot the odd one out.
Extract every hyperlink inside your PDF—including website URLs, email addresses, internal page links, and bookmarks. Validate broken links, review destinations, and export a complete link report without installing software.
A PDF shows you the words. It does not show you where they go. This free link checker reads the document’s own structure and returns every clickable destination it contains — external URLs, email and phone links, internal jumps, bookmarks, attachments and script actions — each with its page number, its warnings and an export button.
Eight kinds of destination live inside a PDF, and most tools report only the first one.
Every /URI action on the page, split into protocol, domain and query string so you can group by site and spot the odd one out.
mailto: targets parsed into the address plus any prefilled subject, CC, BCC and body — the parts a normal viewer hides from you.
tel: and sms: actions, reported with the raw number exactly as the document author stored it.
GoTo actions and named destinations resolved to a real page number, so a cross-reference that points nowhere is obvious.
The outline tree, with each bookmark title, its depth and its full path, alongside the destination it opens.
Script and file-launch actions are listed with their contents so you can read them. They are reported, never executed.
Embedded files and GoToR actions that open a page inside a different PDF — a common way for links to leave a document unnoticed.
Annotations with no border and no appearance stream. They are clickable, they are not visible, and they get flagged.
This is the one thing worth understanding before you upload anything, and it is why two link extractors can give you different answers for the same file.
In a PDF, a clickable link is an annotation in the page’s/Annotsarray with subtype/Link, whose action dictionary/Aholds the target under/URI. The text you see underneath it is a completely separate object. Delete the annotation and the words stay; delete the words and the rectangle is still clickable.
That separation explains almost every complaint about PDF links: why copying the text gives you the label instead of the address, why a URL that looks like a link does nothing when clicked, and why exporting from Word or Excel sometimes strips the link and keeps the text. This tool reads the annotations and actions. If a URL was never linked, there is nothing in the file to report — and saying otherwise would be a guess dressed up as a result.
| Found | Not found |
|---|---|
| Link annotations with a /URI action | A URL typed as plain text with no link over it |
| Internal GoTo and named destinations | URLs printed inside a scanned page image (no OCR) |
| Outline bookmarks and their targets | URLs encoded in a QR code or barcode |
| mailto, tel and sms actions | Links inside a PDF you have not unlocked |
| JavaScript, Launch, SubmitForm actions | Several PDFs in a single batch run |
| Embedded files and remote GoToR jumps | Links generated by a viewer at display time |
Working with a document whose text layer itself is the problem? Convert the PDF to Markdown to get the readable text out, or open the raw objects in the PDF object explorer.
Three steps, about a minute, no signup and no watermark.
Drag your file onto the box above or pick it from your device. Nothing is installed and no account is created.
Every link, action and bookmark appears in one searchable table. Filter by type, by broken, by HTTP or by duplicate, and click a row to highlight its rectangle on the page.
Download CSV, JSON, TXT or Markdown. The CSV carries page, type, URL, domain and status, so it opens straight into Excel or Google Sheets.
Jump back to the uploader when you are ready.
A flat list tells you what the links are. The report tells you where they are, which ones repeat, and which ones deserve a second look.
Each finding knows its page and its exact annotation rectangle, drawn over the page preview when you select the row.
Links grouped by domain, with the count, the pages each domain appears on, and the protocols used.
Links and warnings per page, so a 900-page report tells you where to look instead of making you page through it.
Repeated destinations are matched on their normalised URL and counted, which is what makes a clean deduplicated export possible.
Query strings are parsed and known trackers — utm_source, utm_campaign, gclid, fbclid, mc_cid — are listed per link before you publish.
Plain HTTP, raw IP hosts, unusually long URLs, broken internal destinations and hidden clickable areas each raise a severity-rated warning.
Ask for it and external links are checked with a HEAD request and a GET fallback, returning the status code and any redirect target.
CSV for spreadsheets, JSON for pipelines, Markdown for a pull request or a ticket, TXT for a quick paste.
There is no Excel export because there does not need to be — the CSV opens in Excel, Numbers and Google Sheets with the columns already in place.
Page, type, URL, domain and status per row. For spreadsheets, filtering and sharing with someone who will never open a JSON file.
The complete report: findings, rectangles, warnings, domain rollup and page heatmap. For scripts, pipelines and diffing two versions of a document.
A summary plus a formatted table. Drops straight into a pull request, a ticket or a handoff document without reformatting.
Plain lines, nothing else. For a quick paste into an indexing tool, a checker script or an email.
The same problem shows up in six jobs: the links are in the document, and the document will not hand them over.
Check every outbound link in a whitepaper, catalogue or annual report while you can still fix it — including the ones nobody remembers adding.
Marketing and outreach reports arrive as PDFs full of placements. Export the list to CSV instead of clicking through page by page.
Documents outlive the sites they cite. Turn on validation and get the status code for every external destination in one pass.
See where an attachment actually points before anyone clicks — including invisible rectangles, plain HTTP hosts and JavaScript actions, none of which are executed.
List every DOI, arXiv or publisher link in a paper, with the page it appears on, and confirm the targets still resolve.
Get the link structure of a document into a spreadsheet or a database as JSON, with page numbers intact, before rebuilding it elsewhere.
Same idea, no browser. Walk each page’s /Annots array, keep the annotations whose subtype is /Link, and read /A → /URI. pypdf, pdfplumber and PyMuPDF all expose this; only the accessor names change.
Worth knowing before you build on it: annotation rectangles use PDF user space with the origin at the bottom left, while pdfplumber reports coordinates from the top left. Matching a link to the text underneath it means converting between the two, which is the step most homegrown extractors get wrong.
# pip install pypdf
from pypdf import PdfReader
reader = PdfReader("document.pdf")
for number, page in enumerate(reader.pages, start=1):
for annot in page.get("/Annots", []):
obj = annot.get_object()
if obj.get("/Subtype") != "/Link":
continue
uri = obj.get("/A", {}).get("/URI")
if uri:
print(number, uri)Seven things that make PDF links behave the way they do.
A PDF link annotation is a clickable rectangle stored in the page structure. It may point to a URL, an email address, an internal page destination, or another PDF action.
The visible text and the clickable target are separate objects. A PDF can show ordinary text while the interactive annotation underneath it points somewhere else entirely.
External links leave the PDF for a web, mail, phone or SMS destination. Internal links jump to another page, named destination or bookmark target inside the same document.
Bookmarks live in the outline tree and usually appear in a viewer sidebar. Link annotations live on the page itself as clickable areas, and the two can disagree.
A URL printed as text is not automatically a link annotation. Word processors and export filters often drop the annotation and keep only the characters.
PDFs can contain link rectangles with no border and no appearance stream. They stay clickable, so the checker flags them for review.
Read the inventory, review the HTTP and tracking warnings, optionally validate the external links, then export a report for your records or for handoff.
More on the file format itself in the PDF internals guide.
Stated up front, because finding out afterwards is worse.
Up to 100 pages per document, one document per run. For a batch, export a CSV per file and combine them afterwards.
If a password is required to open the document, its strings and streams are encrypted and link targets cannot be read reliably.
The PDF is never repaired, rewritten or saved back, script actions are reported rather than run, and the file is deleted immediately after the report is produced.
Full detail in file handling and the privacy policy. Need the document locked down instead? Encrypt a PDF.
Upload the PDF to the PDF Link Checker. It reads PDF link annotations, bookmarks, named destinations and action dictionaries, then shows the results in a searchable inventory you can filter and export.
A clickable link is an annotation object stored on the page with its own target, while a plain-text URL is just characters drawn on the page. This tool reports the annotations and actions defined in the PDF structure, so a URL typed as text with nothing linked over it will not appear.
Not in one run — the checker inspects one PDF at a time. Run each file separately and export a CSV per document, then combine the CSV files in Excel, Google Sheets or a script if you need a single list.
Only if the scan actually contains link annotations, which most do not. A scanned page is an image, so a URL printed inside it is pixels rather than a link object, and no OCR pass is run during inspection.
Unlock the PDF first. When a document needs a password to open, its strings and streams are encrypted, so link targets cannot be read reliably until the encryption is removed.
Yes. You can export the inspection result as CSV, JSON, TXT or Markdown. The CSV carries page number, link type, URL, domain and status, and opens directly in Excel, Numbers or Google Sheets.
Yes. Every finding records the page it sits on plus the annotation rectangle, and selecting a row highlights that rectangle on the page preview so you can see exactly which element is clickable.
Yes, when you enable external validation. The tool checks external HTTP and HTTPS links with a HEAD request and a GET fallback, reporting status codes and redirect targets — though some websites block automated checks.
Yes. Mailto links are parsed into the email address plus subject, CC, BCC and body fields when those values are present in the PDF link. Phone (tel:) and SMS links are detected the same way.
Yes. The link checker reads the PDF outline tree and reports bookmark titles, hierarchy and destinations where the PDF exposes them, alongside the page-level link annotations.
A PDF link annotation is an interactive rectangle on a page. It can point to a URL, an internal page destination, a bookmark target or another PDF action, and it is stored separately from the text you see beneath it.
Because the destination is not part of the text you are copying. The URL lives in the annotation object attached to the page, so selecting the words and pasting them gives you the label rather than the target.
Yes. Link annotations with no visible border or appearance are flagged as invisible clickable areas so you can review them before publishing or forwarding the document.
Yes. Query strings are parsed and known tracking parameters such as utm_source, gclid and fbclid are listed per link, while plain HTTP links, raw IP hosts and unusually long URLs are flagged for review.
No. The PDF is inspected read-only. It is not repaired, rewritten, compressed or saved back during analysis, and JavaScript or Launch actions found inside it are reported but never executed.
Not yet. QR code detection is planned as a separate image-analysis pass; this version focuses on links and actions actually defined in the PDF structure.
Loop over each page, read its /Annots array, and pull the /A dictionary /URI value from annotations whose subtype is /Link. The developer section on this page has a copy-pasteable pypdf snippet that does exactly that.
The PDF is sent over an encrypted connection, inspected, and then deleted immediately after the report is produced. Nothing is kept, no account is required, and the file is never used for anything besides producing your link report.
Free, no signup, no watermark, no daily limit. Your document is inspected read-only and deleted straight after.
Extract links from a PDF