Booking Links
Create a personal scheduling page that prospects, candidates, or customers can use to book time with you directly.
A booking link is a public page (workestra.app/book/<slug>) where anyone can pick a meeting slot from your availability — without needing a Workestra account. It's the equivalent of a Calendly link, but the booking lands directly inside Workestra: the attendee becomes a CRM contact, the slot becomes a calendar event, and (optionally) a CRM deal is created in one step.
Screenshot needed — /book/<slug> page showing the slot picker
Event types
Every booking link is one of five types. Pick the type when you create the link — it determines how host availability is checked and how the meeting is assigned.
| Type | When to use it |
|---|---|
| One-on-one | The default. One host, one attendee. Slot is free when your calendar shows no conflicts |
| Round-robin | One URL shared across a team. Workestra picks the next available host in rotation, skipping anyone out-of-office or already booked. See Round-Robin |
| Collective | Multiple hosts must all be free at the same time — the slot only appears if every listed host is available. Good for panel interviews or design reviews |
| Group | One timeslot, multiple attendees. Set a capacity cap (e.g. 8 people) and the slot stays bookable until the cap is reached |
| Instant | No slot verification. The booking goes through immediately with a generated meeting URL. Good for urgent consultations where "anytime" is fine |
Creating a booking link
Path: /settings/booking-links → Create link.
Each link has these settings:
Identity
| Field | What it does |
|---|---|
| Title | Public-facing name, e.g. "30-minute intro call" |
| Description | Optional — shown on the public page above the slot picker |
| Slug | URL fragment (/book/<slug>). Auto-derived from the title; overrideable. Lowercase letters, numbers, dashes |
Availability rules
| Field | What it does |
|---|---|
| Duration | How long each slot is, in minutes (default 30, max 480) |
| Buffer before | Minutes blocked off before each meeting — keeps slots from butting up against the previous one |
| Buffer after | Minutes blocked off after each meeting |
| Min notice | Minimum hours ahead a slot must be — prevents same-day bookings if you don't want them |
| Max days ahead | How far in advance someone can book (default 30 days) |
| Timezone | The host's timezone — slot generation is computed against this. Auto-detected from your browser on first setup |
| Weekly hours | One or more time windows per weekday (09:00–12:00, 13:00–17:00). Days you don't enable are unavailable |
Calendar integration
| Field | What it does |
|---|---|
| Calendar provider | None, Google, or Microsoft. Picks which connected calendar to consult for free/busy and to write the confirmed event into. See Google Calendar and Microsoft 365 Calendar. |
| Auto-generate meeting link | When set, every confirmed booking gets a Google Meet (Google provider) or Microsoft Teams (Microsoft provider) link inserted into the event automatically |
CRM behavior
| Field | What it does |
|---|---|
| Auto-create deal | When a stranger books, a CRM contact is found-or-created, then a CRM deal is created and linked to the calendar event |
| Default deal stage | Stage the new deal lands in (e.g. "New leads") |
| Default deal value | Optional — pre-set monetary value on auto-created deals |
Notification mode
Two ways the attendee gets notified about the booking:
| Mode | What happens |
|---|---|
| Calendar invite (default) | A calendar invite goes out from the host's connected provider (Google or Microsoft). The attendee's email client renders it natively as a calendar object — they accept/decline like any meeting invite. |
| Email confirmation | A regular email is sent (no native calendar invite). An .ics attachment is included for them to add manually. |
Calendar invite mode is what most teams want. Email confirmation mode is useful when:
- The attendee uses a calendar tool the host's provider doesn't notify natively
- You want replies to go to a generic inbox instead of the host (combine with Use no-reply email below)
- You're sending bulk-confirmed bookings (e.g. a webinar) where every attendee getting a real calendar invite is too noisy
Reply-to behavior
| Toggle | Effect |
|---|---|
| Use no-reply email | All booking emails go from noreply@workestra.app (or your workspace's no-reply alias) instead of the host's email. Good for high-volume hosts who don't want booking emails generating reply traffic to their personal inbox. |
URL prefill on the booking page
The public booking page accepts URL parameters to pre-fill the form:
/book/<slug>?name=Alice%20Smith&email=alice@acme.com
/book/<slug>?a1=Acme%20Corp&a2=50-100| Param | What it pre-fills |
|---|---|
name | The attendee's name field |
email | The attendee's email field |
phone | The attendee's phone field (if the link has one) |
a<id> | The pre-meeting form answer for field <id> (e.g. a1 for the first field) |
Useful for outbound sequences ("here's a link with your details pre-filled") and for routing-form-driven flows (the routing form auto-passes answers as URL params to the destination link).
Guest CC
Toggle Allow invitee guests to let attendees cc additional email addresses on their booking. Up to 10 guests per booking. They're added as attendees on the calendar invite and cc'd on every confirmation/reminder/reschedule email.
Email verification (OTP)
Toggle Require email verification to make attendees prove they own the email they entered before the booking confirms. Workflow:
- Attendee picks a slot, fills the form, submits
- Booking lands as
pending_verification(no calendar event yet, no reminders enqueued) - A 6-digit code is emailed to them
- They enter the code on the same page; on success the booking flips to
confirmedand the standard post-booking flow runs
Codes expire after 15 minutes. Three failed attempts and the booking is cancelled.
This costs you a step but cuts no-shows from typo'd or fake email addresses.
Multiple confirmation CTAs
The confirmation page can show up to 5 call-to-action buttons after a successful booking. Configure under Booking page → Confirmation CTAs. Each CTA has a label and a URL. Common patterns:
- Visit pricing + Book another meeting + Download our deck
- Reply to confirmation email + Slack our team
Lock event-type to host's timezone
Toggle Lock event timezone. With it on, the booking page always displays times in the host's timezone — the attendee's local time is shown as a small footnote. Useful for in-person events where "5pm in NYC" is what matters, regardless of where the attendee is.
With it off (default), the booking page shows times in the attendee's auto-detected local timezone, with a dropdown to override.
Monthly booking cap
Beyond the daily and weekly caps, you can set a monthly cap — total bookings allowed per ISO calendar month. The slot engine refuses slots once the cap is reached, with the standard "no more times available" message.
Redirect after booking + variable passthrough
If you set Post-booking redirect URL, attendees are sent to that URL after confirming, instead of seeing the in-Workestra confirmation page. The URL can contain placeholders that get replaced at redirect time:
https://acme.com/thanks?event={{event_type_name}}&email={{invitee_email}}&utm_source={{utm_source}}All workflow {{variable}} names are supported (see Workflows). UTM parameters captured at booking time are passed through automatically.
Paid bookings
Toggle Require payment to book to gate the booking behind Stripe Checkout. See Paid Bookings for the full flow.
Sharing your link
Once the link is active, share https://workestra.app/book/<slug> anywhere — email signature, LinkedIn, your website, a button in an outbound sequence. There's a copy-to-clipboard button next to each link in the settings page.
If you'd rather embed the booking flow directly into your marketing site instead of linking out to Workestra, every booking link has a Share & Embed card on its settings page at /settings/booking-links/<id>. See Embed Widget for the full how-to.
The public page does not require authentication. Anyone with the URL can see your availability and book a slot, subject to your max-days-ahead and min-notice rules. The embed widget adds a per-link domain whitelist on top — useful if you want only specific sites to be able to iframe.
Offering multiple durations
If you want the attendee to choose how long the meeting is, enable Available durations and list the options in minutes (e.g. 30, 45, 60). The slot picker shows a duration selector above the calendar. When set, duration_minutes acts as the default if the attendee doesn't pick.
Disabling a link
Use the Active toggle on /settings/booking-links. While disabled:
- The public URL returns "this link is no longer active"
- Existing meetings already on it are unaffected
- Re-enabling restores the page instantly — same slug, same settings
Deleting a link
Permanent. Existing meetings booked on it remain in your calendar (they're full rows in scheduling_calendar_events, not derived data), but the public page returns 404 and the slug becomes available for reuse.
Behind the scenes
When someone books a slot, Workestra:
- Re-computes availability for the exact requested slot (race-condition guard — if two people clicked at the same time, only one wins)
- Validates the pre-meeting form, if you've enabled one
- Picks the host (you for personal links, the next rep in rotation for round-robin)
- Creates a CRM contact (find-or-create by email) and optionally a CRM deal
- If Google Calendar is connected: creates the calendar event with the attendee invited, plus a Meet link if you've enabled that
- Sends a confirmation email to the attendee with an
.icscalendar attachment - Sends a notification email to you, the host, with the same
.ics - Schedules the 24h-out reminder
If any non-essential step fails (e.g. Google Calendar is rate-limited, or CRM deal creation hits a snag), the booking itself still succeeds — the failure is logged but doesn't bubble up to the attendee.
Read next
- Round-Robin — share one link across a team
- Schedules — multi-link availability shared via a
schedule_id - Pre-Meeting Forms — gate the slot behind form fields
- Workflows — automate reminders, reconfirmation, follow-ups
- Paid Bookings — Stripe Checkout integration
- Routing Forms — route different audiences to the right link automatically
- Embed Widget — embed the booking flow on your own site
- Availability Bridges — PTO, FSM, focus blocks feed slot computation
- Calendar Dashboard — see everything booked across all your links