Pull every clickable link out of a PDF into a spreadsheet, without uploading the file anywhere. How it works and where it fails.
Jump to a section
A PDF can hold hundreds of links that are invisible until you click them. Copying them out by hand is miserable, and most online tools want you to upload the document first. Here is what is actually happening inside the file, and how to get the links out without sending it anywhere.
A link in a PDF is not text
This is the part that trips people up. When you see a blue underlined phrase in a PDF, the URL is usually not written in the page text at all. The visible words and the destination are separate objects: the text is drawn on the page, and a link annotation sits on top of it as a rectangle with a URI action attached. That is why selecting the text and copying it gives you the words but not the address.
It also means searching the document for "http" often finds nothing useful. The URL lives in the file structure, not the page content, so you need something that reads the structure rather than the rendered text.
Where the URLs actually live
Every clickable external link in a PDF is a URI action, written as a /URI key followed by the address as a string. The string comes in one of two forms: a literal in round brackets, or a hex string in angle brackets. Both can be escaped, so a URL containing a bracket of its own is written with a backslash in front of it.
Naive tools regex for the text between brackets and stop at the first closing one. Any URL with an escaped parenthesis in it — Wikipedia article URLs are full of these — gets silently truncated to something that no longer works.
The compression problem
In any PDF written since roughly version 1.5, most objects are not stored as plain bytes. They are packed into compressed object streams, usually with FlateDecode, which is the same algorithm as a zip file. Open such a PDF in a text editor and the link annotations are simply not there in readable form.
This is the single biggest reason a link extractor returns fewer links than you can see in the document, or none at all. If a tool only scans the raw bytes, it finds whatever happens to be uncompressed and misses the rest. The streams have to be inflated first and then scanned as well.
Doing it without uploading the file
None of this needs a server. A browser can read the file into memory, decompress the streams and scan them, which is how our extractor works: you choose a file, it is parsed on your own machine, and a spreadsheet is generated there. The document is never transmitted, because no copy of it is ever made outside the tab.
That matters more than it sounds. Contracts, invoices, internal reports and draft filings are exactly the documents whose links people want to audit, and they are also exactly the documents that should not be uploaded to an unknown service to save five minutes.
What you get out
The useful output is one URL per row in a spreadsheet, deduplicated and in document order, so you can sort, filter and check them. Duplicates matter here: a link repeated in a page footer will otherwise appear on every page and bury the links you care about.
Our extractor keeps mailto: and tel: links alongside http and https, since an audit of a document usually wants those too. Internal navigation links — the ones that jump to another page of the same document — are a different object type and are deliberately left out.
Frequently asked questions
Can I get links out of a PDF without uploading it?
Why does my PDF show links but the tool finds none?
Does this find URLs that are written as plain text?
What about password-protected PDFs?
Try it
Our PDF link extractor runs entirely in your browser — the file is never uploaded. More posts.