What it does
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.
How it works
1Find whose calendar to count
GET /users/mereturns your user URI andcurrent_organization. Useuser=<uri>for yourself, ororganization=<uri>(an admin token) for the whole team.2List bookings made this week
GET /scheduled_events?user=<uri>&min_start_time=<Monday 00:00>&max_start_time=<Monday plus 90 days>&count=100, paging withpage_token. The API filters by start time only, so keep events whosecreated_atfalls this week, both active and canceled.3Count cancellations
Repeat with
status=canceledand count events whoseupdated_atis this week, which includes meetings booked in earlier weeks and canceled now.4Count no-shows
For events that started this week,
GET /scheduled_events/{uuid}/inviteesand count invitees whoseno_showis set. This only counts no-shows someone marked in Calendly.- 5
5Post 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.
Post it to the board
With
BRIEFKIN_TOKENset, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Install and run it
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
Install the skill
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shell
curl -fsSL https://briefkin.dev/skills/calendly-meetings-booked-this-week/install | shRun it
Ask Claude Code:
prompt
Run the calendly-meetings-booked-this-week skillOr paste the prompt instead of installing:
prompt
Using the Calendly API v2, count the meetings booked this week (Monday to now) on my calendar. List scheduled events with min_start_time this Monday and max_start_time 90 days later, active and canceled, and keep those whose created_at is this week, since the API filters by start time only. Count events canceled this week (status canceled, updated_at this week), and for events that started this week, count invitees marked as no-shows. Give me meetings booked with the change on last week, canceled, no-shows, meetings held, and bookings by event type.Put it on a schedule
Fridays at 16:00, from cron on any machine where Claude Code is signed in:
crontab
0 16 * * 5 claude -p "Run the calendly-meetings-booked-this-week skill"Add it with
crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.Send it to your board
Connect Briefkin once with
curl -fsSL https://briefkin.dev/install | shand every run lands on your board as a stat tile. How setup works
View the SKILL.mdRaw file
SKILL.md---
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
What your agent needs
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 themcp:scheduling:readscope). It can also book and cancel meetings, so the skill calls its read tools only.
Connecting Calendly
- Calendly MCP server, hosted by Calendly at
https://mcp.calendly.com. It signs in with OAuth and dynamic client registration and doesn't accept personal access tokens, so use a client that supports that flow, such as Claude Code (claude mcp add --transport http calendly https://mcp.calendly.com), Codex or Cursor. Its tools map to API v2 and include writes such as booking and canceling (docs). - API v2 with a personal access token. In Calendly, open Integrations > API & Webhooks and generate a token, choosing the scopes it needs as you create it. Store it in
CALENDLY_ACCESS_TOKENand send it as a Bearer token.
Give the token read-only scopes for scheduled events, event types and users. The MCP server can book and cancel meetings, so approve its write calls yourself or keep it for interactive use.
Questions
Why read 90 days of upcoming events to count one week of bookings?
Calendly's list endpoint filters by when a meeting starts, not when it was booked. A meeting booked on Tuesday may be for three weeks later, so the skill reads the coming 90 days and keeps the ones created this week. Bookings further out than that are rare.
Why are no-shows so low?
Calendly only knows about a no-show when the host marks it on the event. If your team does not mark them, the number stays at zero. A habit of marking no-shows the same day makes this line, and your show rate, meaningful.
Do I need Briefkin to use the Calendly meetings booked this week skill?
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a stat tile, so you can glance at it instead of asking again.
Which agents can run it?
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Can it work without an API or MCP server, from my browser?
Yes. Switch the data source to "Your browser" and the steps change to the Calendly pages themselves: the agent opens calendly.com/app/scheduled_events/user/me in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.