---
title: "Meetings"
description: "Calendly / Cal.com scheduling, booking links, and the meetings timeline."
icon: Calendar
---

Meetings are booked calls treated as a first-class part of your pipeline. When a prospect books a call with you, that call shows up in Warmbly automatically, lands on the contact's timeline, and can trigger automations like a Slack ping or a CRM update. You can also log calls yourself, without any external scheduler.

There are two ways a meeting gets into Warmbly:

- **Auto**: a prospect self-books a time through a Calendly or Cal.com link you connected. The booking, and any later reschedule or cancellation, is captured over that provider's webhook.
- **Manual**: you schedule or log a call yourself with the "New meeting" button. It is created instantly inside Warmbly with no redirect to an external site.

Either way, the meeting appears on the **Meetings** page and on the contact's timeline, live, without a refresh.

## The Meetings page

The Meetings page lists every booked or logged call. Open it from the CRM section of the dashboard. It updates in real time: when a call is booked, rescheduled, or canceled, the list and the headline numbers change on their own.

### Headline numbers

Four counts sit at the top of the page, computed across your whole set of meetings (not just the rows currently loaded):

- **Upcoming**: calls scheduled for a future time.
- **Today**: calls scheduled for today.
- **Total booked**: every meeting on record.
- **Canceled**: meetings that have been canceled.

### Filtering and search

Use the timeframe tabs to narrow the list:

- **Upcoming**: future calls only.
- **Past**: calls that have already happened.
- **All**: everything.

The search box matches a contact's name, email, or the event name. The list loads more rows as you scroll, so large pipelines stay fast.

### Reading a row

Each row shows when the call is scheduled, who it is with (the contact name, falling back to the invitee name or email), the meeting name and location, where it came from (`Manual`, `Calendly`, or `Cal.com`), and a status:

| Status | Meaning |
| --- | --- |
| Booked | The call has been scheduled. |
| Rescheduled | The invitee moved the call to a new time. |
| Canceled | The call was canceled. |
| Completed | The call has taken place. |
| No-show | The invitee did not attend. |

### Row actions

Depending on the meeting, a row offers:

- **Add to your calendar** opens a Google Calendar template or downloads an `.ics` file you can import into any calendar app. This is built locally and needs no calendar connection.
- **Join call** opens the meeting link (for example a Google Meet or Zoom URL) in a new tab.
- **Reschedule** and **Cancel** open the provider's own reschedule or cancel page for calls booked through Calendly or Cal.com.
- **Delete** removes a manually created meeting. This only removes it from Warmbly.

<Callout type="info" title="Reschedule and cancel happen on the provider">
For auto-booked calls, the Reschedule and Cancel buttons hand off to Calendly or Cal.com. Warmbly does not move or cancel the call itself; it reflects the change once the provider sends the webhook back.
</Callout>

## Logging a call manually

Click **New meeting** to log a call without an external scheduler. The dialog asks for:

- **Title**: for example "Discovery call". Defaults to "Call" if left blank.
- **Contact name** and **Contact email**. You need at least one of the two.
- **When**: date and time. Defaults to the next hour.
- **Duration** in minutes (`5` to `480`, default `30`).
- **Location** (optional) for example an office or phone.
- **Meeting link** (optional) for example a Google Meet URL.

Warmbly links the meeting to a contact by matching the email you enter against your contacts. When you open the dialog from a place where a contact is already in view, the meeting is locked to that exact contact so attribution is precise.

## Connecting Calendly or Cal.com

Connect a scheduling provider so calls prospects book land in Warmbly automatically. Both providers connect the same way, from the **Integrations** page (reachable from the Meetings page via the **Calendars** action).

Connecting is webhook-based, not OAuth:

1. Add the **Calendly** or **Cal.com** integration. Warmbly mints an inbound webhook URL for you.
2. Copy that URL into the provider's webhook settings:
   - **Calendly**: subscribe to `invitee.created` and `invitee.canceled`.
   - **Cal.com**: subscribe to `BOOKING_CREATED`, `BOOKING_RESCHEDULED`, and `BOOKING_CANCELLED`.
3. That is it. The connection shows as connected as soon as the inbound URL exists.

<Callout type="info" title="The inbound URL is a shared secret">
The minted URL contains a long random secret that authenticates incoming bookings, so treat it like a credential. If it is ever exposed, you can rotate it from the connection settings, which generates a fresh URL you then re-paste into the provider.
</Callout>

### Lifecycle events

Once connected, Warmbly turns each provider event into a meeting state change:

| What the prospect does | Warmbly status | Lifecycle event |
| --- | --- | --- |
| Books a new time | Booked | `booked` |
| Moves the call to a new time | Rescheduled | `rescheduled` |
| Cancels the call | Canceled | `canceled` |

Calendly models a reschedule as a cancel of the old slot plus a new booking. Warmbly understands this and shows it as a single **Rescheduled** event rather than a separate cancellation, so your timeline stays clean.

Inbound bookings are idempotent: if a provider re-delivers the same event, Warmbly updates the existing meeting instead of creating a duplicate.

### How a booking is matched to a contact

When a booking arrives, Warmbly attributes it to the right contact in this order:

1. **By contact hint**: if the booking link carried a contact id (see [booking links](#booking-links-and-book-a-call) below), Warmbly uses it, after confirming that contact belongs to your workspace. This survives the prospect booking with a different email.
2. **By email**: otherwise it matches the invitee's email against your contacts.

If neither resolves, the meeting still appears on the Meetings page; it just is not tied to a contact yet.

## The contact timeline

Every meeting also appears on the contact's activity timeline, alongside emails, replies, and notes. You can filter the timeline down to **Meetings** to see only calls.

Each meeting entry shows what happened (booked, rescheduled, or canceled), when the call is set for, which calendar it came from, and a one-click **Join** link when a meeting URL is available and the call is not canceled. Canceled meetings show the cancellation reason when the provider includes one.

This pairs well with the [Unibox](/guides/unibox) and [Contacts and CRM](/guides/contacts-crm) views: a reply and the call it produced sit on the same record.

## Booking links and "Book a call"

A booking link is your public scheduling page (your Calendly or Cal.com URL). Once you save it on the connection, Warmbly surfaces contextual **Book a call** and **Booking link** buttons wherever a contact is in view, so you can offer a time without leaving the dashboard.

Set it under the connection's **Booking link** settings: paste your full `https://` scheduling URL, for example `https://calendly.com/you/intro`. After that:

- A **Book a call** / **Booking link** button appears on contact detail and Unibox threads. It opens your scheduling page in a new tab, prefilled with the contact's email and name. If you have several scheduling links connected, it offers a picker.
- A **Booking link** button in the [Unibox](/guides/unibox) reply composer drops the link, prefilled for the recipient, straight into your reply text.

When you book from a place tied to a specific contact, Warmbly embeds that contact's id in the link (as the `utm_content` parameter). Both providers echo it back in the booking webhook, which is what lets a self-booked call attribute to the exact contact even if they book under a different email address.

<Callout type="info" title="No saved link, no button">
The Book a call and Booking link buttons only render when you have a connected scheduling provider with a saved booking link, so they never show up as dead buttons.
</Callout>

## Automations when a meeting is booked

Meeting events can drive [Automations](/guides/automations). Calendly and Cal.com both emit meeting events you can wire to actions, and other connected tools can react to them too:

- **Meeting booked**, **rescheduled**, and **canceled** are available as notification triggers, so Slack, Discord, Zapier, Make, and n8n can ping your team the moment a call is set, moved, or dropped.
- **Meeting booked** and **canceled** are available as CRM triggers, so HubSpot, Salesforce, Pipedrive, and Close can create or update a record when a call is booked.

For example, you can have Warmbly post "Meeting booked" to a Slack channel and upsert the contact into your CRM, automatically, every time a prospect books a call. See [Notifications](/guides/notifications) for routing alerts to people, and [Automations](/guides/automations) for building the flows.

## Related

<Cards>
  <Card title="Automations" href="/guides/automations" />
  <Card title="Contacts and CRM" href="/guides/contacts-crm" />
  <Card title="Unibox" href="/guides/unibox" />
  <Card title="Notifications" href="/guides/notifications" />
</Cards>
