PDF Batch Suite avatar

PDF Batch Suite

Pricing

from $15.00 / 1,000 file processeds

Go to Apify Store
PDF Batch Suite

PDF Batch Suite

Batch PDF automation in one Actor: merge, split, rotate, watermark, compress, page/Bates numbering, metadata sanitize, and password protect/decrypt. Pass a list of PDF URLs or files, pick one operation, get every processed file back with a download link. Self-contained, no external API.

Pricing

from $15.00 / 1,000 file processeds

Rating

0.0

(0)

Developer

Aleksandr Jelohhin

Aleksandr Jelohhin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

PDF Batch Suite — bulk merge, split, rotate, watermark, number, sanitize & password‑protect PDFs

What is PDF Batch Suite?

PDF Batch Suite is a batch PDF processor in a single Apify Actor. Give it a list of PDF files — as https:// URLs, key‑value store keys or base64 data URIs — pick one operation, and get every processed PDF back with a direct download link.

It is built for the PDFs you assemble and send: contracts, invoices, payslips, statements, court bundles, board packs. Nine operations:

merge · split · rotate · watermark · compress · page / Bates numbering · sanitize · password‑protect · decrypt.

Every file in the list is processed in the same run, and one bad file never breaks the batch.

  • 🧰 One Actor, nine PDF operations — no separate tool or subscription per task
  • 📦 Built for batches — pass 1 or 500 files, same call, one failed row instead of a crash
  • 🔐 The only PDF Actor on Apify that does encryption — real 40‑/128‑/256‑bit password protection and decryption, plus one‑pass sanitize to strip scripts and hidden metadata
  • 🔒 Private by design — PDFs are processed inside the Actor; nothing is sent to a third‑party service, and no watermark, branding or tracking is ever added to your output
  • 🤖 Automation‑native — call it from the Apify API, schedule it, or wire it into n8n, Make, Zapier and AI agents
  • 💸 Pay per file, not per seat — no monthly SaaS licence

The PDF engine is bundled and runs fully self‑contained inside the Actor — your files never leave it.

Not a PDF‑to‑text scraper. This Actor changes PDFs (assemble, secure, stamp) — it does not extract text, tables or run OCR. The Apify Store already has strong Actors for that; pair them with this one.


What can PDF Batch Suite do?

operationWhat it doesOutput
mergeCombine all input files into one PDF, in list orderone PDF
splitBreak each PDF into parts — by page numbers or every N pagesone ZIP per input
rotateTurn every page 90°, 180° or 270° (fix sideways scans)one PDF per input
watermarkStamp a diagonal text watermark on every pageone PDF per input
compressShrink file size while keeping the PDF readableone PDF per input
pageNumbersStamp page numbers or Bates numbers on every pageone PDF per input
sanitizeStrip JavaScript, embedded files and hidden metadataone PDF per input
protectAdd a password / 40‑, 128‑ or 256‑bit encryptionone PDF per input
decryptRemove a known passwordone PDF per input

Typical use cases

  • Merge a month of invoices or receipts into one PDF for accounting
  • Bates‑number a batch of documents for discovery / legal disclosure (ABC‑000001…)
  • Add page numbers to a stack of reports before they go to print or a board
  • Sanitize contracts and offer letters — remove author names, editing history, embedded files and scripts before they leave the building
  • Stamp CONFIDENTIAL or DRAFT on a batch of contracts before sending
  • Compress scanned documents so they fit an upload limit or email
  • Rotate a batch of sideways or upside‑down scans back to portrait
  • Password‑protect payslips, statements or reports before delivery
  • Split a long report into per‑chapter files
  • Decrypt a batch of locked files you own and know the password to

Coming soon: redact, flatten form, convert to Word / Excel, HTML to PDF, image / logo watermark. OCR and text extraction stay out of scope by design.


Why use this instead of iLovePDF, Smallpdf or a PDF SaaS?

Consumer PDF toolsThis Actor
Batch (array of files in one call)✋ mostly one file at a time✅ built for it
Bates numbering / batch page numbers⚠️ rare, desktop‑only✅ built in
Metadata / script sanitizing⚠️ hidden in menus✅ one operation
Real password encryption in the same tool⚠️ separate feature / paywallprotect + decrypt
Fits an automation (n8n / Make / agents)⚠️ external API, separate billing✅ native Apify Actor
Forced watermark / branding on output⚠️ common on free tiers❌ never
Files shared with a third party⚠️ yes❌ processed in‑Actor
Pricingmonthly seat subscriptionpay per file processed

If your workflow already runs on Apify, you no longer have to bolt on a PDF SaaS just to merge invoices, Bates‑number a bundle or watermark a batch of contracts.


Input

FieldTypeRequiredNotes
operationenumone of the nine above
filesstring[]each item: an https:// URL, a data:application/pdf;base64,… URI, a bare key in this run's own default key‑value store, or kvs://STORE_ID/KEY for a store this run can access (use an https:// URL for files that live elsewhere)
operationParamsobjectper‑operation options, see below (the same params are applied to every file)
outputFormatenumauto (default) · pdf · zip
maxFileSizeMbintegerdefault 100; larger inputs fail gracefully and are not charged
perFileTimeoutSecsintegerdefault 120

operationParams by operation

// merge
{ "sortType": "orderProvided", "removeCertSign": true }
// sortType: orderProvided | byFileName | byDateModified | byDateCreated | byPDFTitle
// split — by explicit cut points
{ "mode": "pages", "pageNumbers": "1,5,10-12" }
// split — every N pages
{ "mode": "everyN", "everyNPages": 25 }
// rotate (angle is required)
{ "angle": 90 } // 90 | 180 | 270 (negative = counter-clockwise)
// watermark (text is required)
{ "text": "CONFIDENTIAL", "fontSize": 30, "rotation": 45, "opacity": 0.5,
"widthSpacer": 50, "heightSpacer": 50, "customColor": "#d3d3d3" }
// compress (optimizeLevel 1–9; expectedOutputSize optional, e.g. "2MB")
{ "optimizeLevel": 6, "grayscale": false }
// pageNumbers
{ "customText": "{n}", "position": 8, "startingNumber": 1, "zeroPad": 0,
"pagesToNumber": "all", "fontSize": 12, "fontType": "helvetica",
"fontColor": "#000000", "customMargin": "medium" }
// customText tokens: {n} current page · {total} page count · {filename}
// Bates numbering: { "customText": "ABC-{n}", "zeroPad": 6 } -> ABC-000001
// position 1-9 = top-left, top-center, top-right … bottom-right
// sanitize (every flag defaults as shown)
{ "removeJavaScript": true, "removeEmbeddedFiles": true, "removeXMPMetadata": true,
"removeMetadata": true, "removeLinks": false, "removeFonts": false }
// protect (password is required)
{ "password": "S3cret", "ownerPassword": "", "keyLength": 256,
"preventPrinting": false, "preventModify": false, "preventExtractContent": false }
// decrypt (password is required)
{ "password": "S3cret" }

If a required parameter is missing (for example watermark without text, or rotate without angle), the run fails immediately with a clear message and nothing is charged.


Output

Dataset — one record per output file

{
"operation": "pageNumbers",
"inputFile": "https://example.com/contract-a.pdf",
"inputFiles": ["https://example.com/contract-a.pdf"],
"outputFileName": "OUTPUT-1-pageNumbers-contract-a.pdf",
"outputKey": "OUTPUT-1-pageNumbers-contract-a.pdf",
"outputFileUrl": "https://api.apify.com/v2/key-value-stores/<id>/records/OUTPUT-1-pageNumbers-contract-a.pdf",
"pageCount": 12,
"sizeBytes": 348201,
"status": "success",
"errorMessage": null
}
  • status is success, failed, or skipped (your run cost limit was reached mid‑run).
  • Failed rows carry a human‑readable errorMessage and are never charged.
  • merge produces exactly one record; every other operation produces one per input file.

Key‑value store

Each processed file is stored under its outputKey, and outputFileUrl is a direct download link an automation or agent can fetch without re‑running the Actor.


Examples

Merge a batch of invoices into one PDF

{
"operation": "merge",
"files": [
"https://files.example.com/invoice-jan.pdf",
"https://files.example.com/invoice-feb.pdf",
"https://files.example.com/invoice-mar.pdf"
]
}

Bates‑number a disclosure bundle

{
"operation": "pageNumbers",
"files": [
"https://files.example.com/bundle-1.pdf",
"https://files.example.com/bundle-2.pdf"
],
"operationParams": { "customText": "SMITH-{n}", "zeroPad": 6, "position": 9 }
}

Sanitize contracts before sending them out

{
"operation": "sanitize",
"files": [
"https://files.example.com/offer-letter.pdf",
"https://files.example.com/msa-draft.pdf"
]
}

Rotate a batch of sideways scans

{
"operation": "rotate",
"files": ["https://files.example.com/scan-1.pdf", "https://files.example.com/scan-2.pdf"],
"operationParams": { "angle": 270 }
}

Split a report into 20‑page chunks

{
"operation": "split",
"files": ["https://files.example.com/annual-report.pdf"],
"operationParams": { "mode": "everyN", "everyNPages": 20 }
}

Watermark a batch of contracts

{
"operation": "watermark",
"files": [
"https://files.example.com/contract-1.pdf",
"https://files.example.com/contract-2.pdf"
],
"operationParams": { "text": "CONFIDENTIAL", "opacity": 0.35, "rotation": 45 }
}

Compress scanned PDFs

{
"operation": "compress",
"files": ["https://files.example.com/scan-1.pdf", "https://files.example.com/scan-2.pdf"],
"operationParams": { "optimizeLevel": 7 }
}

Password‑protect payslips

{
"operation": "protect",
"files": ["https://files.example.com/payslip-0423.pdf"],
"operationParams": { "password": "employee-dob", "keyLength": 256 }
}

Remove a known password

{
"operation": "decrypt",
"files": ["https://files.example.com/locked.pdf"],
"operationParams": { "password": "employee-dob" }
}

From the CLI, wrap any of these as apify call moonweil/pdf-batch-suite --input '{ … }'.


Using PDF Batch Suite from n8n, Make, Zapier or an AI agent

  1. Add the Apify node / connector and choose Run Actormoonweil/pdf-batch-suite.
  2. Map your file URLs into files and set operation + operationParams.
  3. In the next step, read outputFileUrl from the dataset — then download it, email it, or upload it to Drive / S3 / Dropbox.

Because every processed file also lands in the key‑value store, agents can fetch results by outputKey at any time without re‑running the Actor. The Actor also works as an MCP tool for AI agents via the Apify MCP server.


Pricing

PDF Batch Suite uses pay‑per‑event pricing — you pay for what you process, with no monthly fee:

EventPriceCharged
Actor start$0.02once per run
File processed$0.019once per successful output file
  • Corrupt, unreachable, oversized or wrong‑password files cost $0.00 — they still get a dataset row so you know what happened.
  • merge of 20 files counts as one "file processed" event. split counts as one event per input (the ZIP).
  • Example: Bates‑numbering a 50‑file batch ≈ $0.02 + 50 × $0.019 = $0.97.
What you runSuccessful outputsYou pay
Merge 30 invoices → 1 PDF1$0.039
Split 1 report1$0.039
Sanitize a 10‑file batch10$0.21
Compress a 100‑file batch100$1.92
50‑file batch, 5 files corrupt45$0.875 (5 failures free)

Limits & behaviour

  • Batch isolation — one bad file never aborts the run; you get 49 good outputs and 1 failed row.
  • Default max input size is 100 MB per file (raise it with maxFileSizeMb, hard ceiling 500 MB).
  • Very large PDFs (hundreds of pages) work but take longer — raise perFileTimeoutSecs and the Actor's memory if needed.
  • Cold start: the embedded PDF engine takes ~30–45 s to boot on the first operation of a run. This happens once per run.
  • compress results depend on the source — an already‑optimised PDF may not shrink, and the Actor returns the original rather than a larger file.
  • pageNumbers and rotate are applied to the whole document (or the pages you name in pagesToNumber); sanitize keeps fonts and links by default so the PDF still renders.

FAQ

Which PDF operations does this Actor support?

merge, split, rotate, watermark, compress, pageNumbers (page or Bates numbering), sanitize (strip scripts + hidden metadata), protect (add password) and decrypt (remove a known password). Redaction, form flattening and Office conversion are on the roadmap. OCR and text extraction are intentionally out of scope.

Can it process many PDFs in one run?

Yes — that's the point. Pass an array of files and every one is processed with the same settings. One corrupt or unreachable file produces a failed row instead of aborting the run, and failed files are never charged.

Can it do Bates numbering?

Yes. Use pageNumbers with customText containing {n} and a zeroPad width, e.g. { "customText": "ABC-{n}", "zeroPad": 6 } stamps ABC-000001, ABC-000002, … Each file in a batch starts again at startingNumber — run one file per call, or set startingNumber per run, if you need a single continuous range across documents.

What does sanitize remove?

By default: embedded JavaScript, embedded file attachments, XMP metadata and the document information dictionary (author, producer, creation/modification dates). Link removal and font stripping are available but off by default. Use it before sending a document outside your organisation.

Are my files sent anywhere?

No. The PDF engine runs inside the Actor's own container. Nothing is uploaded to a third‑party service, and no watermark, branding or tracking is added to the output.

How much does it cost?

$0.02 per run plus $0.019 per successfully processed output file. A 50‑file batch is about $0.97. See Pricing for a full table.

What input formats can I use for files?

A public https:// URL, a data:application/pdf;base64,… URI, a bare key in the run's own default key‑value store, or kvs://STORE_ID/KEY for a key‑value store this run can access. For files stored anywhere else, pass an https:// URL.

Can I call it from the API, a schedule, or an automation tool?

Yes. Use the standard Apify Run Actor API endpoint, Apify Schedules, or the Apify connector in n8n, Make and Zapier. Read outputFileUrl from the dataset in the next step.

Is the watermark or protection permanent?

The watermark and page numbers are drawn onto every page and stay with the PDF. protect applies real PDF encryption — keep the password safe, as decrypt needs the correct one to remove it.


Privacy & security

The PDF engine is bundled inside the Actor and runs with no external network calls, no login and no telemetry. Your files are read, processed and written back to your own Apify storage — they are never uploaded to a third‑party service, and nothing (no watermark, no branding, no tracking) is added to the output. Input files and results follow your Apify account's data‑retention settings and can be deleted at any time.


Support

Found a bug, need another operation, or want a tailored version? Open an issue from the Actor's Issues tab on Apify, or contact the developer through the developer profile. Feature requests for the roadmap operations are welcome.