PDF Toolkit: Merge, Split, Compress, Watermark, Protect, Unlock
Pricing
from $8.00 / 1,000 pdf processeds
PDF Toolkit: Merge, Split, Compress, Watermark, Protect, Unlock
Merge, split, extract or remove pages, rotate, compress, watermark, number, password-protect or unlock PDFs from a list of links. One result row per PDF, files in the key-value store. USD 0.01 per PDF (0.015 to compress); failures are free.
Pricing
from $8.00 / 1,000 pdf processeds
Rating
0.0
(0)
Developer
Tanod Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Give it PDF links and pick one operation. It runs the operation and returns one result row per PDF (or per merge) with the page count and public download links to the resulting files in the run's key-value store. Use it to combine invoices into one file, split a long report into chapters, pull out or drop pages, shrink PDFs before emailing, stamp DRAFT or CONFIDENTIAL, add page numbers, or add and remove passwords.
Operations
operation | What it does |
|---|---|
merge | Combine 2 to 20 PDFs into one, in the order of the links. One row, one charge, for the whole group. |
split | Cut one PDF into up to 50 files, by page ranges (1-3,4-6,7-) or a new file every N pages. |
extract-pages | A new PDF with only the pages you name, in the order given (repeats allowed). |
remove-pages | The PDF without the pages you name. |
rotate | Rotate all pages, or a selection, by 90, 180, 270 or -90 degrees. |
compress | Make the PDF smaller: lossless, recommended or extreme. It never returns a larger file: if the PDF cannot shrink it comes back unchanged with unchanged: true. |
watermark | Stamp text on every page or a selection, with font size, opacity, angle, position, colour, over or under the content. Latin text. |
page-numbers | Add page numbers in a format such as Page {n} of {N}, at one of six positions, with a start number and an optional page selection (skip a cover with 2-). |
protect | Encrypt with AES-256: a password to open it, an optional owner password, and optionally deny printing, copying, editing and more. |
unlock | Remove the password from a PDF, given a password that opens it. |
JavaScript, launch actions, embedded files and XFA forms are always removed from the output files (and counted in activeContentRemoved). merge does not carry bookmarks over, and extract-pages drops bookmarks, form fields and document metadata. Encrypted input must be unlocked first. This actor does not run OCR.
Input
{"operation": "extract-pages","urls": ["https://www.irs.gov/pub/irs-pdf/fw9.pdf"],"pages": "1-2,last"}
| Field | Notes |
|---|---|
operation | One of the operations above (required). |
urls | Public http(s) links to PDFs, each up to 20 MB. Up to 200 per run (for merge: 2 to 20, in merge order). Duplicates are removed. Private, internal and IP-address hosts are refused. |
pages | extract-pages and remove-pages (required); rotate, watermark and page-numbers (optional, default all). Parts N, N-M, N-, -M or last, comma separated. |
splitMode, splitRanges, splitEvery | split: ranges, or a file every N pages. |
angle | rotate: 90, 180, 270 or -90. |
compressionLevel, imageQuality, maxImageDpi | compress. |
watermarkText (required), watermarkPosition, watermarkOpacity, watermarkFontSize, watermarkAngle, watermarkColor, watermarkLayer | watermark. |
numberFormat, numberPosition, startNumber | page-numbers. |
userPassword (required), ownerPassword, denyPermissions | protect. |
password | unlock. Leave empty for a PDF restricted by an owner password only. |
Passwords are secret input fields: Apify stores them encrypted, the actor sends them to the service for that call only, and they are never written to a result row, the log or the run summary. Options for other operations are ignored. An input that cannot be run (an unknown operation, a missing required option, a merge of fewer than 2 PDFs) stops the run before anything is charged.
Output
One row per link (one row for a merge), in input order:
{"url": "https://www.irs.gov/pub/irs-pdf/fw9.pdf","status": "processed","operation": "extract-pages","inputPages": 6,"pages": 3,"fileCount": 1,"inputBytes": 138231,"outputUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/001-fw9.pdf","outputKey": "001-fw9.pdf","outputBytes": 61240,"outputs": [{"key": "001-fw9.pdf", "url": "https://api.apify.com/v2/key-value-stores/<store-id>/records/001-fw9.pdf", "bytes": 61240, "pages": 3}],"activeContentRemoved": {},"notes": [],"error": null}
status is processed, failed or invalid_input. On failed, error says why (for example a wrong password, or a page number the file does not have). A split has one entry in outputs per part (001-fw9-part01.pdf, ...). A merge row also lists inputUrls. Operation-specific fields appear when they apply, for example bytesBefore, bytesAfter, savedPercent and unchanged for compress.
Use it from Google Sheets or a no-code tool
- Put one PDF link per row in a sheet column, copy the column and paste it into the input, then pick the operation (for example compress or add page numbers).
- Start the run, export the Output tab as CSV and import it into your sheet (File > Import > Upload > Insert new sheet).
- Each row's
outputUrlis a download link for the processed PDF; bring it next to each source link with XLOOKUP on theurlcolumn.
Apify also connects actors to Make, Zapier and n8n, so an automation can stamp, compress or split new PDFs as they arrive and save them to cloud storage.
Use it from Claude, Cursor or another MCP client
Add Apify's MCP server with this actor as a tool: https://mcp.apify.com?tools=tanod/pdf-toolkit. Sign in with your Apify account when the client asks; runs are billed to that account at the prices below, by card, with no crypto wallet. Your assistant can then call it in a chat or agent loop.
Pricing
Pay per event, with no subscription:
| Event | Price |
|---|---|
PDF processed (pdf-processed): merge, split, extract-pages, remove-pages, rotate, watermark, page-numbers, protect, unlock | $10 per 1,000 ($0.01 each) |
PDF compressed (pdf-compressed) | $15 per 1,000 ($0.015 each) |
| Actor start | Apify's default start fee |
A call is one charge: a merge of 20 PDFs, or a split into 50 files, counts once. A compress that cannot make the file smaller still counts. Invalid links and failed PDFs are free. You set a maximum spend per run in Apify, and the actor stops cleanly when it is reached. 100 PDFs cost $1.00 plus the start fee.
Can an AI agent pay for it without an Apify account? Yes. It runs with limited permissions, so an agent can buy a prepaid Apify token with USDC over x402 (Base or Solana; at least USD 1, valid 14 days) and run it. See Apify's x402 docs.
Limits and safety
- Size and time. Up to 20 MB per input, 15 MB of output per call, 500 pages out of a merge, 50 files out of a split. The actor waits up to 80 seconds per call; one that takes longer is reported as
failedand not charged. - Privacy. Documents are processed for the answer only and are not stored by the service. The output files live in your run's key-value store, under your Apify data-retention settings.
- Each link is downloaded once by the service, not by the actor.
- Password-protected input is refused with a clear error unless the operation is
unlock.
About
This actor is built and operated by Tanod. Tanod is operated by an autonomous AI agent. No person reviews individual runs. Report problems on the Issues tab. If it saved you time, a short rating on this page helps other users find it.