Skip to content
CastPDF

CastPDF vs PDFShift

PDFShift is a Chromium converter: you send finished HTML or a URL and get a PDF. CastPDF also renders in Chromium, but it stores your templates, fills them with JSON and paginates long documents. Choose PDFShift to convert existing web pages; choose our PDF generation API to build documents from data.

  • Updated October 2026
  • Prices checked October 2026
  • 100 free PDFs a month

The verdict in brief

PDFShift does one job and keeps it simple. You hand it HTML, or the address of a page, and Chromium prints it. There are no templates to manage, which suits teams that already build their HTML elsewhere.

CastPDF is for documents you build from data, again and again. You design an invoice or a report once, store it, and send JSON for each copy. Print mode repeats table headers and numbers the pages. Each PDF counts once, whatever its size, and 100 live PDFs a month are free.

Prices side by side

The cheapest monthly plan that includes each volume, from each vendor's public pricing page (checked October 2026, before tax). Where a vendor sells extra documents on a smaller plan, that can cost less than the plan shown; the text below works it out where it matters. CastPDF counts one PDF per document, whatever its page count.

Monthly price at three volumes
PDFs a monthCastPDFPDFShift
1,000$19 (Starter)$24 (Boost)
10,000$49 (Growth)$99 (Business)
50,000$129 (Pro)$149 (Shift 50k)
Free plan100 PDFs a month50 credits a month

PDFShift: One credit is one document per 5 MB of output.

A converter and a template API

With PDFShift, your code produces the final HTML. You might render it with a server-side template engine, then post the result, or you point PDFShift at a URL. Its engine is Chromium, so modern CSS behaves as it does in Chrome.

With CastPDF, the template lives in the dashboard. You write HTML and CSS with Liquid tags, see a live preview with your sample data, and keep versions. Your app sends template_id and a JSON object. A colleague can adjust the sample data in Simple mode, a form that needs no code.

One honest gap

CastPDF does not take a URL to convert. It renders the HTML or template you send. If your workflow is "print this page of our site", PDFShift fits it directly, and CastPDF would need you to send the page’s HTML instead.

You can also send raw HTML to CastPDF, exactly as you would to a converter. Add data and that HTML becomes a Liquid template for one request. That makes a gradual move possible: keep your current HTML first, then move the layout into a stored template.

Side-by-side facts

CastPDF and PDFShift compared
CastPDFPDFShift
EngineChromium, with Paged.js in print modeChromium
InputHTML, or a stored template plus JSONFinished HTML or a URL
TemplatesLiquid templates with live preview and versionsNone
Free plan100 live PDFs a month, unlimited test PDFs50 credits a month
How usage countsOne document, whatever its size (up to 40 MB)One credit per document, counted per 5 MB of output
Going over your planFrom $9.00 down to $1.75 per 1,000, up to your spending capExtra credits from $40 per 1,000 (Starter) down to $15 per 1,000 (Shift 50k)
Repeating table headers and page numbersBuilt in (print mode)Not stated on the pricing page

Facts about PDFShift come from its pricing page and home page, linked in the sources below. "Not stated" means we did not find it there.

Credit math at five volumes

Both products sell extra documents on top of a plan, so the cheapest route is not always the plan that covers your volume. We checked both routes for each product. On PDFShift, extra credits are rarely the better deal. At 1,000 documents, Starter plus 500 extra credits at $40 per 1,000 comes to $29. The Boost plan costs $24.

Cheapest monthly route at each volume (list prices, monthly billing)
PDFs a monthCastPDFPDFShift
1,000$19 (Starter)$24 (Boost)
5,000$41.50 (Starter plus 2,500 extra)$39 (Growth)
10,000$49 (Growth)$99 (Business)
100,000$299 (Scale)$249 (Shift 100k)
250,000$386.50 (Scale plus 50,000 extra)$499 (Shift 250k)

At 10,000, PDFShift Growth plus 5,000 extra credits would cost at least $114, even at its lowest listed rate. So Business is its cheaper route there. At 100,000, CastPDF Pro plus overage would be $304, so Scale is our cheaper route, and PDFShift is cheaper still.

File size matters too. PDFShift counts one credit per 5 MB of output, so a 12 MB product catalogue uses three credits. CastPDF counts one document for any PDF up to 40 MB. If your PDFs are image-heavy, recalculate with your real file sizes.

In short: CastPDF costs less at 1,000 and 10,000 documents and at very large volumes. PDFShift costs less around 5,000 and around 100,000 documents a month. Annual billing lowers CastPDF further; see the pricing page.

What CastPDF adds on top of conversion

  • Stored templates. The layout stays in one place. Your code sends only data, so a design change never needs a deploy.
  • A live preview. Edit the HTML and CSS and see the PDF update with your sample data. The guide to generating a PDF from JSON shows the whole loop.
  • Print mode for long documents. Table headers repeat, rows stay whole and pages show "Page 2 of 6". Learn how in the guide to page numbers in HTML to PDF.
  • Clear template errors. A broken Liquid tag returns template_render_error with the line and column, so you fix it in seconds.
  • Billing you can predict. Email alerts at 80% and 100% of your PDFs, a spending cap on overage, and unused PDFs that roll over on paid plans.
  • Safe retries. An Idempotency-Key makes a repeated request return the first PDF, never a second charge.

When PDFShift is the better choice

  • You convert existing pages by URL. Receipts, dashboards or articles that already live on your site can go straight to PDFShift. CastPDF needs the HTML itself.
  • You print very high volumes on its large tiers. Around 100,000 documents a month, its Shift 100k plan is cheaper than our plans.
  • Your HTML is already finished. If another system builds the final markup and you only need it printed, a template layer adds nothing for you.
  • Your volume sits near 5,000 a month. Its Growth plan at $39 is slightly cheaper than CastPDF at that volume.

Switching from PDFShift, step by step

Most PDFShift users build HTML in their own code. The move has two stages: send that HTML to CastPDF unchanged, then move the layout into a template so your code only sends data.

  1. Start with a test key. Create a free test key. The quickstart shows the first request in curl, Node.js and Python.
  2. Send the HTML you send today. Post it in the html field. Set "mode": "print" if the document runs over several pages.
  3. If you converted URLs. Fetch the page’s HTML on your side and send it, or rebuild the page as a template. Pages behind a login or on a private network cannot be loaded by the renderer.
  4. Move the layout into a template. Paste the HTML into a new template. Replace values with Liquid tags and loops, and paste one real JSON payload as sample data.
  5. Send data instead of HTML. Change your code to send template_id and data, as in the Python example below. Then switch to a live key.
The table part of a packing list template
<table>
  <thead>
    <tr><th>SKU</th><th>Item</th><th>Qty</th><th>Unit price</th></tr>
  </thead>
  <tbody>
    {% for line in lines %}
    <tr>
      <td>{{ line.sku }}</td>
      <td>{{ line.description }}</td>
      <td>{{ line.qty }}</td>
      <td>{{ line.price | money: "EUR" }}</td>
    </tr>
    {% endfor %}
  </tbody>
</table>
Render it from Python with requests
import os

import requests

payload = {
    "template_id": os.environ["CASTPDF_TEMPLATE_ID"],
    "data": {
        "order": "SO-20931",
        "customer": {"name": "Harbor Supply Co.", "city": "Rotterdam"},
        "lines": [
            {"sku": "PAL-120", "description": "Euro pallet", "qty": 40, "price": 12.5},
            {"sku": "STR-09", "description": "Stretch film roll", "qty": 12, "price": 18.0},
        ],
    },
    "filename": "packing-list-SO-20931.pdf",
}

resp = requests.post(
    "https://api.castpdf.com/v1/pdf",
    headers={
        "Authorization": f"Bearer {os.environ['CASTPDF_API_KEY']}",
        "Idempotency-Key": "packing-list-SO-20931",
    },
    json=payload,
    timeout=60,
)
if resp.status_code != 200:
    error = resp.json()["error"]
    raise RuntimeError(f"{error['code']}: {error['message']}")

with open("packing-list-SO-20931.pdf", "wb") as f:
    f.write(resp.content)

Sources

Every fact about another product on this page comes from that product's own pages, checked October 2026. CastPDF's prices and limits come from our pricing page.

What PDFShift publishes
PDFShiftWhat it saysSource
Free plan50 credits a monthpdfshift.io/pricing
How usage countsOne credit per document, counted per 5 MB of outputpdfshift.io/pricing
Extra creditsFrom $40 per 1,000 (Starter) down to $15 per 1,000 (Shift 50k)pdfshift.io/pricing
EngineChromiumpdfshift.io
TemplatesNone: you send finished HTML or a URLpdfshift.io/pricing
FAQ

Common questions

Can CastPDF convert a URL to PDF like PDFShift?

No. CastPDF renders HTML or a stored template that you send in the request. To print an existing page, fetch its HTML first and send that, or rebuild it as a template.

Does a large PDF cost more than one document on CastPDF?

No. Every successful PDF counts as one document, up to 40 MB and 50 pages. On credit systems that count per file size, a large catalogue can use several credits.

Do I have to use templates on CastPDF?

No. You can send finished HTML and CSS, just as you would to a converter. Templates are there when you want the layout stored in one place and your code to send only data.

At what volume is PDFShift cheaper than CastPDF?

On list prices, around 5,000 and around 100,000 documents a month. At 1,000, 10,000, 50,000 and 250,000 CastPDF is cheaper. The credit math section on this page shows each route.

Is the output the same, since both use Chromium?

For short documents it is usually very close. For long ones, CastPDF print mode adds pagination rules, repeating table headers and page numbers. Render your own longest document in both to compare.

Can I move my server-side templates to Liquid?

Usually yes. Loops, conditions and variables map to Liquid tags with little change. Formatting helpers become filters such as money, number and format_date.

Make your first PDF in 5 minutes

Pick a template, add your details and download your PDF. You get 100 free PDFs every month, and you don’t need a card.