Skip to main content
All posts
Zapier automation PDF API no-code

How to Use the PodPDF API in Zapier

Add PodPDF to your Zapier workflows and generate PDFs automatically from form submissions, CRM events, spreadsheet updates and more.

PodPDF Team April 22, 2026 7 min read

Zapier connects thousands of apps into automated workflows. By adding PodPDF as a webhook step, you can generate PDFs at any point in a Zap — triggered by a form submission, a CRM deal stage change, a new spreadsheet row, or virtually any other event.

This guide walks through everything you need: getting your API key, building the Zapier step, and passing the PDF to later steps.

Prerequisites

  • A PodPDF account with credits ($0.01 per PDF)
  • A Zapier plan that includes Webhooks by Zapier, which is a premium app
  • A trigger already set up in your Zap (e.g., Google Forms, Typeform, HubSpot, Airtable)

Step 1: Get Your PodPDF API Key

  1. Log into app.podpdf.com
  2. Go to Settings → API Keys
  3. Click Create New API Key and give it a name (e.g., “Zapier”)
  4. Copy the key — it’s only shown once

Step 2: Add a “Webhooks by Zapier” Step

In your Zap, add a new action step, search for Webhooks by Zapier, and choose the Custom Request event. Custom Request lets you send the exact JSON body PodPDF expects, including nested options.

Configure the step:

Method: POST

URL:

https://api.podpdf.com/quickjob

Data:

{
  "input_type": "html",
  "html": "<h1>Invoice</h1><p>Customer: {{customer_name}}</p><p>Amount: {{amount}}</p>",
  "store": true,
  "options": {
    "format": "A4",
    "margin": { "top": "20mm", "bottom": "20mm", "left": "20mm", "right": "20mm" }
  }
}

Replace {{customer_name}} and {{amount}} with field mappings from your trigger using Zapier’s variable picker.

"store": true matters here. Without it, PodPDF returns the PDF as a binary file, which Zapier can’t pass between steps. With it, you get JSON containing a download link.

Headers:

KeyValue
X-API-KeyYOUR_API_KEY
Content-Typeapplication/json

Step 3: Test the Step

Click Test step. A successful response looks like:

{
  "job_id": "9f0a4b78-2c0c-4d14-9b8b-123456789abc",
  "pages": 1,
  "truncated": false,
  "download_url": "https://...",
  "download_url_expires_at": "2026-04-22T10:15:00.000Z"
}

download_url is what you’ll use in later steps. It’s valid for one hour, which is plenty for steps in the same Zap run. Don’t store it as a permanent link — see Keeping a permanent copy below.

Step 4: Use the PDF in Later Steps

Most Zapier file fields accept a URL and fetch the file for you.

Send the PDF via Gmail

Add a Gmail → Send Email step. In the attachment field, select download_url from the PodPDF step.

Save to Google Drive

Add a Google Drive → Upload File step and set the File field to download_url.

Attach to a HubSpot record

Add a HubSpot file or attachment step and pass download_url as the file source.

Store in Dropbox or OneDrive

Use their upload actions and pass download_url as the file.

Keeping a Permanent Copy

The PDF stays on PodPDF for 30 days, but the link expires after an hour. If you want a lasting copy, upload the file to Google Drive, Dropbox, or S3 in the same Zap — then link to that copy, not to download_url. Writing download_url into an Airtable or CRM field gives you a link that stops working an hour later.

Building Dynamic HTML with Zapier Data

The real power comes from building HTML dynamically using trigger data. Here’s an invoice template using fields from a Google Sheets trigger:

<!DOCTYPE html>
<html>
<head>
<style>
  body { font-family: Arial, sans-serif; padding: 40px; }
  .header { display: flex; justify-content: space-between; margin-bottom: 40px; }
  table { width: 100%; border-collapse: collapse; }
  th, td { padding: 12px; border: 1px solid #ddd; text-align: left; }
  th { background: #f5f5f5; }
  .total { font-size: 18px; font-weight: bold; margin-top: 20px; text-align: right; }
</style>
</head>
<body>
  <div class='header'>
    <h1>Invoice #{{invoice_number}}</h1>
    <p>Date: {{date}}</p>
  </div>
  <p><strong>Bill To:</strong> {{customer_name}}<br>{{customer_email}}</p>
  <table>
    <tr><th>Description</th><th>Qty</th><th>Unit Price</th><th>Total</th></tr>
    <tr>
      <td>{{item_description}}</td>
      <td>{{quantity}}</td>
      <td>{{unit_price}}</td>
      <td>{{line_total}}</td>
    </tr>
  </table>
  <p class='total'>Total Due: {{total_amount}}</p>
</body>
</html>

Paste this into the html value in the Data field, then replace the {{...}} placeholders with trigger fields.

Watch out for double quotes. The HTML sits inside a JSON string, so any " inside it — in attributes or in mapped field values — breaks the JSON. Use single quotes for attributes, as above, and if a mapped field might contain quotes (like a free-text note), clean it first with a Formatter by Zapier step.

Using Markdown Instead of HTML

If your content is simpler, use Markdown:

{
  "input_type": "markdown",
  "markdown": "# Invoice #{{invoice_number}}\n\n**Date:** {{date}}\n\n**Customer:** {{customer_name}}\n\n## Items\n\n| Description | Total |\n|---|---|\n| {{item_description}} | {{line_total}} |\n\n**Total Due:** {{total_amount}}",
  "store": true,
  "options": {
    "format": "A4"
  }
}

Common Zap Patterns

Form submission → PDF → Email

  1. Trigger: Typeform / Google Forms / Jotform submission
  2. Action 1: PodPDF — generate PDF from form data
  3. Action 2: Gmail / Outlook — email the PDF to the submitter and/or your team

CRM deal closed → Contract PDF → e-signature

  1. Trigger: HubSpot deal moved to “Closed Won”
  2. Action 1: PodPDF — generate contract PDF from deal data
  3. Action 2: Your e-signature tool — send the generated PDF for signing

New Airtable row → PDF report → Google Drive

  1. Trigger: New record in Airtable
  2. Action 1: PodPDF — generate PDF report from record fields
  3. Action 2: Google Drive — upload the PDF to a folder
  4. Action 3: Airtable — update the record with the Google Drive link

Scheduled weekly report

  1. Trigger: Schedule by Zapier (weekly)
  2. Action 1: Google Sheets — fetch report data
  3. Action 2: Formatter by Zapier — assemble HTML from data
  4. Action 3: PodPDF — generate PDF
  5. Action 4: Email — send to distribution list

Troubleshooting

401 error — Check the header name is exactly X-API-Key and the value is your key with no extra spaces.

400 error — Read the error.code in the response. The common ones: MISSING_INPUT_TYPE (add input_type), MISSING_CONTENT_FIELD (the html or markdown field is missing), or an invalid JSON body — usually an unescaped " from a mapped field.

402 or 403 errorUPGRADE_REQUIRED means the account hasn’t bought credits yet; INSUFFICIENT_CREDITS means the balance has run out. Top up in the dashboard.

The PDF is missing images or styles — Use absolute HTTPS URLs for images, fonts, and stylesheets. Relative paths have nothing to resolve against.

The step times out/quickjob handles documents up to 25 pages and 30 seconds of rendering, and typical invoices take a few seconds. For much larger documents, use /longjob and a webhook instead.

download_url isn’t available in later steps — Run the test step successfully first; Zapier only offers fields it has seen in a test response. Also check "store": true is in the Data.

Merging or Splitting PDFs in Your Workflow

The same HTTP step can combine or cut up PDFs you already have. Send files to POST /pdf/merge to build one PDF from several, or to POST /pdf/split to turn a long run into one file per page or per range. See how to merge PDFs with the PodPDF API, how to split a PDF into multiple files, and the step-by-step payslip and statement splitting workflows.

Pricing

Webhooks by Zapier requires a Zapier plan that includes premium apps. PodPDF charges $0.01 per PDF, deducted from prepaid credits that never expire. Merge and split are billed once per operation.

Create a PodPDF account to get started.

Start generating PDFs today

$0.01 per PDF — no subscriptions, no monthly minimums. Credits never expire.