Skip to content

On a schedule

Get weekly Calendly booking numbers

Each Monday you see last week's bookings, cancellations and no-show rate for each event type, compared with the week before.

Runs
On a schedule
Apps
Calendly
AI
Not needed
Access
PAT (read)

Send this to your assistant

Create a ClickRuntime automation: every Monday at 8am, email me last week's Calendly bookings, cancellations and no-show rate for each event type, compared with the week before.

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 sales lead or practice manager who relies on Calendly rarely has a clear weekly picture. Are demo bookings rising or sliding? Is one event type, say the 15-minute intro, attracting cancellations while the 45-minute consultation holds steady? Without a regular count, the answers come from impressions formed during a busy week, and a drop in bookings can run for a month before anyone puts a number on it.

Each Monday, ClickRuntime pulls last week's Calendly events, active and canceled, counts them by event type, adds up the no-shows and compares the totals with the week before using figures kept in state. It then emails one compact summary, so the trend arrives alongside the numbers.

Founders, team leads and clinic managers who want a weekly pulse on scheduling, without building a report, use it.

What you get out of it

  • Declining demand shows up in weeks, not quarters

    A booking count that falls two Mondays in a row is hard to ignore. Seeing the trend that early gives the team time to adjust outreach, ads or the booking page before the pipeline thins out.

  • Event types can be judged on their own

    Splitting bookings by event type shows which meetings people actually want. If the long consultation books well while the short intro fades, you know where to focus your promotion and where to rethink the offer.

  • Cancellations are measured, not guessed

    Counting canceled events each week shows whether last-minute drops are becoming common. A clear number supports decisions such as sending an extra reminder or requiring a short note when someone cancels.

  • No-show rate becomes a tracked figure

    Adding up no-shows alongside bookings gives you a rate you can watch. When it climbs, you can test a different reminder timing and then see in the next Monday email whether it worked.

  • Week-on-week comparison is built in

    Because last week's totals are kept in state, each email reports the change automatically. Nobody has to dig up an old spreadsheet to see whether Tuesday's launch actually moved anything.

How it works

What happens, step by step

  1. Every Monday at 8:00, ClickRuntime pulls last week's Calendly meetings, including the cancelled ones.

  2. For each event type it counts bookings, cancellations and no-shows, and works out the no-show rate.

  3. It compares the bookings with the week before, which it saved last Monday.

  4. You get one email with a line per event type, such as "Product demo: 14 booked (last week 11), 2 cancelled, 7% no-show".

Before it runs live

  • Connect Calendly

What you get

RunsOn a schedule
Get weekly Calendly booking numberstoday, 9:00Succeeded
Email · Calendly bookings last weekProduct demo: 14 booked (last week 11), 2 canceled, 7% no-show Intro call: 9 booked (last week 10), 1 canceled, 0% no-show

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

  • Run it at a different time, more or less often, or only on weekdays
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Calendly 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.
weekly_booking_stats.pyexample
from collections import Counter
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, state, notify

API = "https://api.calendly.com"

@on_trigger
def run(event):
    h = {"Authorization": f"Bearer {credentials.secret('CALENDLY_TOKEN')}"}
    me = http.get(f"{API}/users/me", headers=h).json()["resource"]["uri"]
    end = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0)
    params = {"user": me, "count": 100, "min_start_time": (end - timedelta(days=7)).isoformat(), "max_start_time": end.isoformat()}
    booked, canceled, no_shows = Counter(), Counter(), Counter()
    for status, counter in (("active", booked), ("canceled", canceled)):
        for ev in http.get(f"{API}/scheduled_events", headers=h, params={**params, "status": status}).json()["collection"]:
            counter[ev["name"]] += 1
            if status == "active":
                uuid = ev["uri"].rsplit("/", 1)[-1]
                invs = http.get(f"{API}/scheduled_events/{uuid}/invitees", headers=h).json()["collection"]
                no_shows[ev["name"]] += sum(1 for i in invs if i.get("no_show"))
    last = state.get("last_week") or {}
    lines = [f"{n}: {booked[n]} booked (last week {last.get(n, 0)}), {canceled[n]} canceled, "
             f"{no_shows[n] / booked[n]:.0%} no-show" if booked[n] else f"{n}: 0 booked, {canceled[n]} canceled"
             for n in sorted(set(booked) | set(canceled))]
    state.set("last_week", dict(booked))
    notify.email_me("Calendly bookings last week", "\n".join(lines) or "No bookings.")
    return {"booked": sum(booked.values())}

FAQ

Common questions

Does it count canceled events in the totals?
It lists both active and canceled events for the week and counts them separately, so you can see bookings, cancellations and no-shows side by side. Canceled events are not mixed into the active count, which keeps booking numbers honest.
How are no-shows counted?
No-shows come from the invitee records Calendly keeps for each event, where hosts or automations mark an invitee as a no-show. If no-shows are not marked in Calendly, they cannot appear in the report, so marking them consistently matters.
What happens the first week, before there is anything to compare with?
The first email reports the totals without a comparison, since no earlier figures exist yet. From the second Monday on, each email compares with the week before, using the numbers saved at the end of each run.
What permissions does it need?
PAT (read). Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (on a schedule). Checks that find nothing to do and stop right away aren't counted.
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 “Get weekly Calendly booking numbers” from your assistant

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