Skip to content

The moment it happens

Follow up on canceled meetings automatically

When someone cancels a booked meeting, they get a friendly email inviting them to reschedule and you get an Asana task to follow up.

Runs
The moment it happens
Apps
Asana, Gmail
AI
Optional
Access
gmail.send; Asana write

Send this to your assistant

Create a ClickRuntime automation: when Calendly reports a cancellation, send the invitee a friendly reschedule email from my Gmail and create an Asana follow-up task due in two days.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A consultant books discovery calls through Calendly. When a prospect cancels, the slot simply disappears from her calendar. Unless she notices and writes to them, the lead goes cold, and a cancellation that was really just a busy week turns into a lost client.

A prompt, personal note asking to find a new time catches people while they still intend to talk, and an Asana task makes sure she checks back if they do not reply.

What you get out of it

  • Cancellations stop being lost leads

    Most people who cancel still want the meeting, just not at that time. A quick reschedule link brings many of them back.

  • The reply goes out while it matters

    The email is sent minutes after the cancellation. A same-day note feels attentive, while one a week later feels like an afterthought.

  • A reminder if they go quiet

    The Asana task due in two days means a non-reply gets a second look. Nobody has to remember which cancellations are still open.

  • Sent from your own address

    The email comes from your Gmail, so replies land in your inbox like any other conversation. It reads as a note from you, not a system message.

How it works

What happens, step by step

  1. Calendly tells ClickRuntime the moment an invitee cancels a meeting.

  2. A short reschedule email is written, personalised with AI when available, otherwise from your template.

  3. The email is sent to the invitee from your Gmail with your booking link.

  4. An Asana task to follow up is created in your chosen project, due in two days.

Before it runs live

  • Connect Asana
  • Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Follow up on canceled meetings automaticallyjust nowSucceeded
Asana · Sales follow-upsFollow up: Priya (Northwind) canceled. Due in 2 days. Reason: travelling this week.

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Change what the AI looks for, or how it writes the result
  • Add another app, for example also send it to Slack
  • Combine it with other Asana and Gmail steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
follow_up_canceled_meetings.pyexample
import base64
from datetime import date, timedelta
from email.mime.text import MIMEText
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_event, credentials, http, ai

BOOKING_URL = "https://calendly.com/your-link"
PROJECT_GID = "your-asana-project-gid"

@on_event
def handle(event):
    p = (event.json or {}).get("payload", {})
    name, email, reason = p.get("name", "there"), p.get("email"), (p.get("cancellation") or {}).get("reason", "")
    text = f"Hi {name},\n\nSorry we missed each other. If you'd still like to talk, pick a new time here: {BOOKING_URL}\n"
    try:
        text = ai.generate(f"Write a short, warm reschedule email to {name}. Reason given: {reason[:300]}. Include {BOOKING_URL}.", max_output_tokens=200).text
    except ai.AIError:
        pass
    msg = MIMEText(text)
    msg["To"], msg["Subject"] = email, "Shall we find another time?"
    gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    gmail.users().messages().send(userId="me", body={"raw": base64.urlsafe_b64encode(msg.as_bytes()).decode()}).execute()
    due = (date.today() + timedelta(days=2)).isoformat()
    http.post("https://app.asana.com/api/1.0/tasks", headers={"Authorization": f"Bearer {credentials.connection('asana', 'work')}"},
              json={"data": {"name": f"Follow up: {name} canceled", "notes": f"{email}\nReason: {reason}", "projects": [PROJECT_GID], "due_on": due}})
    return {"emailed": bool(email)}

FAQ

Common questions

Does this need a paid Calendly plan?
Calendly only sends cancellation webhooks on its paid plans. On a free Calendly plan you would need another way to send the cancellation to your automation's link.
What does the email say?
A short, friendly note that mentions the meeting they canceled and includes your booking link. AI can personalise it using the reason they gave, and a fixed template is used otherwise.
Who is the Asana task assigned to?
To you by default, in the project you choose. The task includes the invitee's name, email, the canceled time and any reason they gave.
What permissions does it need?
gmail.send; Asana write. Nothing else in your accounts is used.
Does it need AI?
No, but you can ask for an AI step (for example a summary). It then uses ClickRuntime's built-in AI allowance.
How many runs does it use?
One run for each event the app sends.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Follow up on canceled meetings automatically” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.