Any web page or HTML to a clean PDF
Paste a URL or send your HTML and get a PDF printed by real Chrome: A4 or Letter, margins, backgrounds and page numbers. For invoices, reports, receipts and saving pages. Free, no key.



Who it's for
Anyone who needs a PDF of a page or a template, from one click to an automated invoice run.
POST your HTML template, get a print-ready PDF with backgrounds and page numbers.
Turn an article, docs page or dashboard into an A4 or Letter PDF.
One GET URL returns the PDF file, so it drops into Make, Zapier, n8n or a curl line.
An MCP tool that returns the PDF as base64 plus its page count and size.
Try it
Enter a web page. Printwren prints it with real Chrome; click the result to download the PDF.
Raw JSON response
Real sample output
Captured from a live call to this API.
{
"results": [
{
"source": "https://developer.mozilla.org/en-US/docs/Web/CSS/@page",
"status": "ok",
"title": "@page CSS at-rule - CSS | MDN",
"pages": 9,
"bytes": 1517607,
"format": "A4",
"landscape": false,
"renderMs": 4568,
"downloadUrl": "https://printwren.cybermax-tools.workers.dev/pdf?url=https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2F%40page&format=A4&pageNumbers=true",
"renderedAt": "2026-09-26T00:31:08.019Z"
}
],
"count": 1
}Limits, plainly
Free and rate limited so it stays fast for everyone. A bulk version (many URLs per run, custom headers and footers, waits for selectors, cookie-banner dismissal) is coming to the Apify Store.
- 4 PDFs per minute per IP address, one document per call.
- HTML up to 200 KB; public http(s) pages only.
- About 25 seconds per document at most.
- Shared free renderer: if it is busy you get a clear 503, try again a minute later.
- Free, no key, no sign-up. Nothing is stored: the PDF is made on each call.
Use the API
JSON over HTTPS, CORS enabled, no key. GET for quick calls, POST a JSON body for lists. Spec: openapi.json · llms.txt
curl -s "https://printwren.cybermax-tools.workers.dev/api/pdf?url=example.com&format=A4&pageNumbers=false"
# lists: POST a JSON body
curl -s -X POST https://printwren.cybermax-tools.workers.dev/api/pdf \
-H "content-type: application/json" \
-d '{"html":"<h1>Invoice #1042</h1><p>Total: $120.00</p>","format":"Letter","pageNumbers":true,"includePdfBase64":true}'import requests
r = requests.post("https://printwren.cybermax-tools.workers.dev/api/pdf",
json={"html":"<h1>Invoice #1042</h1><p>Total: $120.00</p>","format":"Letter","pageNumbers":True,"includePdfBase64":True}, timeout=30)
r.raise_for_status()
for row in r.json()["results"]:
print(row)Endpoints: /api/pdf print a url or html to pdf (json result)
Add it to your AI agent (MCP)
A remote MCP server at https://printwren.cybermax-tools.workers.dev/mcp (streamable HTTP, no auth). Read-only tools with JSON schemas, so agents know exactly what to send.
// Claude Desktop, Cursor, VS Code, any MCP client (remote, no key)
{
"mcpServers": {
"printwren": { "type": "http", "url": "https://printwren.cybermax-tools.workers.dev/mcp" }
}
}
# Claude Code
claude mcp add --transport http printwren https://printwren.cybermax-tools.workers.dev/mcp
# Tools: url_to_pdf, html_to_pdf
# e.g. url_to_pdf({"url":"example.com","format":"A4"})url_to_pdf
Print a public web page to PDF with real Chrome. Returns title, page count, size, a direct download URL and (include_base64=true) the PDF bytes as base64.html_to_pdf
Print an HTML document (invoice, report, receipt; up to 200 KB, inline CSS) to PDF with real Chrome. Returns the PDF as base64 with page count and size.
FAQ
Why not the browser's Print to PDF?
Fine for one page. Printwren does the same real-Chrome printing from a URL or an HTML string, so a script, a no-code flow or an AI agent can make the PDF without a person clicking.
Why not wkhtmltopdf?
wkhtmltopdf uses an old WebKit engine and is archived; modern CSS (flexbox, grid, web fonts) often breaks. Printwren prints with current Chrome.
Can I get the file directly?
Yes: GET /pdf?url=example.com returns the PDF file itself (Content-Type application/pdf). /api/pdf returns JSON with a download link and optional base64.
Do you keep my HTML or PDFs?
No. Each PDF is made on the call and returned; nothing is stored.
Can I convert many pages or use custom headers?
The free API does one document per call. The bulk version with custom header/footer templates, wait-for-selector and cookie-banner dismissal is coming to the Apify Store.
Is there a key or a cost?
No. The API and MCP server are free and rate limited (4 PDFs per minute per IP).