Every hyperlink hidden inside your PDF, in one list

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.

  • Marketing PDFs
  • eBooks
  • Government documents
  • Contracts
  • Research papers
  • Product manuals
  • Annual reports
  • Invoices and catalogues

What it finds

Eight kinds of destination live inside a PDF, and most tools report only the first one.

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.

Email links

mailto: targets parsed into the address plus any prefilled subject, CC, BCC and body — the parts a normal viewer hides from you.

Phone and SMS

tel: and sms: actions, reported with the raw number exactly as the document author stored it.

Internal page jumps

GoTo actions and named destinations resolved to a real page number, so a cross-reference that points nowhere is obvious.

Bookmarks

The outline tree, with each bookmark title, its depth and its full path, alongside the destination it opens.

JavaScript and Launch

Script and file-launch actions are listed with their contents so you can read them. They are reported, never executed.

Attachments and remote jumps

Embedded files and GoToR actions that open a page inside a different PDF — a common way for links to leave a document unnoticed.

Invisible clickable areas

Annotations with no border and no appearance stream. They are clickable, they are not visible, and they get flagged.

Annotation links vs plain-text URLs

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 /Annots array with subtype /Link, whose action dictionary /A holds 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.

FoundNot found
Link annotations with a /URI actionA URL typed as plain text with no link over it
Internal GoTo and named destinationsURLs printed inside a scanned page image (no OCR)
Outline bookmarks and their targetsURLs encoded in a QR code or barcode
mailto, tel and sms actionsLinks inside a PDF you have not unlocked
JavaScript, Launch, SubmitForm actionsSeveral PDFs in a single batch run
Embedded files and remote GoToR jumpsLinks 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.

How to extract links from a PDF

Three steps, about a minute, no signup and no watermark.

  1. Drop the PDF in

    Drag your file onto the box above or pick it from your device. Nothing is installed and no account is created.

  2. Read the inventory

    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.

  3. Export the report

    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.

More than a list of URLs

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.

Page number and rectangle

Each finding knows its page and its exact annotation rectangle, drawn over the page preview when you select the row.

Domain rollup

Links grouped by domain, with the count, the pages each domain appears on, and the protocols used.

Page heatmap

Links and warnings per page, so a 900-page report tells you where to look instead of making you page through it.

Duplicate detection

Repeated destinations are matched on their normalised URL and counted, which is what makes a clean deduplicated export possible.

Tracking parameters

Query strings are parsed and known trackers — utm_source, utm_campaign, gclid, fbclid, mc_cid — are listed per link before you publish.

Risk flags

Plain HTTP, raw IP hosts, unusually long URLs, broken internal destinations and hidden clickable areas each raise a severity-rated warning.

Optional live validation

Ask for it and external links are checked with a HEAD request and a GET fallback, returning the status code and any redirect target.

Four export formats

CSV for spreadsheets, JSON for pipelines, Markdown for a pull request or a ticket, TXT for a quick paste.

Export to CSV, JSON, TXT or Markdown

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.

CSV

Page, type, URL, domain and status per row. For spreadsheets, filtering and sharing with someone who will never open a JSON file.

JSON

The complete report: findings, rectangles, warnings, domain rollup and page heatmap. For scripts, pipelines and diffing two versions of a document.

Markdown

A summary plus a formatted table. Drops straight into a pull request, a ticket or a handoff document without reformatting.

TXT

Plain lines, nothing else. For a quick paste into an indexing tool, a checker script or an email.

What people use it for

The same problem shows up in six jobs: the links are in the document, and the document will not hand them over.

Audit a document before it ships

Check every outbound link in a whitepaper, catalogue or annual report while you can still fix it — including the ones nobody remembers adding.

Pull URLs out of a link report

Marketing and outreach reports arrive as PDFs full of placements. Export the list to CSV instead of clicking through page by page.

Find dead links in an old file

Documents outlive the sites they cite. Turn on validation and get the status code for every external destination in one pass.

Screen a PDF you were sent

See where an attachment actually points before anyone clicks — including invisible rectangles, plain HTTP hosts and JavaScript actions, none of which are executed.

Check references and citations

List every DOI, arXiv or publisher link in a paper, with the page it appears on, and confirm the targets still resolve.

Migrate content out of a PDF

Get the link structure of a document into a spreadsheet or a database as JSON, with page numbers intact, before rebuilding it elsewhere.

Doing it in Python

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.

extract_links.py
# 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)

How PDF links actually work

Seven things that make PDF links behave the way they do.

What is a PDF link annotation?

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.

How PDF links work

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.

Internal vs external links

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 vs links

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.

Why some URLs are not clickable

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.

Why some clickable areas have no text

PDFs can contain link rectangles with no border and no appearance stream. They stay clickable, so the checker flags them for review.

How to audit links before publishing

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.

Limits, and what happens to your file

Stated up front, because finding out afterwards is worse.

One file, up to 10MB

Up to 100 pages per document, one document per run. For a batch, export a CSV per file and combine them afterwards.

Unlock encrypted PDFs first

If a password is required to open the document, its strings and streams are encrypted and link targets cannot be read reliably.

Read-only, then deleted

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.

PDF Link Checker FAQ

  • 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.

See where your PDF actually points

Free, no signup, no watermark, no daily limit. Your document is inspected read-only and deleted straight after.

Extract links from a PDF