Convert Modern HTML + CSS to PDF in seconds

Convert any HTML page or URL into a PDF with pixel-accurate fonts, colours, and layout.

import { GeneratePDFs } from '@generatepdfs/node-sdk';

const client = GeneratePDFs.connect('YOUR_API_TOKEN');

// Generate from HTML file with CSS
const pdf = await client.generateFromHtml(
    '/path/to/file.html',
    '/path/to/file.css'
);

// Or from a URL
const pdf = await client.generateFromUrl('https://example.com');
from generatepdfs import GeneratePDFs

client = GeneratePDFs.connect('YOUR_API_TOKEN')

# Generate from HTML file with CSS
pdf = client.generate_from_html(
    '/path/to/file.html',
    '/path/to/file.css'
)

# Or from a URL
pdf = client.generate_from_url('https://example.com')
<?php
use GeneratePDFs\GeneratePDFs;

$client = GeneratePDFs::connect('YOUR_API_TOKEN');

// Generate from HTML file with CSS
$pdf = $client->generateFromHtml(
    '/path/to/file.html',
    '/path/to/file.css'
);

// Or from a URL
$pdf = $client->generateFromUrl('https://example.com');
<?php
use GeneratePDFs\Laravel\Facades\GeneratePDFs;

// Generate from HTML file with CSS
$pdf = GeneratePDFs::generateFromHtml(
    '/path/to/file.html',
    '/path/to/file.css'
);

// Or from a URL
$pdf = GeneratePDFs::generateFromUrl('https://example.com');
require 'generatepdfs'

client = GeneratePDFs::GeneratePDFs.connect('YOUR_API_TOKEN')

# Generate from HTML file with CSS
pdf = client.generate_from_html(
    '/path/to/file.html',
    '/path/to/file.css'
)

# Or from a URL
pdf = client.generate_from_url('https://example.com')

Built to make PDF creation easy

Reliable PDF conversion without extra tooling

Upload an HTML file or point to a live page and get a clean, consistent PDF that follows your layout. Use it manually or integrate it with your existing workflow using our API for documents, reports or downloads.

API for automated workflows
Use the API to generate PDFs directly from your system whenever you need them. Ideal for invoices, order confirmations, reports or anything your platform already produces as HTML.
Respects your layout and CSS
Your PDF matches the structure and styling of your original HTML. External CSS, fonts and page layout are all supported, giving you consistent results across every file.
Upload files directly
Use the dashboard to convert individual HTML files or URLs without needing to touch the API. Perfect for quick one-off documents or testing layouts before automating them.
Access recent PDFs
Your generated PDFs are stored for a set period, so you can download them again without running the conversion a second time. Useful for record-keeping and quick retries.
Clear docs and code samples
Get started quickly with straightforward documentation and examples in curl, PHP, Node.js, Ruby and Go. Everything you need to integrate the service into your setup.
Predictable usage tracking
Every PDF generation is logged so you always know how many conversions you’ve used during your billing cycle. Ideal for teams managing volume or budgeting for predictable usage.

Pricing

Flexible pricing for real-world workloads

Pick a monthly allowance that suits your needs, with optional on-demand generations when you need extra flexibility.

Free

A simple way to test the API with a small monthly allowance.

Signup
  • 100 generations per month
  • HTML to PDF in the browser
  • HTML to PDF via API
  • URL to PDF in the browser
  • URL to PDF via API
  • CSS & Images supported

Level 1

Built for small projects that need reliable monthly PDF generation.

Signup
  • Everything from Free
  • 750 generations per month
  • On-Demand available at $0.03 per generation

Level 2

Ideal for growing apps with higher volume and consistent workloads.

Signup
  • Everything from Free
  • 4,000 generations per month
  • On-Demand available at $0.015 per generation

Level 3

Designed for high-traffic applications that need serious throughput.

Signup
  • Everything from Free
  • 20,000 generations per month
  • On-Demand available at $0.008 per generation
  • Priority in generation queue

Frequently asked questions

Have a different question and can’t find the answer you’re looking for? We'd love to help, reach out to us on Bluesky or send us an email!

What counts as a generation?
A generation is one PDF successfully created through the API. File size, page count, and HTML length do not affect the cost. One document equals one generation.
What happens if I reach my monthly limit?
If you have enabled on-demand billing, additional generations are charged at your plan’s overage rate. If on-demand is disabled, you will need to either upgrade your plan or enable on-demand billing to continue generating PDFs.
Does the Free plan allow overage billing?
No. The Free plan is capped at its included monthly allowance. To generate more PDFs, you will need to upgrade to Level 1 or higher.
Do unused generations roll over to the next month?
No. Generations reset at the start of each billing cycle. This keeps pricing predictable and reflects your actual monthly usage.
Can I upgrade or downgrade at any time?
Yes. Plan changes take effect immediately. Your subscription cost will be prorated based on the time left in your billing cycle, and your account will switch to the new plan’s generation limit right away.
Will I be charged for failed generations?
No. Failed generations, such as rendering errors or invalid input, do not count against your monthly quota and are not billed as overages.
How does on-demand billing work?
When enabled, any usage beyond your included monthly generations is billed per additional generation at your plan’s overage rate. These overage charges are added to your next monthly invoice, keeping your current billing cycle uninterrupted.
Is there a limit on how many PDFs I can generate per month?
There is no fixed upper limit. Higher plans support large volumes, and on-demand billing ensures you can scale to any level your application requires.
Are there size limits on HTML or input payloads?
There is no strict limit on the size of your HTML content. The only enforced limit is on uploaded images, which must be 10 MB or smaller. Larger images should be served externally.