This workflow corresponds to n8n.io template #14987 — we link there as the canonical source.
This workflow follows the Form Trigger → HTTP Request 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 →
{
"nodes": [
{
"id": "3ff42eda-d35f-4baa-b4c9-6e0ac6d615d1",
"name": "5. Set \u2014 Build Success Response",
"type": "n8n-nodes-base.set",
"position": [
-912,
192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "resp-html",
"name": "confirmationHtml",
"type": "string",
"value": "=<div style=\"font-family:sans-serif;max-width:520px;margin:48px auto;padding:32px;border:1px solid #e0e0e0;border-radius:12px;text-align:center\"><h2 style=\"color:#22c55e\">✅ Fireflies Bot Invited</h2><p><strong>{{ $('2. Set \u2014 Validate and Prepare Inputs').item.json.meeting_title }}</strong></p><p>The bot will join your meeting automatically.<br>Duration: {{ $('2. Set \u2014 Validate and Prepare Inputs').item.json.meeting_duration }} minutes</p><p style=\"color:#888;font-size:13px\">Transcript and summary will appear in your Fireflies dashboard after the call ends.</p></div>"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "fc84d244-ddf0-4181-9cdf-7a641110c522",
"name": "6. Respond \u2014 Bot Invited Successfully",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
-608,
192
],
"parameters": {
"options": {},
"respondWith": "html"
},
"typeVersion": 1.1
},
{
"id": "fad4ccc3-d401-4071-a44e-1cd10eac432c",
"name": "Overview1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2848,
-48
],
"parameters": {
"color": 4,
"width": 508,
"height": 928,
"content": "## Fireflies Bot Meeting Inviter \u2014 One-Click Form\n\nFor sales teams, account managers, and consultants who manually invite the Fireflies recording bot to every meeting and keep forgetting in the rush before calls. Bookmark this form URL. Before any sales call, open it, paste the meeting link, and submit. The bot joins instantly. No Fireflies dashboard needed, no login, no navigation \u2014 just the form.\n\nTitle defaults to Sales Meeting - Incrementors if left blank. Duration is clamped between 15 and 120 minutes. Invalid meeting links get an immediate error response instead of silently failing.\n\n## How it works\n- **1. Form \u2014 Invite Fireflies Bot** collects the meeting link, title, password, duration, and language\n- **2. Set \u2014 Validate and Prepare Inputs** cleans and normalises all five fields with sensible defaults\n- **3. IF \u2014 Valid Meeting Link?** checks the link is non-empty and starts with http \u2014 invalid links exit with an error message\n- **4. HTTP \u2014 Send to Fireflies API** calls the Fireflies GraphQL addToLiveMeeting mutation\n- **5. Set \u2014 Build Success Response** prepares the confirmation message shown on screen\n- **6. Respond \u2014 Bot Invited Successfully** returns the confirmation page to the submitter\n- **7. Set \u2014 Build Error Response** prepares the error message for invalid links\n- **8. Respond \u2014 Invalid Link Error** returns the error page to the submitter\n\n## Set up steps\n1. In **4. HTTP \u2014 Send to Fireflies API** \u2014 replace YOUR_FIREFLIES_API_KEY in the Authorization header with your actual key from app.fireflies.ai under Integrations then API\n2. In **2. Set \u2014 Validate and Prepare Inputs** \u2014 update the default title from Sales Meeting - Incrementors to your own default\n3. Activate the workflow and bookmark the Form URL from node 1\n4. Share the form URL with your sales team"
},
"typeVersion": 1
},
{
"id": "30ed9178-2679-4169-9fef-64742636d4bd",
"name": "Section \u2014 Form Input and Link Validation1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2272,
144
],
"parameters": {
"color": 5,
"width": 772,
"height": 356,
"content": "## Form Input and Link Validation\nForm collects meeting link, title, password, duration, and language. Inputs are cleaned with defaults applied. The IF node checks the link is non-empty and starts with http \u2014 invalid links route to the error path immediately."
},
"typeVersion": 1
},
{
"id": "76e58703-3e58-46bf-a365-2b6216360f41",
"name": "Section \u2014 Fireflies API Call and Success Response1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1408,
80
],
"parameters": {
"color": 6,
"width": 1028,
"height": 388,
"content": "## Fireflies API Call and Success Response\nGraphQL mutation sends the meeting link to Fireflies. On success, a confirmation page is shown to the submitter with the meeting title and a reminder to check the Fireflies dashboard."
},
"typeVersion": 1
},
{
"id": "c1109d3a-a245-4be0-a6a6-f045efa512b3",
"name": "Note \u2014 Fireflies API Key Required1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1920,
592
],
"parameters": {
"color": 3,
"width": 1004,
"height": 140,
"content": "## \u26a0\ufe0f Fireflies API Key Required\nReplace YOUR_FIREFLIES_API_KEY in the Authorization header. Get your key from app.fireflies.ai \u2014 go to Integrations, then API, then copy your Personal API Key."
},
"typeVersion": 1
},
{
"id": "2100ecbd-7e06-4c8e-b5eb-5038b4b84c95",
"name": "1. Form \u2014 Invite Fireflies Bot",
"type": "n8n-nodes-base.formTrigger",
"position": [
-2208,
272
],
"parameters": {
"options": {},
"formTitle": "Invite Fireflies Bot to Sales Meeting",
"formFields": {
"values": [
{
"fieldLabel": "Meeting Link",
"placeholder": "https://meet.google.com/xxx-xxxx-xxx",
"requiredField": true
},
{
"fieldLabel": "Meeting Title",
"placeholder": "e.g. Sales Call - ClientName"
},
{
"fieldLabel": "Meeting Password (if any)",
"placeholder": "Leave blank if no password"
},
{
"fieldType": "number",
"fieldLabel": "Duration in Minutes",
"placeholder": "60 (min 15, max 120)"
},
{
"fieldType": "dropdown",
"fieldLabel": "Meeting Language",
"fieldOptions": {
"values": [
{
"option": "en"
},
{
"option": "hi"
},
{
"option": "es"
},
{
"option": "fr"
},
{
"option": "pt"
}
]
}
}
]
},
"responseMode": "lastNode",
"formDescription": "Enter your meeting details \u2014 the bot will automatically join and begin recording instantly."
},
"typeVersion": 2.2
},
{
"id": "6739a7e5-61fb-4cd3-86e1-9323ef8a6bdf",
"name": "2. Set \u2014 Validate and Prepare Inputs",
"type": "n8n-nodes-base.set",
"position": [
-1952,
272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "assign-link",
"name": "meeting_link",
"type": "string",
"value": "={{ $json['Meeting Link'].trim() }}"
},
{
"id": "assign-title",
"name": "meeting_title",
"type": "string",
"value": "={{ $json['Meeting Title'] || 'Sales Meeting - Incrementors' }}"
},
{
"id": "assign-password",
"name": "meeting_password",
"type": "string",
"value": "={{ $json['Meeting Password (if any)'] || '' }}"
},
{
"id": "assign-duration",
"name": "meeting_duration",
"type": "number",
"value": "={{ Math.min(Math.max(parseInt($json['Duration in Minutes']) || 60, 15), 120) }}"
},
{
"id": "assign-language",
"name": "meeting_language",
"type": "string",
"value": "={{ $json['Meeting Language'] || 'en' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "58876f51-d0d0-4dd3-b3bd-1e1ac6cb9c46",
"name": "3. IF \u2014 Valid Meeting Link?",
"type": "n8n-nodes-base.if",
"position": [
-1696,
272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "link-not-empty",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.meeting_link }}",
"rightValue": ""
},
{
"id": "link-starts-http",
"operator": {
"type": "boolean",
"operation": "equals"
},
"leftValue": "={{ $json.meeting_link.startsWith('http') }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "42280d1f-ea15-4476-96fb-f65b259a2728",
"name": "4. HTTP \u2014 Send to Fireflies API",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1264,
192
],
"parameters": {
"url": "https://api.fireflies.ai/graphql",
"method": "POST",
"options": {},
"jsonBody": "={\n \"query\": \"mutation AddToLiveMeeting($meetingLink: String!, $title: String, $duration: Int, $meetingPassword: String, $language: String) { addToLiveMeeting(meeting_link: $meetingLink, title: $title, duration: $duration, meeting_password: $meetingPassword, language: $language) { success } }\",\n \"variables\": {\n \"meetingLink\": \"{{ $json.meeting_link }}\",\n \"title\": \"{{ $json.meeting_title }}\",\n \"duration\": {{ $json.meeting_duration }},\n \"meetingPassword\": \"{{ $json.meeting_password }}\",\n \"language\": \"{{ $json.meeting_language }}\"\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer YOUR_TOKEN_HERE"
}
]
}
},
"typeVersion": 4.2
}
],
"connections": {
"3. IF \u2014 Valid Meeting Link?": {
"main": [
[
{
"node": "4. HTTP \u2014 Send to Fireflies API",
"type": "main",
"index": 0
}
],
[]
]
},
"1. Form \u2014 Invite Fireflies Bot": {
"main": [
[
{
"node": "2. Set \u2014 Validate and Prepare Inputs",
"type": "main",
"index": 0
}
]
]
},
"4. HTTP \u2014 Send to Fireflies API": {
"main": [
[
{
"node": "5. Set \u2014 Build Success Response",
"type": "main",
"index": 0
}
]
]
},
"5. Set \u2014 Build Success Response": {
"main": [
[
{
"node": "6. Respond \u2014 Bot Invited Successfully",
"type": "main",
"index": 0
}
]
]
},
"2. Set \u2014 Validate and Prepare Inputs": {
"main": [
[
{
"node": "3. IF \u2014 Valid Meeting Link?",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Paste your meeting link into a simple form and submit. The workflow instantly sends your Fireflies recording bot to the meeting — no dashboard login, no navigation, no clicking through menus. You get a confirmation page showing the meeting title and a reminder to check your…
Source: https://n8n.io/workflows/14987/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Easily generate images with Black Forest's Flux Text-to-Image AI models using Hugging Face’s Inference API. This template serves a webform where you can enter prompts and select predefined visual styl
A sample demo showing how to integrate Browser Use Cloud API with N8N workflows. This template demonstrates AI-powered web research automation by collecting competitor intelligence and delivering form
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .
This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c