Scrapers / Developer & File Tools

PDF Watermark
hipersoft/pdf-watermark
Stamp a text or image watermark onto every page of a PDF, with position, opacity, rotation and tiling. Mark drafts, confidential documents and proofs in bulk.
Total users
2Monthly users
1Total runs
80Per pdf watermarked
$0.01Last rebuilt
Oct 26, 2026Overview
Stamp a text or image watermark onto every page of a PDF — with position, opacity, rotation and tiling. Mark drafts, confidential documents, proofs and client deliverables in bulk.

What it does
- Adds a text or image (logo) watermark to all pages.
- Control opacity, rotation, font size and color.
- Tile the watermark across the page or place it once in the center.
Use cases
- Legal & finance — stamp "CONFIDENTIAL" or "DRAFT" on documents.
- Agencies & photographers — brand proofs and previews before delivery.
- Publishing — mark review copies.
Input
{ "pdfUrl": "https://example.com/doc.pdf", "text": "CONFIDENTIAL", "opacity": "0.25", "rotation": 45, "tile": false }
| Field | Type | Description |
|---|---|---|
pdfUrl |
string | PDF to watermark. |
text |
string | Watermark text (if no image). |
imageUrl |
string | Optional PNG/JPG logo watermark. |
opacity |
string | 0–1. |
rotation |
integer | Angle in degrees. |
fontSize |
integer | Text size. |
color |
string | Hex text color. |
tile |
boolean | Repeat in a grid. |
Output

{ "pages": 12, "watermark": "CONFIDENTIAL", "tiled": false, "resultUrl": "https://api.apify.com/v2/key-value-stores/.../records/watermarked.pdf" }
Output schema
| Field | Type | Description |
|---|---|---|
pages |
integer | Pages watermarked. |
resultUrl |
string (URL) | Link to the watermarked PDF. |
FAQ
Text or logo? Provide text, or imageUrl for a logo watermark (image takes priority).
Can I automate it? Yes — via integrations on the Apify platform and the Apify API.
Notes
Original clean-room implementation.
Input
| Field | Type | Description |
|---|---|---|
pdfUrl requiredPDF URL | string | Direct link to the PDF to watermark. |
textWatermark text | string | Text to stamp on every page (ignored if an image watermark is given). |
imageUrlWatermark image URL | string | Optional PNG/JPG logo to use as the watermark instead of text. |
opacityOpacity | string | 0 (invisible) to 1 (solid). Default: "0.25" |
rotationRotation (degrees) | integer | Angle of the watermark. Default: 45 |
fontSizeFont size | integer | Text watermark size. Default: 48 |
colorText color | string | Hex color for text watermark. Default: "#ff0000" |
tileTile across page | boolean | Repeat the watermark in a grid instead of once in the center. Default: false |
outputNameOutput filename | string | Name for the watermarked PDF. Default: "watermarked.pdf" |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~pdf-watermark/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"pdfUrl": "https://raw.githubusercontent.com/mozilla/pdf.js/master/web/compressed.tracemonkey-pldi-09.pdf",
"text": "CONFIDENTIAL"
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/pdf-watermark").call(run_input={
"pdfUrl": "https://raw.githubusercontent.com/mozilla/pdf.js/master/web/compressed.tracemonkey-pldi-09.pdf",
"text": "CONFIDENTIAL"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/pdf-watermark').call({
"pdfUrl": "https://raw.githubusercontent.com/mozilla/pdf.js/master/web/compressed.tracemonkey-pldi-09.pdf",
"text": "CONFIDENTIAL"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| PDF watermarked One PDF stamped with a text or image watermark | $0.01 | $0.005 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Bulk Image Downloader
Download thousands of images from a list of URLs and store each in the key-value store with a public link. Returns content type, size, dimensions and SHA-256 per image. Bulk-ready. Great for datasets, backups and media pipelines.
8,102 runs · 103 users · $0.056 / url processedText to Speech
Convert any text to natural-sounding speech as an MP3 download. 300+ premium neural voices across 70+ languages, adjustable rate, pitch and volume. Great for voiceovers, videos, accessibility and audio content. No setup.
278 runs · 22 users · $0.01 / audio generatedGoogle Maps Email Extractor
Search Google Maps for businesses, then crawl each business website to extract emails, social profiles and extra phone numbers. Turns any Maps search into a ready lead list. No setup.
159 runs · 8 users · $0.006 / business lead scrapedWebsite Screenshot
Capture full-page or viewport screenshots of any URL as PNG or JPEG, at any device size. For monitoring, previews, thumbnails and automation workflows.
156 runs · 3 users · $0.004 / screenshot capturedBulk URL Status Checker
Check thousands of URLs over plain HTTP: status codes, broken links (404/410/5xx), full redirect chains, response time, content type, page title and SSL certificate expiry.
154 runs · 13 users · $0.002 / url checkedGoogle Search Scraper
Scrape Google Search results (organic listings) for any query: title, URL, displayed URL, snippet and position. Multi-query, per-country/language, pagination. Uses Google SERP proxy — reliable, no captcha, no setup.
121 runs · 8 users · $0.001 / result scrapedSend the site and the fields. We build it and you get it first.