Html2Pdf.app vs PDFShift for Converting HTML Pages to PDF
Compare Html2Pdf.app and PDFShift on inputs, PDF controls, workflows, free limits, pricing, and privacy—and learn how to choose for your workload.
Html2Pdf.app and PDFShift are hosted APIs that convert a URL or HTML into a PDF. There is no evidence in the available official documentation for a universal rendering winner: choose by testing your own pages, then compare the input and PDF controls you need, delivery workflow, file and credit limits, expected monthly cost, and data terms.
Html2Pdf.app documents Chromium rendering, synchronous PDF-byte responses, and optional callback-based background generation. PDFShift advertises raw HTML and URL conversion, CSS and JavaScript support, webhooks, parallel conversions, asynchronous responses, encryption, and watermarking. Those are provider-documented or marketed capabilities, not results of an independent parity test. Start with the integration whose documented workflow matches your application, and validate both services with representative pages before committing.
1. What each service does
Html2Pdf.app’s documentation describes a Chromium-based converter accepting a public webpage URL or raw HTML. A regular synchronous request returns PDF bytes. For longer jobs, its documentation also describes background generation with a callback URL.
PDFShift presents its API as accepting URLs or raw HTML and supports CSS and JavaScript rendering. Its site and pricing materials advertise asynchronous responses, webhooks, parallel conversions, CSS and JavaScript injection, headers and footers, encryption, and watermarking. Confirm the current API documentation for the exact parameters and response contract you need.
Both products render HTML into a PDF. Neither a feature list nor a provider’s average-time or uptime claim proves that your particular page will look right or finish within your application’s deadline. Rendering depends on the source page, its assets, scripts, network access, and timing.
2. Comparison at a glance
| Decision point | Html2Pdf.app | PDFShift |
|---|---|---|
| Input | Public URL or raw HTML | URL or raw HTML |
| Rendering information | Documentation identifies Chromium rendering | Provider highlights CSS and JavaScript support |
| Basic delivery | Synchronous PDF binary response | API conversion; confirm the current response mode for your integration |
| Background work | Optional callback URL; accepted jobs return 202 and callback delivery includes base64 PDF data in JSON | Provider advertises asynchronous responses, webhooks, and parallel conversions |
| Document controls | Page format, margins, orientation, media mode, scale, headers and footers, password protection are documented | Provider advertises CSS/JavaScript injection, headers and footers, encryption, and watermarking |
| Free tier (retrieved pricing) | 100 credits/month; 1 MB maximum file size | 50 credits/month; 15 MB maximum file size; 30-second timeout |
| Credit calculation | One credit per 5 MB chunk of generated PDF | One credit per 5 MB chunk of generated PDF |
| Published paid prices | Startup: $9/month for 1,000 credits; Standard: $25/month for 5,000; Scale: $39/month for 10,000 | The reviewed pricing page establishes free-plan details but does not provide a stable complete paid price ladder here |
Plan terms and product controls can change. Use the linked official Html2Pdf.app pricing page and PDFShift pricing page to confirm current limits and prices before launch. Avoid treating these free limits as equivalent: the file-size and timeout ceilings differ, and PDFShift’s paid pricing is not established by the retrieved details.
3. Choose by workload, not by a generic winner
Prefer Html2Pdf.app when its documented flow fits
- You want a straightforward synchronous call that returns PDF bytes.
- You need the documented background callback flow, and can accept and safely process a base64 document payload.
- The documented page settings—such as format, margins, orientation, media mode, scale, headers/footers, or password protection—cover your needs.
- The current plan limits and pricing work for your expected output volume and file sizes.
Consider PDFShift when its advertised workflow fits
- You want to evaluate a provider that advertises asynchronous work, webhooks, and parallel conversions.
- You need to investigate advertised injection, encryption, or watermarking capabilities against your exact document requirements.
- The free-plan file limit and timeout suit initial trials, and you confirm a suitable current paid plan before relying on it.
Run a representative-page evaluation
- Select pages that cover your actual cases: long documents, web fonts, tables, charts, JavaScript-rendered content, images, and authenticated pages if relevant.
- Send the same input and equivalent settings to each provider. Compare page breaks, missing assets, fonts, headers, footers, margins, and output size.
- Repeat captures when the source content changes or relies on scripts and remote assets. Record whether each service finishes within your application’s deadline.
- Test failure handling, callback/webhook delivery, retries, and duplicate notifications. Ensure your job state is idempotent.
- Estimate monthly credits from generated PDF sizes, not just the number of requests. Check plan caps and overage behavior in the current pricing terms.
- Review privacy terms, data processing terms, and any required contractual commitments with your organization before sending sensitive source content.
This is a validation method, not a claim that either service has been benchmarked here. Html2Pdf.app’s documentation notes that rendering input and timing can affect output, which is a reason to test your pages rather than infer fidelity from a feature list.
4. Html2Pdf.app: runnable API examples
The documented endpoint is POST https://api.html2pdf.app/v1/generate, authenticated with an X-API-Key header. A synchronous success returns the generated PDF as binary data. The snippets below show the request shape for a URL. Confirm the exact request fields and required parameters against the official API documentation for your chosen input and options.
cURL
curl --fail-with-body --silent --show-error \
-X POST 'https://api.html2pdf.app/v1/generate' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{"url":"https://example.com"}' \
--output page.pdf
Python
import requests
response = requests.post(
"https://api.html2pdf.app/v1/generate",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"url": "https://example.com"},
timeout=90,
)
response.raise_for_status()
with open("page.pdf", "wb") as pdf_file:
pdf_file.write(response.content)
Node.js
const response = await fetch("https://api.html2pdf.app/v1/generate", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com" }),
});
if (!response.ok) {
throw new Error(`PDF generation failed: ${response.status} ${await response.text()}`);
}
const pdf = Buffer.from(await response.arrayBuffer());
await import("node:fs/promises").then(({ writeFile }) => writeFile("page.pdf", pdf));
Keep API keys on the server. The examples use a public URL; for raw HTML or options such as page format, margins, orientation, scale, media mode, headers/footers, and password protection, follow the documented request schema rather than guessing field names.
5. Async conversion and callback reliability
Html2Pdf.app documents an optional background flow: an accepted job returns HTTP 202, then the generated PDF is sent to the supplied callback URL as base64 in a JSON document field. Its documentation recommends HTTPS and idempotent processing and describes up to three retries after failed delivery. Treat callback delivery as potentially repeated: store a job identifier, make processing safe to repeat, validate the payload, and acknowledge only after safely recording the result.
PDFShift advertises asynchronous responses, webhooks, and parallel conversions. The exact payload, retry behavior, and concurrency limits should be verified in its current documentation before building a consumer. For either service, avoid holding a web request open for work that may exceed your own request deadline; persist a job state and let a worker process notifications.
6. Credits, cost, and capacity planning
Both providers describe charging one credit per 5 MB chunk of generated PDF output. This makes output size a key cost variable: a large image-heavy document can consume more credits than a short text document. The retrieved Html2Pdf.app pricing page lists a free allowance of 100 credits per month and a 1 MB per-file limit, then Startup at $9 for 1,000 credits/month, Standard at $25 for 5,000, and Scale at $39 for 10,000. PDFShift’s retrieved page lists 50 free credits/month, 15 MB maximum file size, and a 30-second timeout; it does not establish a full paid-price ladder here.
Before choosing, estimate the distribution of generated file sizes and monthly volume, then check current plan details, any limits, and what happens when you exceed them. Do not compare the raw credit counts without considering the different free file-size ceilings and PDFShift timeout. Do not extrapolate provider-published average conversion times into your own service-level target.
7. Privacy and sensitive documents
Html2Pdf.app says generated PDFs are temporarily processed and not permanently stored, while its documentation says request metadata and submitted source URLs may remain in logs. PDFShift says it does not store documents unless requested and advertises HIPAA compliance. These are vendor statements, not an independent security or compliance audit.
For confidential, regulated, or personal data, review each provider’s current privacy terms and data processing agreement; if a BAA or another commitment is required, confirm that directly with the provider and your organization’s reviewers. A public URL can itself expose sensitive information through request logs, so consider what the source URL reveals.
8. Common problems and fixes
| Symptom | Likely cause | What to check |
|---|---|---|
| Authentication failure | Missing, invalid, or incorrectly supplied API key | For Html2Pdf.app, send the documented X-API-Key header. Keep secrets server-side and confirm the key is active. |
| PDF is blank or missing dynamic content | The page depends on JavaScript, delayed data, or inaccessible assets | Check whether the renderer can reach the page and its resources; try a stable page state and consult the provider’s current rendering controls. |
| Fonts or images are absent | Remote asset requests are blocked, slow, or require browser state | Check asset URLs, access rules, and whether the page can load those assets without a logged-in browser session. |
| Unexpected page breaks or scaling | Content dimensions, print styles, media mode, margins, or scale differ from expectations | Set and compare the documented page controls, then inspect the actual PDF across representative content lengths. |
| Request times out | Page scripts or network assets take too long, or the plan imposes a timeout | Reduce unnecessary page work, avoid a short client timeout, and consider a background workflow. PDFShift’s listed free plan has a 30-second timeout. |
| File rejected or limit reached | Generated PDF exceeds the plan’s file-size cap or credits are exhausted | Check output size and current account usage. The listed free caps differ: 1 MB for Html2Pdf.app and 15 MB for PDFShift. |
| Callback processes the same result twice | Delivery retries or duplicate notifications | Make the handler idempotent, store job state, and safely detect an already completed job. |
| Callback receives unusable document data | Base64 was treated as plain PDF bytes or payload parsing failed | Parse the JSON callback and decode its document field before writing the PDF; validate the result and retain useful error logs. |
9. If you need a screenshot instead of a PDF
If your actual output is a page image for a report, preview, or visual archive, compare screenshot services rather than choosing an HTML-to-PDF converter. ScreenshotNeo is a website screenshot API and MCP server for developers. It returns PNG, JPEG, WebP, or PDF from one GET request, and its 63 options include full-page capture, CSS element capture, PDF settings, custom CSS/JavaScript, wait conditions, and request controls. All features are available on every plan.
ScreenshotNeo handles cookie and consent banners before capture, removes more than 60 known consent platforms plus newsletter popups and chat widgets, and lets you turn each step off. Only clean shots are billed: bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. Responses report the page verdict and billing status in headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. Pricing is 1,000 screenshots per month free with no card; paid plans start at $5 for 3,000 shots. Yearly billing gives two months free.
Or skip the browser setup
Use a single API request for a screenshot. See the ScreenshotNeo API documentation for options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
Cookie banners, popups, and chat widgets are removed before the shot. Bot checks, blank pages, and failed loads are never billed. An MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card, and paid plans start at $5 for 3,000. Sign up free for ScreenshotNeo.
10. FAQ
Can I send a local file path as the URL?
The documented URL input is a public webpage URL. For local content, use the provider’s documented raw-HTML input if it fits your integration; do not assume the remote service can read files from your machine.
Should I select based on advertised average speed?
No. Test representative pages with your own assets, scripts, file sizes, and deadline. Provider figures use vendor-defined methods and may not predict your workload.
Can I use either service for a compliance-sensitive workflow?
Only after your organization reviews the current terms and required contractual commitments. Vendor privacy or compliance statements alone do not establish that a particular use is approved.
What is the fastest way to avoid a wrong choice?
Convert a small set of real pages on both services, inspect the resulting PDFs, test failure and callback handling, then estimate costs from measured output sizes and the current plan pages.
Sources
- Html2Pdf.app API documentation
- Html2Pdf.app pricing
- PDFShift homepage
- PDFShift pricing
- ScreenshotNeo documentation
Provider facts and prices above reflect the official pages reviewed on October 3, 2026. Confirm current capabilities, limits, and terms before publishing or relying on them.
