Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
Skip to content
World desk9 min

Best Open-Source Tools for Saving Webpages as PDF in Bulk

Compare open-source ways to save a URL list as PDFs, from ArchiveBox to custom Chromium automation, and learn how to build a fault-tolerant batch workflow.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • 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
Sale
Epson Workforce ES-400 II High-Speed Color Duplex Desktop Document Scanner
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
Epson Workforce ES-50 Compact & Lightweight Mobile Document Scanner
  • 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
  1. Install Puppeteer: run npm install puppeteer.
  2. Create urls.txt: put one complete URL per line; blank lines and lines beginning with # are ignored.
  3. Save the script below as batch-pdf.mjs.
  4. Run it: node batch-pdf.mjs. PDFs go into pdf-output; failures are written to failed-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 printBackground so background colors and images are included, and preferCSSPageSize so 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
Sale
ScanSnap iX2500 Wireless or USB High-Speed Document Scanner, Black
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

It 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
Sale
ScanSnap iX1300 Wireless or USB Double-Sided Color Document Scanner, Black
  • 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
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Reliability, 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
Sale
Brother DS-640 Compact Mobile Document Scanner, (Model: DS640)
  • 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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.