Glide Integration: Generate Documents From Your No-Code App

Last updated March 23, 2026

Help us reach the Glide team

We have reached out to the Glide team multiple times to improve this integration — in particular to add support for arrays and line items — but have never received a response. If you have a direct contact at Glide or any way to push this forward, we would greatly appreciate it. A better integration would benefit everyone building invoices, quotes, and other documents with line items from Glide.

The PDFMonkey integration for Glide lets you generate documents directly from your no-code app. Add a Generate PDF file action to a button, form submission, or workflow, map your data to a PDFMonkey template, and get a download link back when the document is ready.

Prerequisites

Before you begin, make sure you have:

  • A PDFMonkey account (sign up here)
  • A Glide account on a paid plan (the integration is not available on free plans)
  • A published template in PDFMonkey

For account creation and template setup, see From Zero to First Document.

You also need your API Secret Key, available on the My Account page. See Authentication for details.

Setting Up the Integration

  1. In your Glide app, go to Settings.
  2. Open the Integrations section and find PDFMonkey.
  3. Click Add to app.
  4. Paste your PDFMonkey API Secret Key and save.

Once connected, the Generate PDF file action becomes available in your app’s actions and workflows.

Generate PDF File Action

The Generate PDF file action creates a document from one of your PDFMonkey templates and returns a link to the finished file. You can trigger it from:

  • A Button or other interactive component
  • A Form submission
  • The Workflow Editor

Action Fields

FieldRequiredDescription
Template IDYesThe ID of your PDFMonkey template. Copy it from the template settings in your PDFMonkey dashboard.
FilenameYesThe name of the generated file. You can use dynamic values from your Glide data.
File outputYesThe column where the download link is saved once the document is ready. Use a text column (not a URL column).
Dynamic valuesNoKey/value pairs that replace placeholders in your template. Click +Add value to map Glide columns to template variables.

Naming variables

The keys you add in the dynamic values section must match the variable names in your PDFMonkey template exactly. See the naming variables reference for formatting rules.

How the Action Works

When the action runs, it sends the template ID and your dynamic values to the PDFMonkey API. PDFMonkey generates the document and returns a download link, which Glide saves in the column you specified as File output.

Publish your template first

If the generated documents don’t reflect your latest edits, check that you published the template in PDFMonkey. Forgetting to publish after making changes is a common mistake.

Workflow Example

Here is a typical flow that generates a certificate when a user completes a course:

  1. The user taps a Download Certificate button in your Glide app.
  2. The button triggers the Generate PDF file action.
  3. Set Template ID to the ID of your certificate template.
  4. Set Filename to something descriptive, for example the user’s name combined with the course title.
  5. Map your dynamic values:
    • recipientName → the user’s name column
    • courseName → the course title column
    • completionDate → the completion date column
  6. Set File output to a text column in your data source.
  7. Once generation completes, the download link appears in the output column. You can display it as a link or use it in a subsequent action (such as sending an email).

Working with Line Items

The Glide integration passes data to PDFMonkey as flat key/value pairs. It does not natively support arrays or nested JSON, which means you cannot send a list of line items (such as invoice rows) the same way you would with Zapier or Make.

This is a Glide-side limitation, not a PDFMonkey one. PDFMonkey templates fully support arrays and loops, but the Glide integration cannot send structured array data directly. The workarounds below let you work around this limitation depending on whether you use Code Templates or Builder Templates.

Code Templates: JSON String with parse_json

The cleanest approach for Code Templates is to pass your line items as a JSON string and parse it in the template using the parse_json filter.

In Glide:

  1. Create a template column in your related items table that formats each row as a JSON object string. For example: {"product":"Waffle","qty":12,"unitPrice":"3.50","total":"42.00"}
  2. Create a Joined List column in the parent table that joins all rows with commas.
  3. Create another template column that wraps the joined list in square brackets to form a valid JSON array: [<joined list>]
  4. Pass this string as a dynamic value in the Generate PDF file action, for example as lineItemsJson.

In your PDFMonkey template, parse the string and loop over the resulting array:

{% assign items = lineItemsJson | parse_json %}

<table>
  <thead>
    <tr>
      <th>Product</th>
      <th>Qty</th>
      <th>Unit Price</th>
      <th>Total</th>
    </tr>
  </thead>
  <tbody>
    {% for item in items %}
    <tr>
      <td>{{ item.product }}</td>
      <td>{{ item.qty }}</td>
      <td>{{ item.unitPrice }}</td>
      <td>{{ item.total }}</td>
    </tr>
    {% endfor %}
  </tbody>
</table>

This gives you a proper array to loop over, with full access to individual fields — exactly as if the data had been sent as structured JSON.

If the JSON string is empty or invalid, parse_json returns nil. You can provide a fallback: lineItemsJson | parse_json: "[]". See the full parse_json reference.

Builder Templates: Custom JS with JSON.parse

For Builder Templates, the approach is similar: pass a JSON string from Glide, then parse it in the Custom JS editor so you can use the resulting array in your template bindings.

In Glide, build the JSON string the same way as described above.

In the Custom JS editor of your Builder template, parse the string and assign the result to window:

window.lineItems = JSON.parse($docPayload.lineItemsJson || '[]');

You can then use lineItems in the builder’s loop and binding features to iterate over the array and display each item.

Alternative: Pre-Built HTML

If you prefer to handle the formatting entirely in Glide, you can build the line items as an HTML string and pass the result as a single variable:

  1. Create a template column in your related items table that formats each row as an HTML table row. For example:

    <tr>
      <td>Product Name</td>
      <td>2</td>
      <td>$15.00</td>
      <td>$30.00</td>
    </tr>
    

    Use Glide column references to pull the actual values.

  2. Create a Joined List column in the parent table that concatenates all the formatted rows into a single string.

  3. Pass the joined HTML as a dynamic value in the Generate PDF file action. For example, map it to a variable called lineItemsHtml.

  4. In your PDFMonkey template, output the variable so the HTML renders correctly:

    <table>
      <thead>
        <tr>
          <th>Product</th>
          <th>Qty</th>
          <th>Unit Price</th>
          <th>Total</th>
        </tr>
      </thead>
      <tbody>
        {{ lineItemsHtml }}
      </tbody>
    </table>
    
This approach is simpler to set up but less flexible — you cannot reuse the individual item data for calculations or conditional logic in the template. If you need that, use the JSON string approach or the Builder approach instead.

Alternative: Use an Automation Platform

If you need structured array data without any workaround, consider routing the generation through an automation platform like Make or Zapier. These platforms support line items natively and can receive a trigger from Glide via webhook, then call the PDFMonkey API with a properly structured JSON payload.

Troubleshooting

Blank Documents

If the download link is generated but the document is blank:

  • Check your variable names. Column names with spaces do not work as variable keys. Use camelCase or snake_case instead. For example, use customerName, not Customer Name.
  • Check your test data in PDFMonkey. Open your template, go to the Test data tab, and verify the document renders correctly with sample JSON. If it works in PDFMonkey but not from Glide, the issue is in the data mapping.
  • Check the PDFMonkey history. Open your PDFMonkey dashboard and look at the document in the History tab. The payload shows exactly what data Glide sent, making it easy to spot missing or misnamed variables.

File Output Column Type

The File output field should point to a text column in your Glide data source. Using a URL column or other types may cause the link to not be saved correctly.

Document Generation Fails

If no link appears in the output column:

  • Verify your API Secret Key is correct in the integration settings.
  • Confirm your Template ID is valid and the template is published.
  • Check the PDFMonkey dashboard for error details on the failed document.

Download URL Expired

The download URL is valid for 1 hour. If the link stops working after that, the URL has expired. You can:

  • Generate a new document to get a fresh link.
  • Use a share link for permanent access (available on Premium plans).

For more details, see Download URL Returns 403.

Glide Updates Consumption

Each successful execution of the Generate PDF file action consumes Glide updates. The exact number is shown when you configure the action. Failed actions do not consume updates. See Glide’s billing documentation for details on update costs and quotas.

Next Steps

Frequently asked questions

How do I generate PDFs from a Glide app with PDFMonkey?
In your Glide app Settings, add the PDFMonkey integration with your API Secret Key. Then use the Generate PDF file action in a button, form, or workflow, providing your Template ID, a filename, dynamic values, and a text column for the output link.
Can I send line items or arrays from Glide to PDFMonkey?
Not directly. Glide passes flat key/value pairs, so it cannot send arrays natively. The workaround is to build a JSON string in Glide using template columns and a Joined List column, then parse it in your PDFMonkey template with parse_json (Code Templates) or JSON.parse in Custom JS (Builder Templates).
Why are my Glide-generated PDFMonkey documents blank?
The most common cause is mismatched variable names. Column names with spaces don’t work as variable keys—use camelCase or snake_case instead. Check the document payload in PDFMonkey’s History tab to see exactly what data Glide sent.