---
name: calendly-meetings-booked-this-week
description: "Every Friday afternoon: Calendly meetings booked this week by event type, with cancellations, no-shows and an 8-week trend. Use when the user asks for this, or when it runs on a schedule."
---

# Calendly meetings booked this week

Every Friday afternoon: Calendly meetings booked this week by event type, with cancellations, no-shows and an 8-week trend.

For a founder or a sales team, meetings booked is the earliest number in the funnel that a human chose: someone picked a time to talk to you. Calendly shows upcoming events, but not how many were booked this week, how many cancelled, or whether that is more than usual.

This skill counts bookings made this week from the Calendly API, splits them by event type, and adds the cancellations and the no-shows your team marked. Posted every Friday as a tile with eight weeks of history, it tells you whether outbound and the website are filling the calendar.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Calendly personal access token with read scopes for scheduled events and users, in `CALENDLY_ACCESS_TOKEN`; an organization admin's token to count the whole team.
- Or Calendly's MCP server (`https://mcp.calendly.com`, OAuth with the `mcp:scheduling:read` scope). It can also book and cancel meetings, so the skill calls its read tools only.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Find whose calendar to count** (Calendly): `GET /users/me` returns your user URI and `current_organization`. Use `user=<uri>` for yourself, or `organization=<uri>` (an admin token) for the whole team.
2. **List bookings made this week** (Calendly): `GET /scheduled_events?user=<uri>&min_start_time=<Monday 00:00>&max_start_time=<Monday plus 90 days>&count=100`, paging with `page_token`. The API filters by start time only, so keep events whose `created_at` falls this week, both active and canceled.
3. **Count cancellations** (Calendly): Repeat with `status=canceled` and count events whose `updated_at` is this week, which includes meetings booked in earlier weeks and canceled now.
4. **Count no-shows** (Calendly): For events that started this week, `GET /scheduled_events/{uuid}/invitees` and count invitees whose `no_show` is set. This only counts no-shows someone marked in Calendly.
5. **Post the tile**: Meetings booked is the headline with 8 weeks of history (backfill the first run week by week). Canceled, no-shows and meetings held go in the glance; bookings by event type open with the card.

## Route B: the browser

### What you need

- Signed in to Calendly; an owner or admin login is needed to count the whole team rather than one person.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://calendly.com/app/scheduled_events/user/me. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open Scheduled events**: The URL opens your own scheduled events; an owner or admin can switch the host filter to the whole team. Open **Upcoming**, set the date range from this Monday to 90 days out and keep the status filter on active events.
2. **Count bookings made this week**: Each event's details show when it was booked; keep the events created this Monday or later and count them by event type. For more than a few dozen, use **Export** on the same page: the CSV carries the creation time and event type of every booking and is quicker to filter.
3. **Count cancellations and no-shows**: Switch the status filter to **Canceled** and count events canceled this week, including meetings booked earlier. Then open **Past**, dates this Monday to today, and count the events marked **No-show** against the meetings held.
4. **Add the trend**: If the account has **Analytics** (paid plans), open it for the last 8 weeks for events created by week. Otherwise keep this week's count and compare with the number from last Friday's run.

Note: The list filters by when a meeting happens, not when it was booked, which is why the route reads 90 days ahead and checks each booking's creation time; the export makes this bearable. No-shows exist only when a host marked them. Analytics is not on the free plan.

## The report

- **Meetings booked** this week, with an 8-week trend.
- **Canceled** this week and **no-shows** among meetings held.
- **By event type**: discovery calls, demos and the rest.
- One line on the change against last week.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "calendly-meetings-booked-this-week/<date of this run, e.g. 2026-10-16>",
  "item_key": "calendly-meetings-booked-this-week",
  "project": "Acme",
  "source": "Calendly meetings booked this week skill",
  "kind": "metric",
  "title": "37 meetings booked this week, the most in 8 weeks",
  "metric": {
    "label": "Meetings booked",
    "value": 37,
    "better": "higher",
    "period_start": "<start of the period, ISO 8601>",
    "period_end": "<end of the period, ISO 8601>"
  },
  "glance": {
    "type": "Grid",
    "props": {
      "columns": 3
    },
    "children": [
      {
        "type": "Stat",
        "props": {
          "label": "Canceled",
          "value": 4,
          "better": "lower"
        }
      },
      {
        "type": "Stat",
        "props": {
          "label": "No-shows",
          "value": 2,
          "better": "lower"
        }
      },
      {
        "type": "Stat",
        "props": {
          "label": "Held",
          "value": 29
        }
      }
    ]
  },
  "widget": [
    {
      "type": "Bars",
      "props": {
        "items": [
          {
            "label": "Discovery call",
            "value": 21
          },
          {
            "label": "Product demo",
            "value": 11
          },
          {
            "label": "Onboarding",
            "value": 5
          }
        ],
        "unit": "booked"
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "Discovery calls up from 14 last week; 9 came from the new pricing page button.",
        "tone": "ok"
      }
    }
  ],
  "size": "md"
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

Set `period_start` and `period_end` to the window the number covers: the tile names it from them ("Last 7 days", "Today", "This month"). For a count right now (open items, a balance), send `"period_label": ""` so no period shows; for another name, send it as `period_label` (at most 24 characters).

## Run it on a schedule

Suggested: Fridays at 16:00 (`0 16 * * 5`). From cron, with the agent signed in on that machine:

```bash
0 16 * * 5 claude -p "Run the calendly-meetings-booked-this-week skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/calendly-meetings-booked-this-week#schedule

Source: https://briefkin.dev/skills/calendly-meetings-booked-this-week
