Generating PDFs should be simple.

But if you've tried to do it inside a SaaS product, you already know it's anything but. Most APIs lock you into rigid templates, slow render speeds, or bloated subscription plans for what should be a basic developer utility.

We hit this wall ourselves while building internal tools. We didn’t want to manage Chromium headless rendering ourselves. But every "PDF as a Service" option we found came with restrictions that made no sense:

  • Subscriptions even if you're only rendering a few reports a month.
  • Hard limits on parallel processing or file sizes.
  • Poor templating support.
  • No async API for high-volume or background batch jobs.

So we built Reportgen.io - a simple, scalable, and affordable HTML-to-PDF API with pay-per-use pricing, unlimited parallelism, and built-in storage/CDN.


What Makes Reportgen Different

Most PDF APIs are priced like they're serving Fortune 500s. We're not.

With Reportgen, you get:

  • 150 free reports/month
  • Just $0.0025 per PDF after that
  • No subscriptions
  • Unlimited parallel jobs
  • Unlimited file size
  • Built-in Cloudflare CDN & R2 storage (1-year retention)
  • Async and sync APIs
  • Templating support for EJS, Handlebars, Go templates, and raw HTML

We focused on developer ergonomics and performance at scale. Whether you're rendering one-off invoices or 10,000 reports per day, it just works.


How It Works

Here’s a basic example using the sync API and Handlebars:

const fetch = require('node-fetch');
const fs = require('fs');

// Define the Handlebars template
const htmlTemplate = `

  
    
    
    Order Confirmation
  
  
    Order Confirmation
    Thank you for your order!
    Order ID: {{orderId}}
    Date: {{orderDate}}
    Your order will be shipped soon.
  
`;

// Define the dynamic data for the Handlebars template
const templateData = {
  orderId: '123456789',
  orderDate: 'October 7, 2024'
};

// Define the payload for the request
const requestData = {
  html_template: htmlTemplate,
  data: templateData,
  engine: 'handlebars'
};

// API Key
const apiKey = 'YOUR_API_KEY';

// Function to generate PDF using the Fetch API
async function generatePDF() {
  try {
    const response = await fetch('https://reportgen.io/api/v1/generate-pdf-sync', {
      method: 'POST',
      headers: {
        'X-API-Key': apiKey,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(requestData),
    });

    if (!response.ok) {
      throw new Error(`Error generating PDF: ${response.statusText}`);
    }

    const pdfBuffer = await response.buffer();
    fs.writeFileSync('order_confirmation.pdf', pdfBuffer);
    console.log('PDF successfully generated and saved as order_confirmation.pdf');
  } catch (error) {
    console.error('Error generating PDF:', error.message);
  }
}

generatePDF();



    Enter fullscreen mode
    


    Exit fullscreen mode
    




You can pass raw HTML or use placeholders to inject dynamic data using your preferred engine. Our API supports both sync (fast, simple) and async (long-running, high-volume) operations.
  
  
  Use Cases We See A Lot

SaaS platforms generating client invoices, reports, and dashboards
Marketing teams automating branded proposals
Backend systems that need contract rendering at scale
Platforms offering document downloads directly to end users
Basically, if you’re building an app and need a reliable, zero-maintenance way to generate and host PDFs, you’ll probably love this.
  
  
  Trade-Offs (Yes, We Have Some)


No sandbox/test mode yet - we recommend using a separate dev account during early integration

Billing model is new - we’re tracking feedback closely, but the pay-per-use is here to stay
We believe in being transparent. We’d rather earn your trust by showing you where we’re still improving.
  
  
  Try It Free (No Credit Card Needed)
Sign up at reportgen.io and get 150 reports free every month. No billing, no nonsense.We built this because we were sick of the subscription tax on basic developer tools. If you are too, come try it out and tell us what breaks.Questions, feature requests, edge cases? Drop them in the comments or ping us on Twitter.Happy rendering.