AutomationFlowsAI & RAG › Automate Meeting Summaries From Fireflies Transcripts with Gemini & Gmail

Automate Meeting Summaries From Fireflies Transcripts with Gemini & Gmail

ByDavide Boizza @n3witalia on n8n.io

🤝🖊️🤖 This workflow automates the process of retrieving meeting transcripts from Fireflies.ai, extracting and summarizing relevant content using Google Gemini, and sending or drafting well-formatted summaries and emails via Gmail.

Webhook trigger★★★★☆ complexityAI-powered26 nodes@Firefliesai/N8N Nodes FirefliesGmail TriggerGmailInformation ExtractorOpenAI ChatGoogle Gemini
AI & RAG Trigger: Webhook Nodes: 26 Complexity: ★★★★☆ AI nodes: yes Added:
Automate Meeting Summaries From Fireflies Transcripts with Gemini & Gmail — n8n workflow card showing @Firefliesai/N8N Nodes Fireflies, Gmail Trigger, Gmail integration

This workflow corresponds to n8n.io template #6587 — we link there as the canonical source.

This workflow follows the Gmail → Gmail Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "MBDLFA4yk0BfFQcM",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Fireflies Meeting Transcript & Summary Automation",
  "tags": [],
  "nodes": [
    {
      "id": "2e6b7379-7002-48ce-b96e-9ce85802b158",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -784,
        112
      ],
      "parameters": {
        "path": "880cfe0f-5c81-46cd-b717-be89dfa045cf",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "171f9f42-d428-4788-b922-eacdf20ec81a",
      "name": "Get a transcript",
      "type": "@firefliesai/n8n-nodes-fireflies.fireflies",
      "position": [
        496,
        112
      ],
      "parameters": {
        "transcriptId": "={{ $json.body.meetingId }}"
      },
      "credentials": {
        "firefliesApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ee48206c-8bfc-4dd7-aee4-2ff2d8396b25",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -784,
        -80
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e00e737b-7e6a-46d2-8bb4-6c3bdd268c90",
      "name": "Gmail Trigger",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        -784,
        304
      ],
      "parameters": {
        "filters": {
          "q": "subject:Your meeting recap",
          "sender": "user@example.com"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyHour",
              "minute": 1
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ba732ec4-b1d0-456f-93e1-8697f327207f",
      "name": "Get a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -512,
        304
      ],
      "parameters": {
        "simple": false,
        "options": {},
        "messageId": "={{ $json.id }}",
        "operation": "get"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "73d609de-1675-488c-9d8c-68adcaf53870",
      "name": "Information Extractor",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        -96,
        304
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value."
        },
        "attributes": {
          "attributes": [
            {
              "name": "meeting_notes",
              "required": true,
              "description": "Estrai il link del meeting"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c4c85559-784b-4b8b-a944-7a78b0266328",
      "name": "OpenAI Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -160,
        512
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "bd1ec6e4-cbe1-499e-9a72-dfc3c1a8395c",
      "name": "Code1",
      "type": "n8n-nodes-base.code",
      "position": [
        256,
        304
      ],
      "parameters": {
        "jsCode": "// Loop over input items and extract meeting ID from the URL\nfor (const item of $input.all()) {\n const url = item.json.output.meeting_notes;\n \n // Find the position of \"::\" and \"?\"\n const startIndex = url.indexOf(\"::\") + 2;\n const endIndex = url.indexOf(\"?\");\n \n // Extract the meeting ID\n const meetingId = url.substring(startIndex, endIndex);\n \n // Replace the entire item with the desired structure\n item.json = { \n   body: { \n     meetingId: meetingId \n   } \n };\n}\nreturn $input.all();"
      },
      "typeVersion": 2
    },
    {
      "id": "76cf2b34-d1a4-4a4e-88c9-cae79f7133ee",
      "name": "Set Meeting link",
      "type": "n8n-nodes-base.set",
      "position": [
        -304,
        304
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "095e5770-57bb-4471-83a6-f83a00887c9d",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ad53b5f9-7b95-49f3-aca6-cd9b6e5aa8de",
      "name": "Set MeetingId",
      "type": "n8n-nodes-base.set",
      "position": [
        -304,
        -80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "2b842573-706d-499d-a106-8808f39a9920",
              "name": "body.meetingId",
              "type": "string",
              "value": "01K18TW3MEX4XQ3TBG4RAD88HX"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "3da55996-bd1f-43f1-8d10-4294db196b45",
      "name": "Send a message1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2144,
        576
      ],
      "parameters": {
        "sendTo": "YOUR_EMAIL",
        "message": "={{ $json.data }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Short Meeting Recap"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "2aa61dca-63be-4085-a994-0be038738ab3",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1824,
        112
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "d51ab401-514d-4683-9cf6-b9534b634b5e",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        2144,
        112
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "text",
              "fieldToAggregate": "content.parts[0].text"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4ea0f903-9b61-4c0c-a85d-a084ebf865d1",
      "name": "Set senteces",
      "type": "n8n-nodes-base.set",
      "position": [
        816,
        -80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0065541b-565a-484a-b52f-c89a579392b7",
              "name": "sentences",
              "type": "array",
              "value": "={{ $json.data.sentences }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "df665dab-2ee4-42e6-bd43-0ee3e2349335",
      "name": "Set summary",
      "type": "n8n-nodes-base.set",
      "position": [
        816,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3b86bb4c-e4fc-4af7-a644-cbef02675eed",
              "name": "short_summary",
              "type": "string",
              "value": "={{ $json.data.summary.short_summary }}"
            },
            {
              "id": "fc5a137a-a77d-4480-8c82-f7066ba2a9e5",
              "name": "short_overview",
              "type": "string",
              "value": "={{ $json.data.summary.short_overview }}"
            },
            {
              "id": "b84c63d6-2b28-4d0a-bb6e-b3c1b74cd0df",
              "name": "overview",
              "type": "string",
              "value": "={{ $json.data.summary.overview }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "00e4b3cf-5fb0-4818-b361-c5eef944f0e8",
      "name": "Full transcript",
      "type": "n8n-nodes-base.code",
      "position": [
        1072,
        -80
      ],
      "parameters": {
        "jsCode": "// Accedi all'array sentences dal primo item\nconst transcriptArray = $input.first().json.sentences;\n\n// Verifica che l'array esista\nif (!transcriptArray || !Array.isArray(transcriptArray)) {\n  throw new Error('Array sentences non trovato o non \u00e8 un array');\n}\n\n// Crea la trascrizione combinata\nlet fullTranscript = '';\n\ntranscriptArray.forEach((segment) => {\n  // Usa text_cleanup se disponibile, altrimenti fallback su text o raw_text\n  const text = segment.ai_filters?.text_cleanup || segment.text || segment.raw_text;\n  const speakerName = segment.speaker_name || 'Unknown Speaker';\n  \n  // Aggiungi il segmento alla trascrizione completa\n  fullTranscript += `${speakerName}: ${text}\\n`;\n});\n\n// Rimuovi l'ultimo \\n se presente\nfullTranscript = fullTranscript.trim();\n\n// Loop over input items e aggiungi il campo full_transcript\nfor (const item of $input.all()) {\n  item.json.full_transcript = fullTranscript;\n  item.json.total_segments = transcriptArray.length;\n}\n\n//return $input.all();\n// Restituisci solo i campi richiesti\nreturn [{\n  json: {\n    full_transcript: fullTranscript,\n    total_segments: transcriptArray.length\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "d2de3745-e563-4c52-9b0d-8754ffc45b31",
      "name": "Full to MD",
      "type": "n8n-nodes-base.markdown",
      "position": [
        1808,
        -80
      ],
      "parameters": {
        "mode": "markdownToHtml",
        "options": {},
        "markdown": "={{ $json.content.parts[0].text }}"
      },
      "typeVersion": 1
    },
    {
      "id": "09926a2c-386d-4da6-9087-5d9bf01a274c",
      "name": "Send Full meeting summary",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2128,
        -80
      ],
      "parameters": {
        "sendTo": "YOUR_EMAIL",
        "message": "={{ $json.data }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Full meeting summary: {{ $('Gmail Trigger').item.json.Subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "9a46a1ad-72c8-4d36-a35b-fa5ee5fd0a22",
      "name": "Expert Meeting transcripts",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        1312,
        -80
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-pro",
          "cachedResultName": "models/gemini-2.5-pro"
        },
        "options": {
          "systemMessage": "=You're an expert at interpreting meeting transcripts. Summarize the text provided to you in Italian."
        },
        "messages": {
          "values": [
            {
              "content": "=Full transcript:\n{{ $json.full_transcript }}"
            }
          ]
        }
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "fa0b5315-4211-48da-9a37-15e770d2cfd8",
      "name": "To MD",
      "type": "n8n-nodes-base.markdown",
      "position": [
        2528,
        352
      ],
      "parameters": {
        "mode": "markdownToHtml",
        "options": {},
        "markdown": "={{ $json.content.parts[0].text }}"
      },
      "typeVersion": 1
    },
    {
      "id": "1b18001c-bd1a-4976-b4ab-c39b207d9cc0",
      "name": "Email writer",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        2128,
        352
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-pro",
          "cachedResultName": "models/gemini-2.5-pro"
        },
        "options": {
          "systemMessage": "=You must combine the two texts provided to you and make a complete email about what was discussed in the meeting in a single text to send to the client."
        },
        "messages": {
          "values": [
            {
              "content": "=Summary\n'''\n{{ $json.text }}\n'''"
            }
          ]
        }
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b8e6610b-0e1c-423d-adc7-ca954e9f4c9b",
      "name": "Meeting summary expert",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        1312,
        240
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-pro",
          "cachedResultName": "models/gemini-2.5-pro"
        },
        "options": {
          "systemMessage": "=You're an expert at interpreting meeting transcripts. You aggregate and summarize the texts provided to you."
        },
        "messages": {
          "values": [
            {
              "content": "=Short summary:\n{{ $json.short_summary }}\n\nShort overview:\n{{ $json.short_overview }}\n\nOverview:\n{{ $json.overview }}"
            }
          ]
        }
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6cead83a-0661-4e2d-a1f6-d2d8469a07ae",
      "name": "Draft email to client",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2752,
        352
      ],
      "parameters": {
        "message": "={{ $json.data }}",
        "options": {},
        "subject": "Recap Meeting",
        "resource": "draft"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "a879cf0d-3d91-45bb-b58d-6b92b5aa2b19",
      "name": "Recap to MD",
      "type": "n8n-nodes-base.markdown",
      "position": [
        1808,
        576
      ],
      "parameters": {
        "mode": "markdownToHtml",
        "options": {},
        "markdown": "={{ $json.content.parts[0].text }}"
      },
      "typeVersion": 1
    },
    {
      "id": "5c0ee665-875d-4676-963d-c36ea029c62c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -672
      ],
      "parameters": {
        "color": 3,
        "width": 832,
        "height": 352,
        "content": "## Fireflies Meeting Transcript & Summary Automation\nThis workflow automates the process of retrieving meeting transcripts from [Fireflies.ai](https://app.fireflies.ai/login?referralCode=01K0V2Z1QHY76ZGY9450251C99), extracting and summarizing relevant content using Google Gemini, and sending or drafting well-formatted summaries and emails via Gmail.\n\n**Fireflies** is an AI-powered meeting assistant that automatically records, transcribes, and summarizes meetings. It integrates with popular video conferencing tools like Zoom, Google Meet, and Microsoft Teams, helping teams capture key insights and action items without manual note-taking.\n\n\nThis workflow automates meeting recap generation, from email detection to AI-powered summarization and delivery.\n\n3 possible triggers:\n- Manual trigger (set-up the MeetingId)\n- Webhook trigger\n- Gmail trigger\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d889fe43-dc9b-4147-b754-536d05826c03",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -288
      ],
      "parameters": {
        "width": 832,
        "height": 144,
        "content": "### PRELIMINARY STEPS\n- Sign up for FREE to [Fireflies.ai](https://app.fireflies.ai/login?referralCode=01K0V2Z1QHY76ZGY9450251C99) \n- Get API Key in \"Settings\"->\"Developer Settings\"->\"API Key\"\n- If you want to activate \"Webhook\", set n8n Webhook trigger url on \"Settings\"->\"Developer Settings\"->\"Webhook\"\n- In send:message Gmail node set your email address"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "2f8ef654-3e08-4219-bc75-281c8d8dff4f",
  "connections": {
    "Code1": {
      "main": [
        [
          {
            "node": "Get a transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "To MD": {
      "main": [
        [
          {
            "node": "Draft email to client",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "Get a transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Email writer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Full to MD": {
      "main": [
        [
          {
            "node": "Send Full meeting summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Recap to MD": {
      "main": [
        [
          {
            "node": "Send a message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set summary": {
      "main": [
        [
          {
            "node": "Meeting summary expert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email writer": {
      "main": [
        [
          {
            "node": "To MD",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set senteces": {
      "main": [
        [
          {
            "node": "Full transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get a message": {
      "main": [
        [
          {
            "node": "Set Meeting link",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Trigger": {
      "main": [
        [
          {
            "node": "Get a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set MeetingId": {
      "main": [
        [
          {
            "node": "Get a transcript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Full transcript": {
      "main": [
        [
          {
            "node": "Expert Meeting transcripts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get a transcript": {
      "main": [
        [
          {
            "node": "Set senteces",
            "type": "main",
            "index": 0
          },
          {
            "node": "Set summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Meeting link": {
      "main": [
        [
          {
            "node": "Information Extractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Information Extractor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Information Extractor": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Meeting summary expert": {
      "main": [
        [
          {
            "node": "Recap to MD",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Expert Meeting transcripts": {
      "main": [
        [
          {
            "node": "Full to MD",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Set MeetingId",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

🤝🖊️🤖 This workflow automates the process of retrieving meeting transcripts from Fireflies.ai, extracting and summarizing relevant content using Google Gemini, and sending or drafting well-formatted summaries and emails via Gmail.

Source: https://n8n.io/workflows/6587/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow automatically processes Fireflies.ai meeting recap emails, extracts the meeting transcript, generates a structured summary email, and sends it to a designated recipient.

@Firefliesai/N8N Nodes Fireflies, Gmail Trigger, Gmail +3
AI & RAG

Detects new unread Gmail messages Extracts sender name for personalized replies Classifies the email into one of four categories Applies the correct Gmail label and either sends an auto-reply, creates

Gmail Trigger, OpenAI Chat, Gmail +4
AI & RAG

Overview

Google Calendar, Gmail, Google Drive +3
AI & RAG

Automatically scrape trending TikTok videos, analyze their virality using Gemini AI, and store insights directly into Airtable for creative research or content planning.

OpenAI Chat, HTTP Request, Airtable +2
AI & RAG

The Ultimate Scraper for n8n uses Selenium and AI to retrieve any information displayed on a webpage. You can also use session cookies to log in to the targeted webpage for more advanced scraping need

OpenAI Chat, HTTP Request, Information Extractor +1