Website Screenshot & URL to PDF Converter, from $0.0008/page
Pricing
Pay per event
Website Screenshot & URL to PDF Converter, from $0.0008/page
Website screenshot and URL to PDF in bulk: paste URLs or HTML, get full-page PNG, JPEG or PDF files. $0.0008 per screenshot, $0.004 per PDF, failed pages free. Click Start: the 2 prefilled URLs run as screenshots for under $0.002. No API key.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Penny Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Security
Limited permissionsShare
Website Screenshot & URL to PDF Converter: $0.0008 per page
Give it URLs or HTML and get a full-page screenshot (PNG/JPEG, $0.0008) or PDF ($0.004) per page, rendered in headless Chromium. Failed pages are never charged. Price per page: screenshot $0.0008, PDF $0.004, both $0.0048.
Click Start: the prefilled 2 URLs (example.com and a Wikipedia page) run as is as screenshots (mode: screenshot) and cost at most $0.0016. Want a PDF? Set Output to pdf ($0.004 per page). Each URL returns one row:
| input | httpStatus | title | pdfBytes |
|---|---|---|---|
| https://example.com | 200 | Example Domain | 91,727 |
| https://en.wikipedia.org/wiki/Web_scraping | 200 | Web scraping - Wikipedia | 2,556,322 |
(Real rows from our test runs, 2026-10-16 to 10-21; pdfUrl and screenshotUrl link to the saved files.)
Quick start (only urls is required)
{ "urls": [{ "url": "https://en.wikipedia.org/wiki/Web_scraping" }], "mode": "pdf" }
urls accepts plain strings or {"url": "..."} objects. Every other field has a default.
Why use it
- PDF as well as images:
modeisscreenshot,pdforboth(paper size A4/Letter/Legal/A3, landscape, backgrounds). - HTML to PDF / image: render inline HTML strings (
htmlDocuments), not just URLs. - Full page, viewport or crop:
fullPageon (default) captures the whole page; off captures theviewportWidthxviewportHeightwindow;clipWidth/clipHeightcrop from the top-left corner. - Element screenshot:
screenshotSelectorcaptures only the first element matching a CSS selector. No match gives an error row that is not charged. - Sticky headers:
hideFixedElements(default off) turns fixed elements into absolute and sticky ones into static, so headers, cookie bars and chat widgets do not repeat down a full-page capture. - No charge on failure: each page is charged only after its file is saved; failed pages get an
errorrow and no charge. - Bulk with rate limits: many URLs per run, default concurrency 3, max 60 page loads/minute, automatic retries.
Captura de pantalla web, Website Screenshot, Screenshot erstellen - Español, Deutsch, Português
Español: captura de pantalla de una página web a PNG o PDF (masivo)
Convierte una lista de URL públicas (o tu propio HTML) en capturas de pantalla de página completa (PNG/JPEG) o en PDF, con Chromium sin interfaz. Entrada de ejemplo: { "urls": [{ "url": "https://example.com" }], "mode": "pdf" }. Coste en el plan gratuito: $0,0008 por captura y $0,004 por PDF (1.000 PDF = $4,00); las páginas que fallan no se cobran.
Deutsch: Screenshot von Webseiten erstellen, URL in PDF umwandeln (Liste)
Macht aus einer Liste öffentlicher URLs (oder eigenem HTML) ganzseitige Screenshots (PNG/JPEG) oder PDFs, gerendert mit headless Chromium. Beispiel-Eingabe: { "urls": [{ "url": "https://example.com" }], "mode": "both" }. Kosten im kostenlosen Plan: $0,0008 pro Screenshot und $0,004 pro PDF (Modus both = $0,0048 pro Seite); fehlgeschlagene Seiten werden nicht berechnet.
Português: captura de tela de site e URL para PDF em massa
Transforma uma lista de URLs públicas (ou HTML próprio) em capturas de tela de página inteira (PNG/JPEG) ou PDF, com Chromium headless. Exemplo de entrada: { "urls": [{ "url": "https://example.com" }], "mode": "screenshot" }. Custo no plano gratuito: US$ 0,0008 por captura e US$ 0,004 por PDF (1.000 PDFs = US$ 4,00); páginas que falham não são cobradas.
Example output
One item from a run with mode: both on https://example.com. On the Apify platform screenshotUrl and pdfUrl are links to files in the run's key-value store.
{"input": "https://example.com","finalUrl": "https://example.com/","httpStatus": 200,"title": "Example Domain","screenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/screenshot-1.png","pdfUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/pdf-1.pdf","screenshotBytes": 84613,"pdfBytes": 91727,"capturedAt": "2026-10-21T03:22:04.280Z"}
Failed items get a row with input, error and capturedAt, and are not charged.
Options
Screenshot / PDF / both, full-page, PNG or JPEG, viewport size, clipWidth / clipHeight crop, screenshotSelector element capture, hideFixedElements, scroll to top, wait-until (load, domcontentloaded, networkidle), extra delay, wait for a CSS selector, PDF paper size, landscape, print backgrounds, concurrency and retries. Navigation timeout is 45 s. Colour emoji and fonts render as glyphs (Noto Color Emoji is in the image).
Screenshot FAQ
Screenshot above the fold / only the top of a page? Set fullPage to false for exactly the browser window, or crop a full-page capture with clipHeight:
{ "urls": [{ "url": "https://example.com" }], "fullPage": false, "viewportWidth": 1280, "viewportHeight": 720 }{ "urls": [{ "url": "https://en.wikipedia.org/wiki/Web_scraping" }], "fullPage": true, "clipHeight": 1500 }
Capture one element?
{ "urls": [{ "url": "https://example.com" }], "screenshotSelector": "p" }
Sticky header repeated down a full-page shot? Turn on hideFixedElements:
{ "urls": [{ "url": "https://en.wikipedia.org/wiki/Web_scraping" }], "fullPage": true, "hideFixedElements": true }
Loading screen captured instead of the loaded page? Wait for the network and for an element that only exists once the page is ready:
{ "urls": [{ "url": "https://example.com" }], "waitUntil": "networkidle", "waitForSelector": "#app .loaded", "delayMs": 3000 }
Am I charged for pages that fail? No. Pages that return HTTP 4xx/5xx, time out or cannot be saved get an error row and no charge. Each result is charged only after the file is saved.
Call it synchronously and get the rows back in one request:
$curl -X POST "https://api.apify.com/v2/acts/pennydata~shot-pdf/run-sync-get-dataset-items?token=$APIFY_TOKEN" -H "Content-Type: application/json" -d '{"urls":[{"url":"https://example.com"}],"mode":"pdf"}'
Does it capture pages behind a login? No. It does not log in, inject cookies, solve captchas or rotate proxies. Public pages only.
Can I convert my own HTML to PDF? Yes, pass HTML strings in htmlDocuments and set mode to pdf.
Pricing (pay per event)
Charged only for successful captures, via Actor.charge:
| Event | Price |
|---|---|
screenshot | $0.0008 ($0.80 per 1,000) |
pdf | $0.004 ($4 per 1,000) |
mode both | $0.0048 per page (one screenshot + one PDF) |
Pages answering HTTP 4xx/5xx, timeouts and rejected URLs are not charged. Paid Apify plans get lower tiers. Platform events such as actor start follow Apify's standard pay-per-event rules.
Limits and honesty notes
- No login, no cookie injection, no captcha solving, no proxy rotation to bypass blocks. Pages behind logins, bot walls or captchas may fail or capture the block page.
- Only public
http(s)URLs: localhost, private IP ranges andfile:URLs are rejected. - You are responsible for having the right to capture the pages you submit.
- Not a scraper: it returns images/PDFs, not structured page data.
Run locally
npm installmkdir -p storage/key_value_stores/defaultecho '{"urls":[{"url":"https://example.com"}],"mode":"both"}' > storage/key_value_stores/default/INPUT.jsonnpm start # or: apify run# results: storage/datasets/default, files: storage/key_value_stores/default
Use cases
- Archive evidence of how a page looked on a given date (compliance, legal, support).
- Generate PDFs from HTML you supply, such as reports or receipts.
- Create above-the-fold preview images (
clipHeight) for link directories or CMS thumbnails. - Take snapshots of a list of staging pages for visual review.
- Archive competitor sale pages to PDF every day: save the input as an Apify Task and add a daily Schedule; each row has a
capturedAttimestamp. Some retailers block automated browsers, so check each row for anerror.
Built with AI assistance (Claude).