100 free credits on sign-up, no card

Turn any URL or HTML into a pixel-exact PDF.

One POST request returns a finished document. No headless browser to run, no Chrome to patch, no rendering queue to keep alive at 3am.

you only pay for renders that succeed

1.4s

median render, A4 with web fonts

1,100

fonts bundled, emoji and CJK

31

request options, all optional

Live playground
Acme, Inc. INVOICE 0042
Rendering credits$980.00
Stored files$180.00
Priority queue$80.00
TOTAL $1,240.00
Paper
Orientation
Page numbers
POST urltodoc.com/api/render

What teams render with it

Invoices

Monthly reports

Contracts

Payslips

Tickets

Certificates

OG images

The part nobody wants to own

Running your own browser fleet is a second product.

It starts as forty lines of Puppeteer. Then come the font cache, the zombie processes, the memory ceiling on Lambda, the Chrome release that changes page breaks, and the retry logic for pages that were still loading. We keep that running so your team can ship the feature instead.

On your own

Cold starts and OOM kills

Chromium needs ~1GB and warm memory. Serverless gives you neither.

On your own

Fonts that vanish in prod

Perfect locally, Times New Roman in the container. Every time.

On your own

Page breaks that drift

A browser upgrade silently moves the table header to page two.

With urltodoc

A pinned renderer

Version-pinned engine, warm pool, 1,100 bundled fonts. Same bytes in a year.

01 / REQUEST

Send the page

POST a URL or a raw HTML string with your key. Choose paper size, margins, whether scripts run, and what to wait for.

02 / RENDER

We print it

A real browser loads the page, waits for fonts, images and your selector, then prints to the exact paper box.

03 / RECEIVE

Get the file

The response streams the bytes back. Or set store and we keep it on our CDN and return a URL.

Built for production

Everything the boring path needs

All features →

Async renders & webhooks

Queue a 300-page report, get a webhook when it lands. No open connection, no gateway timeout.

async: true · callback_url

Batch endpoint

Send up to 500 jobs in one call. Month-end invoicing stops being a cron job you babysit.

POST /api/batch

Storage on our CDN

Keep the file with us and hand your users a link, or push it straight to your own S3 bucket.

store: true · s3_target

Headers, footers, page numbers

Repeat a masthead on every page and place {page}/{total} without touching your markup.

header_html · footer_html

Merge many URLs into one file

Cover page, terms, appendix. Send an ordered list and get a single continuously paginated PDF.

merge: [url, url, …]

Signed URLs

Sign the options with your secret and render straight from the browser. Your key never ships.

GET /api/render?signature=…

Use the language you already wrote

Five SDKs, or plain HTTP

Node, Python, PHP, Go and Ruby wrap the same endpoint with typed options. Anything else: it is one authenticated POST with a JSON body.


One dashboard

Every render on the record

Inspect the request that produced any file, re-download it, replay a failed job, and watch your credits without opening a ticket.

app.dashboard · recent renders

The urltodoc dashboard listing recent conversions with their status and stored files

“TESTIMONIAL PLACEHOLDER — one or two sentences from a customer about replacing their own Puppeteer service.”

NAME · ROLE, COMPANY

“TESTIMONIAL PLACEHOLDER — quote about reliability at month-end volume.”

NAME · ROLE, COMPANY

“TESTIMONIAL PLACEHOLDER — quote about support response time.”

NAME · ROLE, COMPANY

Pricing

Credits, or a monthly plan

Start with 100 free credits. Buy packs that never expire, or take a plan when volume is steady. A failed render is never charged.

Compare

Already have a script?

We wrote the honest version of both comparisons, including the cases where you should keep what you have.

FAQ

Common questions

Anything missing? Write to a human — usually the same day.

Do I need to write code?

For the API, yes — it is HTTP, so any language works. If you would rather not, the Zapier, Make and n8n integrations cover the common flows without a line of code.

Can I render images instead of PDF?

Yes. Ask for PNG, JPEG or WebP and the same request returns an image, full-page or clipped to a selector.

How is pricing calculated?

One successful render spends one credit. Failed requests cost nothing. Plans include a monthly credit allowance; packs top it up and never expire.

Can it reach pages behind a login?

Yes. Pass cookies, headers or basic auth with the request. Most teams render a signed one-time URL on their own domain instead.

What happens to my documents?

Nothing is kept unless you set store. Stored files have a retention you choose, down to one hour, and can be deleted over the API.

Which payment methods do you accept?

Cards through Stripe. For invoicing, SEPA or a purchase order, get in touch and we will sort it out.

Ship your first PDF before lunch.

Create an account, copy your key, POST a URL. 100 credits, no card, no sales call.