Connect Fireflies to this workflow once and every meeting action item becomes a ClickUp task automatically — no manual note-taking, no copy-pasting. The moment Fireflies finishes transcribing a call, the workflow extracts action items from two sources, uses GPT-4o-mini to parse each one into a clean task with an owner, deadline, and priority, and creates every task in ClickUp via the API. When all tasks are created, you receive a single Telegram message confirming the total count. Built for founders, project managers, and team leads who want zero gap between a meeting ending and the work showing up in their task manager.
Estimated Setup Time: 15–20 minutes
Import the workflow — Open n8n → Workflows → Import from JSON → paste the workflow JSON → click Import
Activate the workflow and copy the webhook URL — Toggle the workflow to Active → click on node 1. Webhook — Fireflies Transcript Done → copy the webhook URL shown
Register the webhook in Fireflies — Log in to fireflies.ai → Settings → Developer Settings → Webhooks → paste the webhook URL → save
Get your Fireflies API key — In Fireflies, go to Settings → Integrations → copy your API key
Get your ClickUp API token — In ClickUp, click your avatar (bottom left) → Settings → Apps → API Token → copy the token
Get your ClickUp List ID — Open the ClickUp list where tasks should be created → look at the URL bar → copy the number after /li/ (e.g. in .../li/90121234567, the list ID is 90121234567)
Get your Telegram Chat ID — Open Telegram → search for @userinfobot → send /start → it will reply with your chat ID
Fill in Config Values — Open node 5. Set — Config Values → replace all placeholders:
| Field | What to enter |
|---|---|
YOUR_FIREFLIES_API_KEY |
Your Fireflies API key from step 4 |
YOUR_CLICKUP_API_TOKEN |
Your ClickUp API token from step 5 |
YOUR_CLICKUP_LIST_ID |
Your ClickUp list ID from step 6 |
YOUR_TELEGRAM_CHAT_ID |
Your Telegram chat ID from step 7 |
YOUR NAME |
Your name (used in the AI prompt context) |
YOUR COMPANY NAME |
Your company name (shown in Telegram message) |
Connect OpenAI — Open node 11. OpenAI — GPT-4o-mini Model → click the credential dropdown → add your OpenAI API key → test the connection
Connect Telegram — Open node 17. Telegram — Send Task Summary → click the credential dropdown → add your Telegram Bot API credential → open Telegram → send /start to your bot before testing
⚠️ Activate the workflow before registering the webhook in Fireflies. An inactive workflow will not receive signals. Activate first, then paste the URL into Fireflies.
Step 1 — Webhook: Fireflies Transcript Done
This step listens for a signal from Fireflies. Every time a meeting finishes transcribing, Fireflies sends a request to this webhook URL containing the meeting ID. No manual trigger is needed — it fires automatically after every recorded call.
Step 2 — Code: Extract Meeting ID
The meeting ID is extracted from the incoming signal. Fireflies can send the payload in several different formats, so this step checks all possible locations and pulls the ID safely. If no meeting ID is present, the signal is marked as invalid.
Step 3 — IF: Valid Meeting ID?
This is the first gate check. If a valid meeting ID was found (YES path), the workflow moves forward to fetch the transcript. If the signal was invalid or empty (NO path), the workflow routes to 4. Set — Invalid Webhook Skip and stops cleanly without errors.
Step 4 — Set: Invalid Webhook Skip
This step handles the invalid signal case. It sets a brief message and the workflow ends here for that trigger.
Step 5 — Set: Config Values
Your Fireflies API key, ClickUp API token, ClickUp list ID, Telegram chat ID, your name, and company name are all stored here. The validated meeting ID from step 2 is also carried forward so the transcript fetch can use it directly.
Step 6 — HTTP: Fetch Transcript
A request is sent to the Fireflies API using your API key and the meeting ID. It retrieves the full transcript including all sentences with speaker labels and task flags, plus the AI-generated summary containing action items, overview, and keywords.
Step 7 — Code: Process Action Items
Action items are collected from two sources simultaneously: sentences that Fireflies NLP flagged as tasks, and the AI-generated action items list from the Fireflies summary. Both lists are combined, duplicates are removed, and the result is limited to 15 items. Meeting metadata (title, date, duration, participants, overview) is also extracted here. If no action items are found at all, a flag is set for the next gate check.
Step 8 — IF: Action Items Found?
This is the second gate check. If action items were found (YES path), the workflow continues to AI parsing. If no action items were detected or the transcript was not ready (NO path), the workflow routes to 9. Set — No Action Items Skip and ends cleanly.
Step 9 — Set: No Action Items Skip
This step handles the no-items case. It logs the meeting ID and a skip message, and the workflow ends here.
Step 10 — AI Agent: Parse Action Items
GPT-4o-mini receives the meeting context and the full list of raw action items. For each item it returns four structured fields: a clean verb-first task name (maximum 60 characters), the responsible owner extracted from the text (or "Unassigned" if not mentioned), a deadline in YYYY-MM-DD format with relative date logic built in (today, tomorrow, this week, next week), and a priority number from 1 (Urgent) to 4 (Low). Every input item must produce exactly one output task — no skipping.
Step 11 — OpenAI: GPT-4o-mini Model
This is the language model powering the parsing step. It runs at temperature 0.2 for precise, consistent structured output and is capped at 1,200 tokens to handle up to 15 tasks per meeting.
Step 12 — Parser: Structured Task Output
This step enforces the exact array schema GPT-4o-mini must return. It validates that every task has all four required fields in the correct format before the results move to ClickUp creation, preventing any malformed tasks from reaching your account.
Step 13 — Code: Split Tasks for Loop
The array of parsed tasks is converted into individual items — one per task — so each one can be sent to ClickUp separately. A deadline timestamp is calculated in milliseconds for the ClickUp API. A flag called isLastTask is set to true only on the final task in the list, which controls when the Telegram notification fires.
Step 14 — HTTP: Create ClickUp Task
For each task, a request is sent to the ClickUp API v2. The task is created in your specified list with the task name, a description that includes the meeting title, date, owner, and deadline, plus the priority level, due date, and a tag meeting-action-item applied automatically.
Step 15 — IF: All Tasks Created?
After each ClickUp task is created, this check reads the isLastTask flag. If it is true (YES path — this was the last task), the workflow moves to build the Telegram summary. If it is false (NO path — more tasks still exist), the workflow routes to 18. Set — Loop Continues and the loop proceeds to the next task.
Step 16 — Code: Build Telegram Summary
Once all tasks are created, a clean confirmation message is assembled. It includes the meeting title, date, total number of tasks created, and a reminder to review the tasks in ClickUp. Your company name is included in the footer.
Step 17 — Telegram: Send Task Summary
The confirmation message is sent to your Telegram chat ID. This fires exactly once per meeting — after all tasks are in ClickUp — not once per task.
Step 18 — Set: Loop Continues
This step handles the non-final tasks in the loop. It sets a brief in-progress message and the loop continues to the next task creation.
✅ Dual-source action item extraction — Combines Fireflies NLP task flags and the AI summary list for more complete coverage than either source alone
✅ Fires exactly once per meeting — The Telegram notification uses an isLastTask flag so you receive one clean summary, not one message per task
✅ Relative deadline logic built in — GPT understands "by Friday", "next week", and "tomorrow" and converts them to real dates automatically
✅ Three validation gates — Invalid webhooks, missing transcripts, and meetings with no action items all exit cleanly without errors or empty tasks
✅ Priority scoring per task — Every task is scored 1–4 (Urgent to Low) based on context so your ClickUp list is pre-sorted by importance
✅ Meeting reference in every task description — Each ClickUp task includes the meeting title, date, owner, and deadline so your team always knows where the task came from
✅ meeting-action-item tag auto-applied — Every task created by this workflow is tagged automatically so you can filter and report on meeting-sourced work in ClickUp
✅ Structured output enforced — A schema parser validates all four task fields before anything reaches ClickUp — no broken or incomplete tasks
Change the maximum task limit — In node 7. Code — Process Action Items, change .slice(0, 15) to a higher or lower number to control how many action items per meeting are sent to ClickUp.
Add tasks to different lists by meeting type — In node 5. Set — Config Values, add a second list ID (e.g. clickupSalesListId). Then add an IF check after step 7 that reads the meeting title — if it contains "sales" or "demo", route to the sales list; otherwise use the default list.
Send a Slack message instead of or alongside Telegram — After node 16. Code — Build Telegram Summary, add a Slack node using the same message text to also post the task summary to a #meetings channel for team visibility.
Add a Google Sheets log — After node 14. HTTP — Create ClickUp Task, add a Google Sheets append step to log each task: meeting title, task name, owner, deadline, priority, and ClickUp task ID — giving you a permanent record outside ClickUp.
Assign tasks to specific ClickUp users — In node 14. HTTP — Create ClickUp Task, add an assignees field to the JSON body containing ClickUp user IDs. Map owner names from step 13 to their ClickUp IDs using a lookup object in the code step.
Workflow not triggering when a call ends:
Fireflies API key error or empty transcript:
YOUR_FIREFLIES_API_KEY in node 5. Set — Config Values is replaced with your actual key — not the placeholder textClickUp tasks not being created:
YOUR_CLICKUP_API_TOKEN in node 5. Set — Config Values is your personal API token, not an OAuth token — get it from ClickUp avatar → Settings → AppsYOUR_CLICKUP_LIST_ID is the numeric ID from the list URL (after /li/), not the list nameTelegram message not arriving:
YOUR_TELEGRAM_CHAT_ID in node 5. Set — Config Values is your numeric chat ID — get it from @userinfobot in Telegram/start to your bot before the first message will be delivered — bots cannot initiate conversationsAI returning incomplete or wrongly formatted tasks:
Need help setting this up or want a custom version built for your team or agency?
📧 Email: [email protected]
🌐 Website: https://www.incrementors.com/