> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Zapier

> Set up webhooks with Zapier to automatically fetch transcripts

## Overview

Connect Fireflies [webhooks](/graphql-api/webhooks-v2) to Zapier to automatically fetch transcripts when meetings are processed. This guide creates a two-step Zap:

1. **Trigger** — receive a webhook notification when a meeting is transcribed
2. **Action** — use the `meeting_id` from the webhook to fetch the transcript via the [GraphQL API](/graphql-api/query/transcript)

## Prerequisites

* A Fireflies.ai account with [webhook access](/graphql-api/webhooks-v2)
* A [Zapier](https://zapier.com) **paid plan** (Professional or above — Webhooks by Zapier is not available on the free tier)
* Your Fireflies [API key](https://app.fireflies.ai/settings)

## Step 1: Create the Zapier webhook trigger

<Steps>
  <Step title="Create a new Zap">
    Log in to [Zapier](https://zapier.com) and click **Create**.
  </Step>

  <Step title="Select trigger">
    Search for **Webhooks by Zapier** → choose **Catch Hook**.
  </Step>

  <Step title="Skip Configure">
    Leave the **Pick off a Child Key** field blank and click **Continue**.
  </Step>

  <Step title="Copy the webhook URL">
    On the **Test** tab, copy the generated URL (e.g. `https://hooks.zapier.com/hooks/catch/123456/abcdef/`). You'll paste this into Fireflies next.
  </Step>
</Steps>

## Step 2: Add the webhook URL in Fireflies

<Steps>
  <Step title="Open the webhooks page">
    Go to the [webhooks configuration page](https://app.fireflies.ai/integrations/api/webhook).
  </Step>

  <Step title="Configure the webhook">
    Fill in:

    * **Webhook URL** — paste the Zapier URL from Step 1
    * **Event Subscriptions** — select `meeting.transcribed`
  </Step>

  <Step title="Save">
    Save the configuration.
  </Step>
</Steps>

<Note>
  If you are still on the deprecated [Webhooks V1](/graphql-api/webhooks) webhook saved in Developer settings, the payload uses `meetingId` and `eventType` instead of the fields shown below.
</Note>

## Step 3: Test the connection

<Steps>
  <Step title="Listen for a test event">
    In Zapier, click **Test trigger**. Then click **Send Test Event** in Fireflies, or [upload a short audio file](https://app.fireflies.ai/upload) to generate a real webhook event.
  </Step>

  <Step title="Verify the payload">
    Zapier should receive a payload like:

    ```json theme={null}
    {
      "event": "meeting.transcribed",
      "timestamp": 1710876543210,
      "meeting_id": "ASxwZxCstx"
    }
    ```

    The `meeting_id` is the transcript ID you'll use next.

    <Note>
      **Send Test Event** delivers a placeholder payload (`"event": "test"`, `"meeting_id": "test_00000000"`) - use it to confirm Zapier receives the request, and upload a file to see a real `meeting.transcribed` payload.
    </Note>
  </Step>
</Steps>

## Step 4: Fetch the transcript

Add a second step to your Zap that calls the Fireflies GraphQL API with the `meeting_id`.

<Steps>
  <Step title="Add action">
    Click **+** → search **Webhooks by Zapier** → select **Custom Request**.
  </Step>

  <Step title="Configure the request">
    * **Method**: `POST`
    * **URL**: `https://api.fireflies.ai/graphql`
    * **Headers**:

    | Key | Value |
    | - | - |
    | Content-Type | application/json |
    | Authorization | Bearer YOUR\_API\_KEY |
  </Step>

  <Step title="Set the request body">
    In the **Data** field, enter:

    ```json theme={null}
    {
      "query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { id title date organizer_email participants transcript_url duration summary { overview action_items shorthand_bullet short_summary } sentences { speaker_name text start_time end_time } } }",
      "variables": {
        "transcriptId": "{{meeting_id}}"
      }
    }
    ```

    <Note>
      Do **not** type `{{meeting_id}}` literally. Use Zapier's **Insert Data** picker to select **Meeting Id** from the trigger step — the field should show a data pill, not raw text.
    </Note>
  </Step>

  <Step title="Test">
    Click **Test step**. You should see the transcript data in the response.
  </Step>
</Steps>

## Step 5: Extend your Zap

With transcript data flowing into Zapier, add more steps to automate your workflow:

* **Slack** — post meeting summaries to a channel
* **Google Sheets** — log meeting details in a spreadsheet
* **Asana / Jira / Trello** — create tasks from action items
* **Email** — send recaps to attendees
* **Salesforce / HubSpot** — push notes to your CRM

## Customizing the query

Modify the GraphQL query in Step 4 to fetch only the fields you need. See the [Transcript schema](/schema/transcript) for all available fields.

Example with speaker analytics and AI filters:

```graphql theme={null}
query Transcript($transcriptId: String!) {
  transcript(id: $transcriptId) {
    id
    title
    summary {
      overview
      action_items
    }
    analytics {
      speakers {
        name
        duration
        words_per_minute
      }
    }
    sentences {
      speaker_name
      text
      ai_filters {
        task
        question
        sentiment
      }
    }
  }
}
```

## Troubleshooting

<AccordionGroup>
  <Accordion title="Zapier is not receiving events">
    * Check the webhook URL is saved on the [webhooks page](https://app.fireflies.ai/integrations/api/webhook)
    * Ensure `meeting.transcribed` is selected under **Event Subscriptions**
    * The URL must start with `https://`
    * Use **Send Test Event**, or upload a test file at [app.fireflies.ai/upload](https://app.fireflies.ai/upload)
  </Accordion>

  <Accordion title="Transcript query returns null">
    * Verify you're using the correct `meeting_id` from the webhook
    * Check your API key hasn't expired
  </Accordion>

  <Accordion title="Authorization error">
    * Ensure the header is `Bearer YOUR_API_KEY` (with a space after `Bearer`)
    * The API key must belong to the account that owns the webhook
  </Accordion>
</AccordionGroup>

## Resources

<CardGroup cols={2}>
  <Card title="Webhooks V2" icon="bell" href="/graphql-api/webhooks-v2">
    Webhook events and authentication
  </Card>

  <Card title="Transcript query" icon="file-lines" href="/graphql-api/query/transcript">
    Full query reference
  </Card>

  <Card title="Transcript schema" icon="database" href="/schema/transcript">
    All available fields
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.