Bulk Webpage to PDF Converter – Batch URL to PDF
Under maintenancePricing
$9.90 / 1,000 pdf generateds
Bulk Webpage to PDF Converter – Batch URL to PDF
Under maintenanceConvert one URL, a batch of URLs, or a CSV list to PDFs in a single run. Per-URL success/failure JSON manifest, deterministic filenames, retries, webhooks and optional ZIP bundle. Designed for agents and automation pipelines.
Pricing
$9.90 / 1,000 pdf generateds
Rating
0.0
(0)
Developer
Graham Harris
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Bulk Webpage to PDF Converter — Batch URL to PDF
Convert one URL, hundreds of URLs, or a CSV list into PDFs in a single run — and get back an exact machine-readable answer to "what succeeded and what failed?".
Built for automation pipelines and AI agents, not for clicking through a UI one page at a time. Feed it an array of 300 URLs; every URL comes back with its own status, filename, HTTP code, retry count, timing and charge state.
- Batch-first: single URL, URL array, pasted CSV/list, or a remote CSV file — merged in one run.
- Exact per-URL manifest: success / error / skipped, HTTP status, error kind, attempts, duration, deterministic filename.
- Charges only for successes: each successfully produced PDF costs one
pdf-generatedevent at $0.0099. 404s, timeouts and blocked pages are never charged. - Workflow features: webhook callback on completion, optional single ZIP of all PDFs, retries with backoff on 5xx/network/timeout, per-URL timeout, concurrency control, optional image blocking.
- Deterministic output: fixed viewport (1280×800),
en-USlocale, UTC timezone, animations/transitions disabled, stable settle time → repeatable renders of the same page. - Agent-friendly schema: flat JSON rows, predictable filenames (
0001-example-com-page.pdf), summary row, plain-English errors.
Input
Provide URLs via any combination of these fields (merged in order, duplicates converted once):
| Field | Type | Description |
|---|---|---|
url | string | Single page. Scheme added automatically if missing. |
urls | string array | Batch array — the core use case. |
csv_text | string | Pasted CSV (url column or first column) or plain URL list, one per line. |
csv_url | string | URL of a CSV file to fetch at run start (max 10 MB). |
pageSize | select | A0–A5, Letter, Legal, Ledger, Tabloid (default A4). |
landscape | bool | Landscape orientation. |
scale | number | 0.1–2 (default 1). |
margin | string | CSS-style: "0", "10mm", "10mm 15mm". |
waitAfterLoadMs | int | Settle time after load (default 300 ms). |
timeoutMs | int | Per-URL navigation timeout, 5–120 s (default 30 s). |
retries | int | Retries for timeout/network/5xx (default 1). 4xx is never retried. |
blockImages | bool | Skip images/media — faster, cheaper, smaller PDFs. |
concurrency | int | Parallel pages, 1–6 (default 3). |
bundleZip | bool | Additionally store all successful PDFs as batch-output.zip (limit 100 MB). |
webhookUrl | string | POST the full result when the batch finishes (3 retries with backoff). |
Output
Dataset — one row per URL (type: "result")
{"type": "result","index": 1,"url": "https://example.com/pricing","status": "success","http_status": 200,"filename": "0001-example-com-pricing.pdf","size_bytes": 84211,"attempts": 1,"duration_ms": 1234,"charged": true,"error": null,"detail": null}
status is success | error | skipped. error kinds: http_4xx, http_5xx, timeout, network, ssl, aborted, pdf_error, invalid_input, charge_limit_reached, run_aborted. Invalid input entries appear as rows with index: null and are never charged.
Dataset — final summary row (type: "summary")
urls_total, success, failed, skipped_limit, charged_count, charge_event, stop_reason, bundle_record, bundle_bytes, bundle_note, invalid_count, webhook, duration_ms, started_at, finished_at, status.
Downloads (key-value store)
- One record per successful PDF, key =
filename(e.g.0001-example-com-pricing.pdf), content typeapplication/pdf. - Optional
batch-output.zipcontaining all successful PDFs (bundleZip: true).
Webhook payload
{"event": "batch_completed","summary": { "status": "complete", "success": 81, "failed": 19, "...": "..." },"results": [ { "type": "result", "...": "..." } ]}
Pricing
$0.0099 per successfully generated PDF (pdf-generated pay-per-event). Failures, skips and invalid entries cost nothing. Example: 300 URLs, 285 rendered → 300 × $0.0099 would be $2.97; you pay 285 × $0.0099 = $2.82.
Apify platform usage (compute, data transfer) for the run is billed by Apify per your plan's usual usage terms.
Run via API (agents, scripts, CI)
# 1. Start a runcurl -X POST "https://api.apify.com/v2/acts/your-user~webpage-to-pdf-batch/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://example.com", "https://example.org"], "bundleZip": true}'# 2. Poll until status is SUCCEEDED, then fetch the manifestcurl "https://api.apify.com/v2/datasets/~/items?token=APIFY_TOKEN&format=json"
Or trigger with a CSV:
{ "csv_url": "https://your-app.example/exports/urls.csv", "retries": 1, "timeoutMs": 20000 }
Limits & good citizenship
- Max 10,000 URLs per run; CSV input max 10 MB; ZIP bundle max 100 MB.
- Pages behind logins, CAPTCHAs or aggressive bot walls will return
http_4xxerrors — those runs are not charged for those URLs. - Renders a standard headless Chromium visit (robots-respecting sites). It does not bypass CAPTCHAs, logins or paywalls.
- Output size: PDF text/fonts render fully; use
blockImages: truewhen you don't need images.
Notes
- Filenames are deterministic:
{index:04d}-{host}-{path-slug}.pdf— stable across runs for the same input order. - Default memory 2048 MB; browser restarts every 8 URLs to keep long batches stable.
- Retries apply to
timeout,network,pdf_errorand HTTP 5xx only.
Not affiliated with or endorsed by the websites you convert.