PDFCraft

Pricing

Pay for what you process, not for seats. No per-user pricing, no annual contract, no sales call.

Free

$0

100 / month
renders or extracted pages
Hard stop at the limit
2 req/s

Start free

Starter

$9 / month

2,000 / month
renders or extracted pages
then $0.004 each
20 req/s

Upgrade

Growth

$29 / month

10,000 / month
renders or extracted pages
then $0.004 each
20 req/s

Upgrade

Scale

$79 / month

50,000 / month
renders or extracted pages
then $0.004 each
20 req/s

Upgrade

Business

$249 / month

250,000 / month
renders or extracted pages
then $0.004 each
150 req/s

Upgrade

What one unit is

One allowance covers both endpoints. One render is one unit. One extracted page is one unit — so pulling tables out of a 40-page statement with /v1/extract costs 40, not one. There is no separate extraction plan to buy and no second number to track: GET /v1/usage counts both.

That makes a long PDF the one thing worth watching. Read part of a document with "options": { "pages": "1-5" } and you are billed for those five pages only. On a plan with no overage we will not start a job larger than your remaining allowance — you get invalid_request naming the number, rather than a quiet overshoot.

What you are billed for

A render is billable if Chromium actually ran. That means successes, and it means render_failed — the browser did the work; the HTML is what broke. You are never billed for render_timeout, for internal_error, or for any request that was rejected before it reached the browser — bad JSON, a revoked key, a rate limit, a quota stop.

Extraction follows the same rule with one difference in your favour: a PDF that turns out to have no text layer — a scan — returns extraction_failed and is not billed. Finding that out takes about twenty milliseconds a page, and charging for a no is not a business.

Crossing your limit

On a paid plan nothing stops. You keep rendering and the extra renders accrue as overage, because a job that fails at 2am because of a counter is worse than a small invoice. On the free plan the 101st render returns 429 quota_exceeded. Either way GET /v1/usage and the X-Renders-Remaining header tell you where you stand before you get there.

Data retention

Rendered PDFs are deleted once their signed URL expires — 24 hours by default. Render records (id, status, size, duration, error code) are kept indefinitely as billing history. We do not keep your HTML.