# Connect Zapier

> Learn how to generate images and PDFs in a Zap with the Bannerify app.

Canonical: https://bannerify.co/docs/integrations/zapier

The Bannerify app in [Zapier](https://zapier.com/apps/bannerify/integrations) renders a template with the data from your Zap and returns the link of the file. You can use it to make an image or a PDF for each new spreadsheet row or form answer, without writing code.

## Actions

| Action | Output | Fields |
| --- | --- | --- |
| Create Image | A PNG, JPEG, or WebP file | Template, Format, Modifications JSON, and one field for each text or image layer |
| Create PDF | A PDF file | Template, Modifications JSON, and one field for each text or image layer |

Both actions return an object with a `url` field. Bannerify saves the file on its CDN, and each run counts as one generation.

## Prerequisites

- A Zapier account.
- A Bannerify [API key](https://bannerify.co/docs/api-reference/authentication#create-an-api-key).
- A template with named layers. [Modifications](https://bannerify.co/docs/essentials/modifications#name-your-layers) explains why the names matter.

## Add the action

1. In your Zap, add a step and choose the **Bannerify** app.
2. Choose **Create Image** or **Create PDF**.
3. Connect your account and paste your API key in the **Project API Key** field.
4. In **Template**, choose a template. Zapier loads the templates of the workspace that owns the key.
5. For Create Image, choose a **Format**: `png`, `jpeg`, or `webp`. The default is `png`.
6. Fill in the layer fields, as described below.
7. Click **Test step**. The result has a `url` field. Open the link to check the file.

## Fill in the layers

After you choose a template, Zapier adds a field for each text layer and each image layer. The label shows the layer name and the field that it changes, such as `headline (text)` or `photo (src)`. Map a value from an earlier step into the field. A field that you leave empty keeps the value from the template.

For layers of other types, such as QR codes and tables, use **Modifications JSON**. It takes an object where each key is a layer name, or the array that the API uses:

```json
{
  "qr": { "qrcode": "https://example.com/orders/1042" },
  "total": "$29.00"
}
```

[Modifications](https://bannerify.co/docs/essentials/modifications) lists the fields that each layer type reads.

## Recipe: spreadsheet row to a Drive file

1. Add a **Google Sheets** trigger and choose **New Spreadsheet Row**.
2. Add the **Bannerify** action **Create Image**. Map each column to a layer field, for example the `Headline` column to `headline (text)`.
3. Add a **Google Drive** action and choose **Upload File**. Use the `url` from the Bannerify step as the file.
4. Add a **Slack** action and choose **Send Channel Message** if you want the `url` posted in a channel.

## Troubleshooting

| Problem | What to do |
| --- | --- |
| The **Template** list is empty | Check that the API key belongs to the workspace that owns the templates |
| A layer does not change | Check the layer name in the editor. Names are case-sensitive, and the API ignores a name that does not exist |
| The step fails with a usage limit message | The workspace reached its daily or monthly limit. See [Quota and limits](https://bannerify.co/docs/account/quota) |
| The step fails with `TOO_MANY_REQUESTS` | The key sent too many requests in 10 seconds. The message names the time when the window resets, so run the step again after that time |

Zapier shows the message that the API returns when a step fails. [Handle errors](https://bannerify.co/docs/api-reference/errors/introduction) lists the codes.

## Related

- [Previous: Connect Bannerify to your tools](https://bannerify.co/docs/integrations/overview)
- [Next: Connect n8n](https://bannerify.co/docs/integrations/n8n)
- [Documentation index](https://bannerify.co/docs/llms.txt)
