Glide Integration: Generate Documents From Your No-Code App
Last updated March 23, 2026
Help us reach the Glide team
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
- In your Glide app, go to Settings.
- Open the Integrations section and find PDFMonkey.
- Click Add to app.
- 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
| Field | Required | Description |
|---|---|---|
| Template ID | Yes | The ID of your PDFMonkey template. Copy it from the template settings in your PDFMonkey dashboard. |
| Filename | Yes | The name of the generated file. You can use dynamic values from your Glide data. |
| File output | Yes | The column where the download link is saved once the document is ready. Use a text column (not a URL column). |
| Dynamic values | No | Key/value pairs that replace placeholders in your template. Click +Add value to map Glide columns to template variables. |
Naming variables
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
Workflow Example
Here is a typical flow that generates a certificate when a user completes a course:
- The user taps a Download Certificate button in your Glide app.
- The button triggers the Generate PDF file action.
- Set Template ID to the ID of your certificate template.
- Set Filename to something descriptive, for example the user’s name combined with the course title.
- Map your dynamic values:
recipientName→ the user’s name columncourseName→ the course title columncompletionDate→ the completion date column
- Set File output to a text column in your data source.
- 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:
- 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"} - Create a Joined List column in the parent table that joins all rows with commas.
- Create another template column that wraps the joined list in square brackets to form a valid JSON array:
[<joined list>] - 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.
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:
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.
Create a Joined List column in the parent table that concatenates all the formatted rows into a single string.
Pass the joined HTML as a dynamic value in the Generate PDF file action. For example, map it to a variable called
lineItemsHtml.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>
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
camelCaseorsnake_caseinstead. For example, usecustomerName, notCustomer 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
- From Zero to First Document: Set up your PDFMonkey account and create your first template
- Defining Dynamic Data: Learn how to structure the JSON payload for your templates
- Document Statuses: Understand the lifecycle of a generated document
- Webhooks: Receive real-time notifications when documents finish generating
- Download URL: How download URLs work and when they expire
- Explore other integrations: Zapier, Make, n8n, Workato, Bubble
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.