Event types & booking pages
Event types are the bookable meeting templates behind your /book pages and website embeds — each one defines what gets booked, where it happens, who hosts it, and what the client receives.
Quick links
Booking
Create and edit event types, view bookings.
Settings > Integrations
Connect the calendar and Zoom accounts event types rely on.
What an event type controls
Each event type is one kind of meeting clients can book — an initial consultation, a case review, a signing appointment. The editor lists its sections down the left, in three groups:
- Setup — Basics (the name clients see, the booking link, a short description, the duration, and the color), Location, Hosts, Availability, and Notice and buffers (minimum notice, how far ahead clients can book, buffers before and after each meeting, and how often a start time is offered).
- Booking page — Layout and look (covered below), Questions and screening (also below), Guests and repeats, and After booking.
- Reach clients — Notifications and Share and embed.
Next and ← Back at the bottom of each section move through them in order. The round ← button beside the event type's name returns to all event types; it asks first if you have unsaved changes. As you scroll, the top bar stays in view with the Accepting bookings switch, View page, and the ⋯ menu.
Location options
The Location setting decides where the meeting happens. The link or address lands on the calendar invite, confirmation email, and reminders automatically.
- Calendar default — follows the host calendar's meeting-room setting.
- Google Meet / Teams — always creates a meeting room. The provider follows the host's connected calendar: Google calendars create Meet rooms, Outlook creates Teams meetings.
- Zoom — creates a unique Zoom meeting on the host's account for every booking. With the Meeting Agent on, the meeting is cloud-recorded and the post-call report is written from Zoom's recording. See the Zoom guide for setup.
- In person — enter your street, city, state, and ZIP; the address becomes the meeting location on the invite. Optional arrival info (parking, check-in) rides along in the invite description and under the location line in confirmation and reminder emails.
- Phone call — choose who places the call. We call the client: attendees see "Phone call — we'll call you at the number you provided." Client calls us: the number you enter becomes the meeting location.
- Custom link — one static URL (a personal meeting room) used for every booking of this event type.
- No video link — a clean invite with no meeting link at all.
Team scheduling
- Single host — one person hosts every booking of this event type.
- Round robin — bookings rotate across a host pool. The rotation picks the host the moment a slot is booked, from the hosts who are free at that time. Choose the Round robin order:
- Share by priority — give each host a priority of High, Medium or Low. Over time, a High host gets about 3 meetings for every 2 a Medium host gets and 1 a Low host gets. Hosts with the same priority share meetings evenly, and every host starts at Medium.
- Whoever is free first — clients see the most open times, so hosts with busier calendars get fewer meetings. Priority is hidden here; it only breaks a tie between hosts with the same open time.
- Collective — all selected hosts attend every booking; the primary host's calendar and Zoom account are used for the invite and meeting link.
How Share by priority counts
Each pick goes to the free host who is furthest behind their share of this event type's meetings booked in the last 30 days. Cancelled meetings don't count. A host who is busy at the chosen time is skipped and catches up on later bookings. When you add someone new to this event type, everyone's count starts again from that moment, so the new host gets their share straight away instead of taking a run of bookings to catch up. Removing a host and adding them back later doesn't restart the count.
Managing hosts
Each host is a row in the Hosts list: remove a host with the cross on their row, and add one with Add host at the bottom. In Share by priority, each row has a Priority menu. A row shows Connect a calendar when that host has none.
Hosts need a connected calendar to receive bookings — and, for Zoom event types, a connected Zoom account. Team members without a calendar show in the Add host list but can't be picked until they connect one.
Custom availability
By default, booking pages offer times when the host's calendar is free. Custom Availability adds this event type's own weekly hours on top — for example, keeping consultations to Monday–Friday mornings even when the calendar is otherwise open. Set per-day time ranges in the timezone of your choice; days toggled off are never offered.
Page layout: Calendar first vs Form first
Page layout, under Layout and look, controls how the booking page collects details and shows times.
- Calendar first (the default) — clients pick a date and time first, then fill out the details form. Every existing event type works exactly this way until you change it.
- Form first — the form comes first: phone number and name before any time slot is shown. The calendar sits beside the form, visibly locked, with "Please fill out the form before choosing your time slot."
The reason to use Form first: the lead is saved as a contact the moment they submit their phone and name — before they ever pick a time. A visitor who fills in their number and then gets pulled into a meeting is no longer a lost lead; they're in your Contacts, phone in hand, ready for follow-up.
To enable it:
- Open the event type and go to Layout and look.
- Under Page layout, select Form first.
- Optionally set a Headline ("Book Your Free Consultation" — blank uses the event type name), up to six Reasons to book shown under it, and your own Consent text. Compact layout keeps the booking steps in a smaller space.
- Save. The booking page and embeds switch immediately.
What the client experiences: phone number and name first; the remaining fields — email, your custom questions, the text-message consent box — appear instantly as they start typing their name. One Continue unlocks the calendar. Clicking a time shows a Confirm button directly under it; nothing books until they click it, and they can freely change the date or time until they do.
How partial leads behave. A lead who starts but never books becomes a contact with status Touchpoint, marked internally as a booking partial:
- They do not trigger lead alerts, outbound webhooks, or email sequences — those fire once, only if the booking completes.
- They have not agreed to texts (the consent box comes later in the form), so they never enter text sequences.
- If the same person later completes a booking — even weeks later — the same contact is updated, not duplicated, and your usual new-lead notifications fire at that point.
URL-parameter prefill from your landing pages (?phone=…&first_name=…&email=…) works on both layouts; a link carrying phone and name captures the lead on page load.
Custom questions
Ask qualifying questions on the booking page itself. Answers are saved on the booking and shown to your team — no separate intake form needed.
To add questions:
- Open Questions and screening. Under Add questions, click Add question. Name, email, and phone are always asked, so you don't need to add them.
- Write the question label and pick an Answer type: Dropdown, Radio buttons, Checkboxes, Short text, Long text, or Website URL.
- Toggle Required as needed, and reorder with the arrows.
- For choice questions, add the answer options.
On the Calendar first layout, questions appear on the details form after a time is picked; on the Form first layout they appear in the first-step form.
Disqualifying answers. Any option on a choice question can be flagged Disqualifies. A lead who picks it is stopped before booking, and you choose what they see per question: Show a message (your own copy — "We're built for firms at $10k+/month…") or Send them to a page at a URL of your choosing. The check runs on our servers, so it can't be bypassed by editing the page.
Where answers go: the booking's Booking Answers section in the meeting details view, and the meeting's tooltip on the contact's activity timeline. Answers are snapshotted with their labels at booking time, so editing a question later never rewrites history.
Answers in the calendar invite. Under Calendar invite, Show answers in the calendar invite is on by default. Each question and its answer is added to the invite's notes, and unanswered questions are left out. Everyone on the invite can read those notes, so turn it off to keep answers in Superpractice only.
Screening rules ("Only allow booking for")
Three rules screen leads by their details, independent of any question. Each rule has its own blocked-lead outcome — a message or a redirect — and all of them are enforced server-side.
- Phone number countries — allow only (or block) specific countries, picked from a searchable flag dropdown. Checked the moment the lead submits their phone number.
- Business email required — blocks free and disposable mailbox providers (Gmail, Yahoo, Outlook, and thousands more). This one is also checked live: the moment a lead types
name@gmail.com, your message appears under the email field so they can switch to their work address before submitting. - Timezones — allow only (or block) bookings by the lead's detected timezone, picked from a searchable dropdown with live UTC offsets. Timezones match exactly, and neighboring zones exist (Detroit and New York are separate entries) — add the variants you care about; the search makes it quick.
On the Form first layout, a blocked lead sees the page advance to a locked calendar with your message overlaid — a clear, final state. With a redirect outcome they're sent straight to your URL.
Guests
Turn on Guests to let the person booking invite others — a spouse, a business partner, a co-counsel — up to the maximum you set (default 5).
Guests are added by email on the booking page and become real attendees on the calendar invite: they receive it in their inbox, can accept or decline, and stay on the event through reschedules. Guests never affect the lead record — the person who booked remains the contact.
Repeats (recurring meetings)
Turn on Repeats to make one booking create a repeating calendar series — a weekly standing check-in, a monthly review on "the second Tuesday," and so on.
- Toggle Repeats on and pick a preset — Daily, Weekly on the booked day, Monthly on the booked weekday or date, Annually, Every weekday — or choose Custom for any interval, specific days, and an end (never, after N occurrences, or on a date).
- The booking page shows the schedule ("Repeats weekly") before the client books.
- When they book, the host's calendar gets a single repeating series, and the invite reflects it.
Requirements and behavior to know:
- Recurring event types need single-host scheduling and a connected Google or Outlook calendar.
- Only the first occurrence is availability-checked at booking time; later occurrences follow the series even if something else lands on the calendar.
- Cancelling or rescheduling affects the whole series, not one occurrence.
Notifications
The Notifications section lists each message the client gets, with an Email and a Text box for each:
- Booking confirmation — the time, the place, and how to reschedule. Sent the moment the booking is made, with the calendar invite.
- Reminder — the time again, with the link to join. Click + Add reminder for as many as you need, each with its own timing (minutes, hours, or days before).
- Cancellation notice — confirms the meeting is off.
Reschedules follow the Booking confirmation row. When a meeting moves, the client gets the reschedule message by email, by text, or both, just as the confirmation is set. With both boxes off, no reschedule message is sent, and reminders for the new time are still scheduled. This holds however the meeting was moved: from the booking page, by the assistant, or by a voice agent.
Require SMS consent to book
Require SMS consent to book is on for every event type unless you turn it off.
- On — clients must tick the text-message consent box to book.
- Off — the box is marked optional, and booking never waits on it. Clients who leave it unticked get every booking message by email instead.
Phone carriers can reject your texting approval while this is off, so leave it on unless you have a reason not to.
Email always reaches the client. Texts go only to clients who agreed to them. A client who can't be texted — no consent, or no mobile number — gets each message by email instead, even one set to Text only. A client never gets the same message twice, once by email and once by text. Every text ends with "Reply STOP to opt out."
Message wording
The wording of these messages is shared across your firm. Edit message templates, under the switch, opens Settings > Notifications > Booking Notification Templates. There, owners and admins can write their own email and text for the confirmation, reminder, cancellation, and reschedule, with a Preview. Saved wording applies on every event type; a message you leave blank uses the default. Templates change the words only, not which messages are sent or when.
Share & embed
Every event type has a Share & Embed tab with:
- The booking link — share it in email signatures, ads, or anywhere else.
- Embed code — drop the booking widget into your website as an inline section, a popup button, a floating button, or a plain iframe, with a configurable widget background.
- Site widget — a floating booking card for the corner of every page, with the host's photo, live openings, a booking button, and a call or text-me-a-link button. It has its own settings, preview, and install code; see the Site widget guide.
- A live preview — exactly how the widget renders for visitors, including the widget background color you set for embeds.
After booking
- Accepting bookings — the switch at the top of the editor. Turning it off hides the booking page immediately; bookings that already exist are unaffected and keep their invites, reminders, and links.
- Require host confirmation — bookings stay pending until the host approves them. The calendar invite and confirmation go out on approval.
- Accept the organizer's calendar invite — confirmed meetings go on the host's calendar as accepted, so the slot reads as busy without the host clicking anything.
- After a booking — Confirmation page, or Send them to a page of your own. Covered in depth in the next section.
Redirect to your own confirmation page
In After booking, set After a booking to Send them to a page and enter the Page address. Instead of the standard confirmation screen, clients land on your page — with the full booking context appended as query parameters so you can build a personalized confirmation: greet the client by name, show their time and meeting details, and offer reschedule links.
Always included:
| Field | Required | Notes |
|---|---|---|
bookingId | Always | Unique ID of the booking. |
eventName | Always | The event type name, e.g. Initial Consultation. |
startTime | Always | ISO 8601 timestamp in UTC, e.g. 2026-08-04T15:30:00.000Z. Convert for display using timezone. |
endTime | Always | ISO 8601 timestamp in UTC. |
timezone | Always | The client's IANA timezone chosen at booking, e.g. America/Chicago. |
duration | Always | Meeting length in minutes. |
inviteeName | Always | The client's full name as entered. |
inviteeFirstName | Always | First name — ideal for greetings. |
inviteeLastName | Always | Last name. |
inviteeEmail | Always | The client's email address. |
Included when the booking has them — treat these as optional:
| Field | Required | Notes |
|---|---|---|
inviteePhone | Conditional | Only if the client entered a phone number. |
meetingLink | Conditional | Video meetings only — the Meet, Teams, Zoom, or custom join URL. |
location | Conditional | The meeting's "where", ready to display: in-person meetings send the address; phone meetings send the call details ("Phone call — we'll call you at the number you provided" or "Phone call — call (555) 123-4567"); video meetings send the platform name (e.g. "Zoom", "Google Meet") alongside meetingLink. Only absent when the event type has no video link. Matches the calendar invite exactly. |
locationNotes | Conditional | In-person meetings with arrival info — parking, suite, check-in instructions. |
hostName | Conditional | The host actually assigned to this booking — the single host, the round-robin winner for rotating teams, or the primary host for collective events. |
hostEmail | Conditional | The assigned host's email. |
hostNames | Conditional | Collective events with two or more hosts — the full comma-joined roster. |
organizationName | Conditional | Your firm's display name. |
cancelUrl | Conditional | Link the client can use to cancel. |
rescheduleUrl | Conditional | Link the client can use to reschedule. |
Example — Zoom event type with round-robin hosts. The client booked with a rotating team; hostName is the host the rotation picked for this booking:
https://meridianlaw.com/thank-you
?bookingId=b7e9a2c4-5f31-4d8e-9a06-1c2d3e4f5a6b
&eventName=Initial%20Consultation
&startTime=2026-08-04T15%3A30%3A00.000Z
&endTime=2026-08-04T16%3A00%3A00.000Z
&timezone=America%2FChicago
&duration=30
&inviteeName=Maria%20Alvarez
&inviteeFirstName=Maria
&inviteeLastName=Alvarez
&inviteeEmail=maria.alvarez%40example.com
&meetingLink=https%3A%2F%2Fzoom.us%2Fj%2F85512345678%3Fpwd%3Dabc123
&hostName=Sarah%20Calloway
&hostEmail=s.calloway%40meridianlaw.com
&organizationName=Meridian%20Law
&cancelUrl=https%3A%2F%2Fapp.superpractice.com%2Fbook%2Fcancel%3Ftoken%3D...
&rescheduleUrl=https%3A%2F%2Fapp.superpractice.com%2Fbook%2Freschedule%3Ftoken%3D...Example — in-person meeting. No meetingLink; instead the address and arrival info arrive as location and locationNotes:
https://meridianlaw.com/thank-you
?bookingId=c8f0b3d5-6a42-4e9f-8b17-2d3e4f5a6b7c
&eventName=Estate%20Planning%20Session
&startTime=2026-08-06T19%3A00%3A00.000Z
&endTime=2026-08-06T20%3A00%3A00.000Z
&timezone=America%2FChicago
&duration=60
&inviteeName=James%20Porter
&inviteeFirstName=James
&inviteeLastName=Porter
&inviteeEmail=james.porter%40example.com
&location=500%20Main%20St%2C%20Suite%20210%2C%20Austin%2C%20TX%2078701
&locationNotes=Free%20parking%20in%20the%20rear%20lot.%20Check%20in%20with%20reception%20on%20the%202nd%20floor.
&hostName=Daniel%20Reyes
&organizationName=Meridian%20LawExample — phone call, "we call the client." The client provided a number; location carries the same message shown on the calendar invite:
https://meridianlaw.com/thank-you
?bookingId=d9a1c4e6-7b53-4f0a-9c28-3e4f5a6b7c8d
&eventName=Free%20Case%20Review
&startTime=2026-08-07T14%3A00%3A00.000Z
&endTime=2026-08-07T14%3A30%3A00.000Z
&timezone=America%2FNew_York
&duration=30
&inviteeName=Dana%20Whitfield
&inviteeFirstName=Dana
&inviteeLastName=Whitfield
&inviteeEmail=dana.whitfield%40example.com
&inviteePhone=%2B15125550142
&location=Phone%20call%20%E2%80%94%20we%27ll%20call%20you%20at%20the%20number%20you%20provided
&hostName=Sarah%20Calloway
&organizationName=Meridian%20LawBuilding your page. Read the parameters client-side or server-side. Values are URL-encoded — your framework's query parser decodes them for you. Times are UTC; convert using the timezone parameter. Treat every conditional parameter as optional:
const params = new URLSearchParams(window.location.search)
const firstName = params.get("inviteeFirstName") ?? "there"
const startTime = params.get("startTime") // ISO 8601, UTC
const timezone = params.get("timezone") ?? "America/Chicago"
document.querySelector("#greeting").textContent = `You're confirmed, ${firstName}!`
if (startTime) {
document.querySelector("#when").textContent = new Date(startTime).toLocaleString("en-US", {
dateStyle: "full",
timeStyle: "short",
timeZone: timezone,
})
}
// Optional details — only render what arrived
const location = params.get("location")
if (location) document.querySelector("#where").textContent = location
const hostName = params.get("hostName")
if (hostName) document.querySelector("#host").textContent = `Meeting with ${hostName}`Every value is computed on our servers at the moment the booking is made — the same source that writes the calendar invite and emails — so your confirmation page can never disagree with what the client sees elsewhere.
Campaign to practice-area mapping
Map Google, Meta, and OpenAI campaigns so spend, CAC, pipeline, and retained revenue are grouped correctly.
Site widget
A floating booking card that lives in the corner of every page of your website, shows real openings from your calendar, and opens the booking flow in a popup. One script tag installs it; every setting saves from the app.