WorkestraDocs
PlatformCalendar & Scheduling

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.

Public booking page

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.

TypeWhen to use it
One-on-oneThe default. One host, one attendee. Slot is free when your calendar shows no conflicts
Round-robinOne URL shared across a team. Workestra picks the next available host in rotation, skipping anyone out-of-office or already booked. See Round-Robin
CollectiveMultiple 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
GroupOne timeslot, multiple attendees. Set a capacity cap (e.g. 8 people) and the slot stays bookable until the cap is reached
InstantNo slot verification. The booking goes through immediately with a generated meeting URL. Good for urgent consultations where "anytime" is fine

Path: /settings/booking-linksCreate link.

Each link has these settings:

Identity

FieldWhat it does
TitlePublic-facing name, e.g. "30-minute intro call"
DescriptionOptional — shown on the public page above the slot picker
SlugURL fragment (/book/<slug>). Auto-derived from the title; overrideable. Lowercase letters, numbers, dashes

Availability rules

FieldWhat it does
DurationHow long each slot is, in minutes (default 30, max 480)
Buffer beforeMinutes blocked off before each meeting — keeps slots from butting up against the previous one
Buffer afterMinutes blocked off after each meeting
Min noticeMinimum hours ahead a slot must be — prevents same-day bookings if you don't want them
Max days aheadHow far in advance someone can book (default 30 days)
TimezoneThe host's timezone — slot generation is computed against this. Auto-detected from your browser on first setup
Weekly hoursOne or more time windows per weekday (09:00–12:00, 13:00–17:00). Days you don't enable are unavailable

Calendar integration

FieldWhat it does
Calendar providerNone, 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 linkWhen set, every confirmed booking gets a Google Meet (Google provider) or Microsoft Teams (Microsoft provider) link inserted into the event automatically

CRM behavior

FieldWhat it does
Auto-create dealWhen a stranger books, a CRM contact is found-or-created, then a CRM deal is created and linked to the calendar event
Default deal stageStage the new deal lands in (e.g. "New leads")
Default deal valueOptional — pre-set monetary value on auto-created deals

Notification mode

Two ways the attendee gets notified about the booking:

ModeWhat 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 confirmationA 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

ToggleEffect
Use no-reply emailAll 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
ParamWhat it pre-fills
nameThe attendee's name field
emailThe attendee's email field
phoneThe 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:

  1. Attendee picks a slot, fills the form, submits
  2. Booking lands as pending_verification (no calendar event yet, no reminders enqueued)
  3. A 6-digit code is emailed to them
  4. They enter the code on the same page; on success the booking flips to confirmed and 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 pageConfirmation 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.

Toggle Require payment to book to gate the booking behind Stripe Checkout. See Paid Bookings for the full flow.

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.

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

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:

  1. Re-computes availability for the exact requested slot (race-condition guard — if two people clicked at the same time, only one wins)
  2. Validates the pre-meeting form, if you've enabled one
  3. Picks the host (you for personal links, the next rep in rotation for round-robin)
  4. Creates a CRM contact (find-or-create by email) and optionally a CRM deal
  5. If Google Calendar is connected: creates the calendar event with the attendee invited, plus a Meet link if you've enabled that
  6. Sends a confirmation email to the attendee with an .ics calendar attachment
  7. Sends a notification email to you, the host, with the same .ics
  8. 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.