PDF Toolkit API – Merge, Split, Compress, PDF to Image avatar

PDF Toolkit API – Merge, Split, Compress, PDF to Image

Pricing

$3.00 / 1,000 output files

Go to Apify Store
PDF Toolkit API – Merge, Split, Compress, PDF to Image

PDF Toolkit API – Merge, Split, Compress, PDF to Image

Merge, split, compress, rotate and extract pages from PDFs by URL, convert PDF to PNG/JPG images or read PDF info (pages, metadata, encryption, text layer). Download links for every file. No API key, no uploads to third parties. Pay per output file.

Pricing

$3.00 / 1,000 output files

Rating

0.0

(0)

Developer

Fast Data

Fast Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

PDF Toolkit API – Merge, Split, Compress, Rotate, Extract Pages, PDF to Images

Do the everyday PDF jobs in one API call: merge PDFs, split a PDF, extract pages, compress / shrink a PDF, rotate pages, convert PDF to PNG or JPG, or read PDF info (page count, size, encryption, metadata, text layer). Give it PDF URLs; you get one dataset row per result file, each with a direct download link.

  • No API key, no account at a third-party PDF service, no file uploads to "free PDF" websites.
  • Runs on CPU in an isolated Apify container with PyMuPDF. Your files stay in your own Apify storage.
  • Pay only for files that were actually produced: $0.003 per output file. 404s, broken, too-large and password-protected PDFs are free and reported with a status.

Who it's for

  • n8n / Make / Zapier automations that receive PDFs from e-mail, forms, CRMs or cloud drives.
  • Back-office teams merging invoices, splitting scanned batches, shrinking attachments.
  • Developers and AI agents that need a simple PDF API without running Ghostscript, Poppler or a server.

Operations

operationWhat it doesOutput
mergeCombines all pdfUrls into one PDF, in the given order1 PDF
splitOne PDF every everyNPages pages, or one PDF per range in ranges ("1-3,4-6,7-")1 PDF per part
extractKeeps only pages ("1-3,5,last") in a new PDF1 PDF per source
compressDownsamples and recompresses images, subsets fonts, removes unused/duplicate objects, thumbnails and XMP, packs object streams. compressionLevel: low (smallest), medium, high (print-friendly). If the result would be bigger, the original is kept.1 PDF per source + savedPercent
rotateRotates pages (empty = all) by degrees (90/180/270, -90)1 PDF per source
toImagesRenders pages to PNG or JPG at dpi (36–400), up to maxPages per PDF, optional pages filter1 image per page
infoPages, PDF version, size, encrypted?, password required?, text layer?, likely scanned?, page size (A4/Letter...), form fields, bookmarks, title/author/producer/dates1 row per PDF, no file

Why this actor

  • One actor for all PDF basics instead of one actor (and one price) per operation.
  • Cheap and predictable: $0.003 per file, about 3x cheaper than comparable PDF actors charging $0.01 per merge/compress.
  • Robust: a bad URL or encrypted PDF never breaks the run; in a merge, the other PDFs are still merged and the bad one gets an error row.
  • Flat, AI-friendly output: same fields for every operation, ready for spreadsheets, n8n and LLM tools.
  • Size cap (maxFileSizeMb, default 100 MB) protects you from surprise downloads.

Input example

{
"operation": "merge",
"pdfUrls": [
"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
"https://raw.githubusercontent.com/mozilla/pdf.js/master/examples/learning/helloworld.pdf"
],
"outputName": "invoices-october"
}

More examples:

{ "operation": "split", "ranges": "1-3,4-", "outputName": "paper", "pdfUrls": ["https://example.com/report.pdf"] }
{ "operation": "compress", "compressionLevel": "medium", "pdfUrls": ["https://example.com/brochure.pdf"] }
{ "operation": "toImages", "dpi": 150, "imageFormat": "jpg", "maxPages": 10, "pdfUrls": ["https://example.com/deck.pdf"] }
{ "operation": "rotate", "degrees": 90, "pages": "2,4", "pdfUrls": ["https://example.com/scan.pdf"] }

Output example

Real rows from test runs:

{
"operation": "merge",
"status": "ok",
"fileName": "merged.pdf",
"url": "https://api.apify.com/v2/key-value-stores/LRlb1h92peZhGvvRh/records/merged.pdf?signature=...",
"pages": 2,
"sizeBytes": 12459,
"originalSizeBytes": 13942,
"inputFiles": 2,
"sourceUrls": ["https://www.w3.org/.../dummy.pdf", "https://raw.githubusercontent.com/.../helloworld.pdf"]
}
{
"operation": "compress",
"status": "ok",
"fileName": "tracemonkey-compressed.pdf",
"url": "https://api.apify.com/v2/key-value-stores/fsFGXB74KKBsaO2NG/records/tracemonkey-compressed.pdf?signature=...",
"pages": 14,
"sizeBytes": 815272,
"originalSizeBytes": 1016315,
"savedPercent": 19.8,
"qualityLevel": "low"
}
{
"operation": "info",
"status": "ok",
"fileName": "dummy.pdf",
"sizeBytes": 13264,
"pages": 1,
"pdfVersion": "1.4",
"encrypted": false,
"passwordRequired": false,
"hasTextLayer": true,
"likelyScanned": false,
"pageSize": "A4",
"author": "Evangelos Vlachogiannis",
"producer": "OpenOffice.org 2.1",
"creationDate": "2007-02-23T17:56:37"
}

Failed items look like {"operation": "info", "status": "not_found", "error": "HTTP 404: the file does not exist at this URL.", "sourceUrls": [...]}. Possible statuses: ok, not_found, access_denied, not_a_pdf, too_large, encrypted, invalid_pdf, page_out_of_range, invalid_input, download_failed.

Files are stored in the run's default key-value store; the url field is a ready-to-use download link. Text-heavy PDFs (like the test paper above) shrink less than PDFs with large photos or scans, where 60–90 % savings are typical.

Use cases (n8n, Make, Zapier)

  • Merge invoices: collect the month's invoice PDFs from Gmail / Drive and merge them into one file for your accountant.
  • Split scans: a scanner produces one long PDF; split it every 2 pages or by ranges and file each document in the right folder.
  • Shrink attachments before e-mail: compress PDFs over 10 MB so they pass mail-server limits.
  • Extract the signature page of a contract or the first page of each report.
  • Fix sideways scans with rotate.
  • Thumbnails and previews: toImages with maxPages: 1 for a cover image; 300 DPI PNGs as input for OCR or vision LLMs.
  • Triage incoming PDFs with info: is it encrypted, scanned (no text layer), how many pages?

Pricing

Pay per event: $0.003 per output file (each merged/split/extracted/compressed/rotated PDF, each page image, or each PDF analysed with info). Failed, missing, too-large and encrypted PDFs are not charged. Example: merging 20 invoices = $0.003; converting a 10-page PDF to images = $0.03. Apify platform usage is billed by Apify as usual and is very low (a few seconds of CPU for typical files).

API usage

curl -X POST "https://api.apify.com/v2/acts/fast_data_asap~pdf-toolkit-merge-split-compress/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"operation":"compress","compressionLevel":"medium","pdfUrls":["https://example.com/file.pdf"]}'

The response is the list of result rows; download each file from its url.

n8n / Make: use the Apify node/app, action "Run Actor and get dataset items" with actor fast_data_asap/pdf-toolkit-merge-split-compress, pass the input JSON, then use an HTTP Request module on each row's url to fetch the file.

MCP (Claude, Cursor, AI agents): add https://mcp.apify.com?tools=fast_data_asap/pdf-toolkit-merge-split-compress as an MCP server so your agent can merge, split or compress PDFs on demand.

Limits and notes

  • Input must be a direct link that returns the PDF (not an HTML viewer page). Private links need to be signed/shared download links.
  • Password-protected PDFs (user password) cannot be opened and return status: encrypted for free. PDFs with only an owner password (printing/copy restrictions) are processed.
  • Default file-size cap is 100 MB per PDF (maxFileSizeMb). For very large PDFs or many 300-DPI images, increase run memory.
  • Compression works best on image-heavy PDFs; vector/text-only PDFs are already compact.