AutomationFlowsAI & RAG › Auto-follow-up for Canceled Calendly Meetings with Gpt-4, Loom & Asana

Auto-follow-up for Canceled Calendly Meetings with Gpt-4, Loom & Asana

ByJames Carter @arioloop on n8n.io

Ideal for B2B consultants, agencies, and sales teams who want to salvage missed opportunities and stay top-of-mind with prospects after no-shows.

Event trigger★★★★☆ complexityAI-powered16 nodesCalendly TriggerOpenAIGmailAsana
AI & RAG Trigger: Event Nodes: 16 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Gmail → OpenAI 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": "gRYLffc4P6MCj1nq",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "002_ Loom Follow Up After Missed Meetings",
  "tags": [],
  "nodes": [
    {
      "id": "b64fc7c9-49c3-4b15-bf7f-4af5c85ccfba",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        912,
        -464
      ],
      "parameters": {
        "width": 448,
        "height": 1008,
        "content": "## \ud83d\udce9 Auto-Follow Up After Missed Meetings\n\nThis workflow detects canceled meetings from Calendly, generates a personalized Loom follow-up email with GPT, and creates a task in Asana to ensure leads are never lost.\n\t\u2022\tGPT writes a friendly follow-up message tailored to the invitee.\n\t\u2022\tA Loom link is inserted into the email for a personal touch.\n\t\u2022\tAn Asana task is created so your team can follow up manually if needed.\n\n### Who it\u2019s for\n\t\u2022\tB2B consultants, agencies, and founders who book calls via Calendly.\n\t\u2022\tSales teams who want to automate lead recovery from no-shows.\n\t\u2022\tAnyone who wants to turn cancellations into conversations.\n\n### How to Set Up\n\t1.\tCreate a Calendly webhook for the invitee.canceled event.\n\t2.\tAdd your OpenAI, Gmail, and Asana credentials in n8n.\n\t3.\tCustomize the GPT prompt in the Message a Model node.\n\t4.\tPaste your Loom link into the Loom Link node.\n\t5.\tSet your Asana assignee and project in the Create Task node.\n\n### Requirements\n\t\u2022\tCalendly (for webhooks)\n\t\u2022\tOpenAI API Key\n\t\u2022\tGmail account (OAuth)\n\t\u2022\tAsana account with project access\n\n### How to Customize\n\t\u2022\tUpdate the GPT prompt tone or call-to-action.\n\t\u2022\tAutomate the Loom link generation via API or AI later.\n\t\u2022\tAdd a Slack notification node for internal visibility.\n\n**Need Help?**\n\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)."
      },
      "typeVersion": 1
    },
    {
      "id": "5bfb5129-2770-463f-9a91-4a4c9b555116",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        -512
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 304,
        "content": "## \u2699\ufe0f Workflow Breakdown  \n1. **Calendly Webhook Trigger:** Fires when a user cancels a scheduled event.  \n2. **Edit Fields:** Extracts name, email, event type, and reason from the webhook.  \n3. **GPT Message Generator:** Uses OpenAI to draft a personalized follow-up message.  \n4. **Loom Link Injection:** Adds your pre-recorded Loom video URL to the output.  \n5. **Merge:** Combines GPT message with user details and Loom link.  \n6. **Send Gmail Message:** Sends the tailored follow-up via Gmail.  \n7. **Create Asana Task:** Logs the missed call and Loom link for manual follow-up."
      },
      "typeVersion": 1
    },
    {
      "id": "59bc495c-ded1-420d-b003-b68dd2a18ece",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        -448
      ],
      "parameters": {
        "color": 4,
        "width": 480,
        "height": 192,
        "content": "## \ud83c\udfa5 Demo Video  \n\ud83d\udc49 **[Click here to watch the setup guide](https://www.loom.com/share/c3ea85bbb00c4640917983d3dba9a5ec?sid=ed62e4c9-9e3d-486e-a40c-e2056320b5ef)**  "
      },
      "typeVersion": 1
    },
    {
      "id": "ef243f1b-89f0-43d4-a70d-4143591cb141",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1424,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Calendly Trigger\n[Read more about Calendly Credentials](https://docs.n8n.io/integrations/builtin/credentials/calendly/)\n\nStarts the workflow when someone cancels a meeting.\nOnly runs when a scheduled call is canceled.. no extra filters needed.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d0c3256a-6f48-4ad1-85a6-144baf939337",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1920,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Edit Node\n[Read more about Edit Node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/)\n\nPulls out the important info from the canceled meeting:\n\u2022 Type of meeting\n\u2022 Name and email of the person\n\u2022 Date and time\n\u2022 Reason for canceling\n\n\n\n\n\n\n\n\n\n\n\n\n\nThis step helps keep everything simple and easy to use later.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3972b672-9fa8-49f8-b9ab-c0faf2481f67",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2432,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Write Message with AI\n[Read more about Chat Model node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/)\n\nUses AI to write a personal message for the person who canceled.\nThe message:\n\u2022 Says it\u2019s okay they canceled\n\u2022 Summarizes what the call was about\n\u2022 Offers to reschedule\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9220ee04-df37-4a36-892a-58602ea67ce9",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2944,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 832,
        "height": 416,
        "content": "## Add Video Link & Finalize Message\nThis step adds your Loom video to the AI-written message, then combines everything into one complete email.\n\nIt takes:\n\t\u2022\tThe custom message written by AI\n\t\u2022\tThe Loom video link you provided\n\t\u2022\tThe person\u2019s name and email\n\nAnd merges them into a single, ready-to-send message.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7e37e529-767f-4846-ae83-6eb74ed8ca9a",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3888,
        -432
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Send Email with Gmail\n[Read more about Gmail node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/)\n\nSends the follow-up email using your Gmail account.\nIt includes the message, subject line, and Loom video.\n\nMake sure your Gmail is connected first.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "389d8b13-e996-42ad-9032-4db56eb8e1f5",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3888,
        32
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 464,
        "content": "## Create Task in Asana\n[Read more about Asana node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.asana/)\n\nMakes a task in Asana to remind your team to follow up.\nThe task includes:\n\u2022 Name of the person\n\u2022 A note that an email was sent\n\u2022 Link to the Loom video\n\nIt also assigns the task to your teammate and adds it to a project."
      },
      "typeVersion": 1
    },
    {
      "id": "75c3e26b-34b6-40d1-8725-983975a628c1",
      "name": "Trigger on Meeting Cancellation",
      "type": "n8n-nodes-base.calendlyTrigger",
      "position": [
        1568,
        48
      ],
      "parameters": {
        "events": [
          "invitee.canceled"
        ]
      },
      "typeVersion": 1
    },
    {
      "id": "9837aba5-f367-417d-bb77-e218669efa23",
      "name": "Extract Meeting Info",
      "type": "n8n-nodes-base.set",
      "position": [
        2064,
        48
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"event\": \"invitee.canceled\",\n  \"payload\": {\n    \"event_type\": {\n      \"name\": \"Discovery Call\"\n    },\n    \"scheduled_event\": {\n      \"start_time\": \"2025-07-23T14:00:00Z\"\n    },\n    \"cancel_reason\": \"Something came up\",\n    \"invitee\": {\n      \"name\": \"Sarah Johnson\",\n      \"email\": \"user@example.com\"\n    }\n  }\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "5c1c2c96-fb1f-4bb0-b3b6-f1b4821e5fd3",
      "name": "Write Follow-Up Message (GPT)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2528,
        112
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "=You are a helpful assistant that writes friendly, casual emails in a warm and natural tone.\n\nWrite only the email body \u2014 do not include a subject line or greeting like \u201cSubject:\u201d\nUse this context: [insert payload here]"
            },
            {
              "content": "=Write a short, friendly follow-up email for someone who just canceled our scheduled meeting. Their name is {{ $json[\"payload\"][\"invitee\"][\"name\"] }}.\n\nKeep the tone casual and warm.\n\nLet them know it\u2019s totally fine, but you recorded a quick Loom video in case they still want to check it out. End with a light invitation to reschedule if they\u2019d like."
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "5526f0d0-3edf-4941-993b-af89a131630a",
      "name": "Add Loom Video URL",
      "type": "n8n-nodes-base.set",
      "position": [
        3104,
        112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b9bf2ffb-d054-45e5-beaf-fec53279aa2f",
              "name": "loom_link",
              "type": "string",
              "value": "https://www.loom.com/share/970a3fba1ed44352a2194f1ef6a8dc45"
            },
            {
              "id": "244e1c42-e468-44d0-8b8a-8564e33e6633",
              "name": "subject",
              "type": "string",
              "value": "Sorry we missed each other \u2014 here\u2019s a quick video"
            },
            {
              "id": "13ce91ca-e10f-43cc-8342-e7c1b6d4fcd9",
              "name": "email_body",
              "type": "string",
              "value": "={{ $json[\"message\"][\"content\"] + \"\\n\\nWatch here: https://www.loom.com/share/970a3fba1ed44352a2194f1ef6a8dc45\" }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "8c7d279f-8040-472c-aa6f-4706a61450cd",
      "name": "Merge Message & Video",
      "type": "n8n-nodes-base.merge",
      "position": [
        3520,
        32
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "0465ac4e-59b9-41eb-977c-db1c5c2262c8",
      "name": "Send Email with Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        4032,
        -208
      ],
      "parameters": {
        "sendTo": "={{ $json[\"payload\"][\"invitee\"][\"email\"] }}",
        "message": "={{ $json.email_body }}",
        "options": {},
        "subject": "={{ $json.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "445db016-07b9-49a8-a4de-a7057291c75f",
      "name": "Create Task in Asana",
      "type": "n8n-nodes-base.asana",
      "position": [
        4048,
        304
      ],
      "parameters": {
        "name": "=Follow-up with {{ $json.payload.invitee.name }} after missed call",
        "workspace": "1210873801747271",
        "authentication": "oAuth2",
        "otherProperties": {
          "notes": "=Missed meeting with {{ $json.payload.invitee.name }}.\nEmail sent with this Loom: {{ $json.loom_link }}",
          "assignee": "1210873801747258",
          "projects": [
            "1210873956748877"
          ]
        }
      },
      "credentials": {
        "asanaOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "04eef1f8-925b-4a4f-bbcb-e48028aed5cc",
  "connections": {
    "Add Loom Video URL": {
      "main": [
        [
          {
            "node": "Merge Message & Video",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Create Task in Asana": {
      "main": [
        []
      ]
    },
    "Extract Meeting Info": {
      "main": [
        [
          {
            "node": "Write Follow-Up Message (GPT)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Message & Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Message & Video": {
      "main": [
        [
          {
            "node": "Send Email with Gmail",
            "type": "main",
            "index": 0
          },
          {
            "node": "Create Task in Asana",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email with Gmail": {
      "main": [
        []
      ]
    },
    "Write Follow-Up Message (GPT)": {
      "main": [
        [
          {
            "node": "Add Loom Video URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger on Meeting Cancellation": {
      "main": [
        [
          {
            "node": "Extract Meeting Info",
            "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

Ideal for B2B consultants, agencies, and sales teams who want to salvage missed opportunities and stay top-of-mind with prospects after no-shows.

Source: https://n8n.io/workflows/6386/ — 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

Categories: Sales Automation, AI Proposals, Revenue Ops

OpenAI, HTTP Request, Google Drive +4
AI & RAG

This intelligent email automation workflow helps you maximize engagement through domain-based outreach. It utilizes AI-powered personalization and strategic follow-ups to increase response rates. The

Gmail, HTTP Request, Google Sheets +1
AI & RAG

Complete AI-powered sales system Automates lead capture, qualification, and follow-up from multiple channels. AI INTELLIGENCE:

Gmail Trigger, Google Sheets, OpenAI +3
AI & RAG

An automated quote generation system that monitors your inbox, classifies quote requests using AI, calculates intelligent pricing based on historical data, and provides a professional dashboard for re

Gmail Trigger, OpenAI, Supabase +2
AI & RAG

Send a target niche and location via Telegram message Workflow discovers businesses via Google Maps API AI enriches contacts with email and LinkedIn data via Serper GPT-4o scores and qualifies each le

Telegram Trigger, OpenAI, Google Sheets +3