For a ready-made workflow to save a URL list as PDFs, start with ArchiveBox: it can import URLs from a text file and save snapshots in PDF and other archival formats. If you need a custom converter, Puppeteer or Playwright let you generate PDFs with browser automation; Gotenberg exposes URL-to-PDF conversion through an HTTP API. wkhtmltopdf has batch-oriented command-line features, but its older Qt WebKit rendering approach makes testing against your target sites especially important.
The right choice depends less on a headline speed claim—none is established here—than on whether you want a managed archive, a script you control, or an internal conversion service. This guide compares those workflows and shows how to build a small Node.js batch converter.
As an Amazon Associate I earn from qualifying purchases.
Choose a workflow before choosing a converter
Bulk PDF saving has two separate jobs: managing a list of URLs, and rendering each page into a PDF. ArchiveBox documents list import and archival snapshots. Puppeteer and Playwright document page-level PDF generation; your application must add list handling, filenames, retries, concurrency limits, and failure logging. Gotenberg offers a conversion endpoint, while wkhtmltopdf supports command-line batch patterns.
- Want a ready-made archive of a URL collection? Choose ArchiveBox and decide whether you want only PDFs or its wider set of snapshot formats.
- Want a custom pipeline? Use Puppeteer or Playwright and own the orchestration around the browser.
- Want an internal HTTP conversion service? Evaluate Gotenberg.
- Already depend on wkhtmltopdf? Test its output on your actual sites before extending that workflow.
These are workflow distinctions, not benchmark results. The documentation reviewed does not establish a universal winner for speed, resource use, or success rate.
#1 Best Overall
- FAST DOCUMENT SCANNING — Document scanner with feeder allows you to speed through stacks with a 50-sheet Auto Document Feeder (ADF); Efficient office scanner to help you scan more productively
- INTUITIVE, HIGH-SPEED SOFTWARE — Quickly scan with this desktop document scanner; Epson ScanSmart Software lets you easily preview scans, email files, upload to the cloud, and more; Plus, automatic file naming saves even more time
- SEAMLESS INTEGRATION — Easily incorporate your data into most document management software with the included TWAIN driver; Office document scanner integrates seamlessly with business workflows
- EASY SHARING — Duplex scanner allows you to scan straight to email or popular cloud storage2 services like Dropbox, Evernote, Google Drive, and OneDrive for simple storage and sharing
- SIMPLE FILE MANAGEMENT — Scanner allows the creation of searchable PDFs with Optical Character Recognition (OCR) and convert scans to editable Word or Excel files effortlessly; Designed for home and office document scanning
Compare the open-source options
| Tool | Best fit | What its documentation supports | What you still need to handle |
|---|---|---|---|
| ArchiveBox | Self-hosted archiving of URL collections | Import a URL list; snapshots can include PDF, HTML, screenshots, WARC, metadata, and extracted article text. | Operating an archive system; deciding which output formats to retain. |
| Puppeteer | Custom Node.js browser automation | Navigate to a URL and generate a PDF with Page.pdf(); print CSS is used by default. |
URL intake, names, retries, concurrency, authentication, and error records. |
| Playwright | Custom browser automation | Generate a PDF with page.pdf() using print CSS; screen media can be emulated before output. |
The same batch orchestration and operational logic as a custom Puppeteer script. |
| Gotenberg | Self-hosted conversion endpoint | An HTTP multipart route converts URLs to PDFs using Headless Chromium; its documentation discusses JavaScript, SPAs, and dynamic content. | Deploying and calling the service; a URL-list manager is not established by the conversion route itself. |
| wkhtmltopdf | Existing or legacy CLI workflows | Multiple page objects and repeated command input from standard input are documented. | Validating current-site compatibility; its Qt WebKit basis differs from Chromium-based rendering. |
Use ArchiveBox for a URL-list archive
ArchiveBox is the clearest fit when the input is already a collection of URLs and the goal is preservation rather than a single-purpose PDF conversion. Its documented text-file import reduces the amount of batch plumbing you need to write, and a snapshot can retain PDF alongside HTML, screenshots, WARC, metadata, and extracted text.
That breadth is useful when you may later need to inspect or recover information beyond the rendered PDF. It also means ArchiveBox is more system to operate than a small script that writes one PDF per URL. If PDF-only output is the requirement, decide whether the other snapshot artifacts justify maintaining the archive.
Build a custom batch converter with Puppeteer
Puppeteer is a practical choice when you want Node.js control over navigation and PDF output. The following runnable example reads one URL per line from urls.txt, writes a separate PDF for each URL, limits simultaneous pages, and records failures for a later retry. It assumes Node.js and a local Chromium installation or one that Puppeteer can install.
Recommended Free Tools
Rank #2
- PORTABLE SCANNER FOR USE ON-THE-GO — The fastest and lightest mobile single-sheet-fed compact document scanner in its class¹
- QUICK DOCUMENT SCANNING ― This Epson ultra-fast scanner scans a single page as quickly as 5.5 seconds²; Windows and Mac compatible
- VERSATILE PAPER HANDLING ― Portable scanner scans documents up to 8.5 x 72 in; Also easily digitizes receipts and ID cards to make accounting, bookkeeping, and organizing simpler
- INTUITIVE, HIGH-SPEED SOFTWARE — Epson ScanSmart Software³ is a smart tool allowing you to easily scan, review, and save; Stay organized easily with the help of this Epson scanner
- EASY SETUP — USB-powered connect to your computer for quick and simple scanning; No batteries or external power supply required to operate portable document scanner; Standard Connectivity: USB 2.0
- Install Puppeteer: run
npm install puppeteer. - Create
urls.txt: put one complete URL per line; blank lines and lines beginning with#are ignored. - Save the script below as
batch-pdf.mjs. - Run it:
node batch-pdf.mjs. PDFs go intopdf-output; failures are written tofailed-urls.txt.
import fs from 'node:fs/promises';
import path from 'node:path';
import puppeteer from 'puppeteer';
const input = await fs.readFile('urls.txt', 'utf8');
const urls = input.split(/r?n/)
.map(line => line.trim())
.filter(line => line && !line.startsWith('#'));
const outputDir = 'pdf-output';
const concurrency = 3;
const timeoutMs = 45_000;
await fs.mkdir(outputDir, { recursive: true });
function safeName(url, index) {
const parsed = new URL(url);
const base = `${parsed.hostname}${parsed.pathname}`
.replace(/[^a-z0-9._-]+/gi, '_')
.replace(/^_+|_+$/g, '')
.slice(0, 100) || 'page';
return `${String(index + 1).padStart(4, '0')}-${base}.pdf`;
}
const browser = await puppeteer.launch({ headless: true });
const failures = [];
let next = 0;
async function worker() {
while (true) {
const index = next++;
if (index >= urls.length) return;
const url = urls[index];
const page = await browser.newPage();
try {
await page.goto(url, {
waitUntil: 'networkidle2',
timeout: timeoutMs
});
await page.pdf({
path: path.join(outputDir, safeName(url, index)),
format: 'A4',
printBackground: true,
preferCSSPageSize: true
});
console.log(`Saved ${url}`);
} catch (error) {
failures.push(`${url}t${error.message}`);
console.error(`Failed ${url}: ${error.message}`);
} finally {
await page.close();
}
}
}
try {
await Promise.all(
Array.from({ length: Math.min(concurrency, urls.length) }, () => worker())
);
} finally {
await browser.close();
}
if (failures.length) {
await fs.writeFile('failed-urls.txt', `${failures.join('n')}n`);
process.exitCode = 1;
}
networkidle2 is a deliberate starting readiness condition, not a guarantee that every page is finished rendering. Pages with continuous network activity may never become idle; pages that load content after a user action may appear incomplete. For those cases, replace it with an appropriate condition, such as domcontentloaded followed by waiting for a page-specific selector. Keep the selector and timeout specific to the sites you control.
Adapt the script to your collection
- Output naming: the example uses a numbered, sanitized host-and-path name. If distinct URLs can share a path, add a stable hash of the full URL to prevent collisions. Treat query strings carefully; they may identify different pages, but can also contain secrets.
- Print styling: Puppeteer’s PDF output uses print CSS by default. The example sets
printBackgroundso background colors and images are included, andpreferCSSPageSizeso page size declared by CSS can take precedence. Remove or adjust these options if your desired paper layout differs. - Authentication: the example uses a fresh unauthenticated browser page for each URL. For pages requiring login, use an authorized account and explicitly manage cookies or a persistent browser context; do not put passwords or tokens in the URL list or log.
- Retries: failed URLs are recorded, not automatically retried. Rerun only failures after inspecting the cause, or add a small capped retry policy for transient network errors. Avoid retrying indefinitely.
- Concurrency: three pages at once is a conservative example setting, not a benchmark-derived optimum. Increase gradually while monitoring memory, target-site rate limits, and error rates; lower it for long or resource-heavy pages.
Use Playwright when its browser workflow fits
Playwright also exposes page-level PDF generation and print CSS behavior. Its documentation describes emulating screen media before calling page.pdf() when screen styling is wanted. As with Puppeteer, it does not turn a list into a managed batch workflow by itself: the input loop, deterministic filenames, limits, retries, and logs remain your responsibility.
Choose between Playwright and Puppeteer based on the browser automation workflow and dependencies you want to maintain, not on a performance claim unsupported by the available documentation. For either library, test representative pages and verify resulting PDFs rather than assuming a successful navigation means a complete document.
Rank #3
- OUR MOST ADVANCED SCANSNAP. Large touchscreen, fast 45ppm double-sided scanning, 100-sheet document feeder, Wi-Fi and USB connectivity, automatic optimizations, and support for cloud services. Upgraded replacement for the discontinued iX1600
- CUSTOMIZABLE. SHARABLE. Select personalized profiles from the touchscreen. Send to PC, Mac, mobile devices, and clouds. QUICK MENU lets you quickly scan-drag-drop to your favorite computer apps
- STABLE WIRELESS OR USB CONNECTION. Built-in Wi-Fi 6 for the fastest and most secure scanning. Connect to smart devices or cloud services without a computer. USB-C connection also available
- PHOTO AND DOCUMENT ORGANIZATION MADE EFFORTLESS. Easily manage, edit, and use scanned data from documents, receipts, photos, and business cards. Automatically optimize, name, and sort files
- AVOIDS PAPER JAMS AND DAMAGE. Features a brake roller system to feed paper smoothly, a multi-feed sensor that detects pages stuck together, and skew detection to prevent paper damage and data loss
Use Gotenberg for an internal HTTP endpoint
Gotenberg packages URL-to-PDF conversion behind an HTTP multipart route and uses Headless Chromium. Its documentation specifically addresses JavaScript, single-page applications, and dynamic content, which makes it a candidate when several applications need to send URLs to a common conversion service.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsIt is a service to deploy and call, not a documented turnkey URL-list manager. Your caller still needs to read the collection, submit one conversion per URL, name and store results, apply concurrency and rate limits, and record failed requests. Confirm the exact route and request fields in the Gotenberg documentation for the version you deploy; those details are not reproduced here.
Where wkhtmltopdf may fit
wkhtmltopdf documents multiple page objects in one command and a standard-input mode for repeated invocations, so it can fit established command-line workflows. Its overview identifies Qt WebKit as the rendering engine. Because the documentation reviewed does not establish how it handles modern sites or its current maintenance status, check both independently and test your actual pages before relying on it for production archives.
Rank #4
- FITS SMALL SPACES AND STAYS OUT OF THE WAY. Innovative space-saving design to free up desk space, even when it's being used
- SCAN DOCUMENTS, PHOTOS, CARDS, AND MORE. Handles most document types, including thick items and plastic cards. Exclusive QUICK MENU lets you quickly scan-drag-drop to your favorite computer apps
- GREAT IMAGES EVERY TIME, NO EXPERIENCE REQUIRED. A single touch starts fast, up to 30ppm duplex scanning with automatic de-skew, color optimization, and blank page removal for outstanding results without driver setup
- SCAN WHERE YOU WANT, WHEN YOU WANT. Connect with USB or Wi-Fi. Send to Mac, PC, mobile devices, and cloud services. Scan to Chromebook using the mobile app. Can be used without a computer
- PHOTO AND DOCUMENT ORGANIZATION MADE EFFORTLESS. ScanSnap Home all-in-one software brings together all your favorite functions. Easily manage, edit, and use scanned data from documents, receipts, business cards, photos, and more
Make a small pilot before processing the whole list
No tool documentation establishes universal conversion success, throughput, or resource use. A pilot is the practical way to uncover site-specific behavior before a large run. Select a few pages representing the hardest cases in your collection:
- A mostly static page, to check basic layout and fonts.
- A JavaScript-heavy page or SPA, to check whether your readiness condition waits for rendered content.
- A long page with lazy-loaded images, to check whether content beyond the initial viewport appears.
- A login-protected page, if applicable, to verify an authorized authentication flow.
Open each resulting PDF and check page breaks, backgrounds, images, missing content, and whether the output contains the intended page rather than a login screen or error page. Record the URL and failure reason for anything that needs a different wait condition or authentication setup. Keep a reproducible list so you can compare changes in browser versions or site behavior.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteReliability, performance, and cost considerations
Reliability
Webpages can fail independently because of timeouts, access controls, changing content, or client-side rendering. Design the batch so one failure does not discard successful PDFs: isolate work per URL, close each page in a finally block, log the exact failed URL and error, and allow failures to be rerun separately. For sensitive collections, keep credentials out of logs and restrict access to the output directory.
Best Value
- FAST SPEEDS - Scans color and black and white documents a blazing speed up to 16ppm (1). Color scanning won’t slow you down as the color scan speed is the same as the black and white scan speed.
- ULTRA COMPACT – At less than 1 foot in length and only about 1. 5lbs in weight you can fit this device virtually anywhere (a bag, a purse, even a pocket).
- READY WHENEVER YOU ARE – The DS-640 mobile scanner is powered via an included micro USB 3. 0 cable allowing you to use it even where there is no outlet available. Plug it into you PC or laptop and you are ready to scan.
- WORKS YOUR WAY – Use the Brother free iPrint&Scan desktop app for scanning to multiple “Scan-to” destinations like PC, Network, cloud services, Email and OCR. (2) Supports Windows, Mac and Linux and TWAIN/WIA for PC/ICA for Mac/SANE drivers. (3)
- OPTIMIZE IMAGES AND TEXT – Automatic color detection/adjustment, image rotation (PC only), bleed through prevention/background removal, text enhancement, color drop to enhance scans. Software suite includes document management and OCR software. (4)
Performance
Browser-based rendering has operational overhead, and the reviewed documentation does not provide a defensible cross-tool throughput figure. Start with low concurrency and scale only after observing memory use, completion times, target-site throttling, and failures on your own workload. If pages are large or dynamic, more parallel tabs can increase resource pressure without improving end-to-end results.
Cost
The tools listed here are open-source options, but self-hosting and automation still consume compute, storage, and operator time. A multi-format archive can use more storage than PDFs alone; a browser script needs a runtime and space for outputs and logs; a conversion service requires deployment and maintenance. Estimate using a representative pilot rather than an assumed pages-per-minute rate.
Or skip the browser setup
For a one-URL screenshot or PDF request, ScreenshotNeo offers a hosted API; it is not a replacement for the URL-list orchestration in the examples above. One GET request returns a capture, and you can call it from a script for each URL:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. Before capture, it can accept cookie and consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets; each of those steps can be turned off. Bot checks, blank pages, timeouts, and failed loads are not billed, and cache hits cost nothing; response headers report the page verdict and billing status. ScreenshotNeo also has an MCP server with take_screenshot, get_page_info, and capture_pdf tools for AI agents, including Claude, Cursor, and other MCP clients. Its Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.
Frequently Asked Questions
Does any of these tools guarantee a correct PDF for every URL?
No. Rendering depends on the page, authentication, dynamic behavior, and readiness conditions; test the pages you need to save.
Can I choose screen styling instead of print styling?
Playwright documents emulating screen media before PDF generation. Puppeteer and Playwright PDF defaults use print CSS.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




