Back to blog
Engineering

Why We Built Bookings on Top of Calendar Sync (Not the Other Way Around)

A consultant schedules a discovery call on her booking link. The link says the slot is open. A second later she gets an email that her Google Calendar has a conflict at the same time, because a client just moved a recurring meeting from her Outlook work calendar into her Google personal calendar. The booking link was correct on the data it could see. It just could not see the meeting that mattered.

That is the practical problem with most scheduling tools, and it is the problem we built Calendar FreeSync Bookings to solve. This post walks through the design choice behind the product, why the booking page is built on top of the same sync engine that powers the rest of the app, and what that decision gives up.

How most scheduling tools handle availability

Standalone scheduling tools prevent conflicts by checking the calendar they are connected to. If the host connects their Outlook work calendar, the booking link checks Outlook for busy blocks. If the host connects their Google Calendar, the booking link checks Google. The booking link is correct as long as every important event already lives in that one calendar.

The moment availability is split across accounts, the booking link stops being trustworthy. A meeting on the personal Google calendar does not show up in the work Outlook calendar, so the booking link does not see it. A client meeting on a separate client account does not show up in either of the calendars the link is connected to, so the booking link does not see that either. The link is technically working. It is just working from incomplete information. We wrote about this in detail in why booking apps still double-book you, and the short version is that the booking app is only as accurate as the calendars it can check.

Our design choice: bookings inherit your sync state

Calendar FreeSync already solves the calendar visibility problem with bidirectional sync between Google Calendar and Outlook. The question when we started building bookings was whether to add a separate availability engine on top of the product, or to put the booking page on the same foundation that powers sync. We chose the second option. Every booking page on Calendar FreeSync reads from the same availability surface that the rest of the app uses.

In practice, that means five concrete things:

  • Bookings read from the unified availability surface. The page does not ask one calendar whether you are free. It asks the same engine that powers the rest of the app, which already knows about every event on every connected account.
  • Busy blocks from any synced calendar count. If you have a busy block on your personal Google Calendar, that block shows up on your booking page even if the page is tied to your Outlook work calendar. This is the core differentiator and the practical reason the 2-calendar minimum exists.
  • Destination calendar writes are real events. When a booking is confirmed, the system creates a real event on the chosen destination calendar with the booker as an attendee, not a placeholder or a link. The event participates in the same sync pipeline as every other event on that calendar.
  • The 2-calendar minimum is intentional. A booking page connected to a single calendar can still miss the events that matter most. The minimum is the smallest setup that produces a booking page more accurate than a standalone tool.
  • Suspend on disconnect is the right default. If the destination calendar disconnects, the booking page is automatically archived. If the host's Pro subscription lapses, the page is suspended. Both defaults protect the host from a booking landing somewhere it cannot be found.

None of those choices are unique to scheduling. They are the same defaults the sync engine already uses. Putting bookings on the same foundation means a single mental model: connected calendars are the source of truth, the booking page is a window into that source of truth, and a confirmed booking is just another event on one of those calendars.

What this looks like in practice

Consider a typical setup: a freelance designer with a personal Google Calendar, a client Outlook calendar, and a second Google Calendar for a side project. She has been using Calendar FreeSync Pro to keep the three accounts in sync for a few months. She publishes a booking page for 30-minute discovery calls, with the client Outlook calendar as the destination.

When a prospect opens the booking page, the available time slots already exclude:

  • Meetings on the client Outlook calendar (the destination).
  • Meetings on the personal Google Calendar, which have been synced into the client calendar as busy blocks.
  • Meetings on the side-project Google Calendar, which have been synced the same way.
  • Existing booking events on the destination calendar from previous discovery calls.
  • The buffer time and minimum notice she configured on the booking page itself.

When a prospect picks a time and submits their details, the booking creates a real event on the client Outlook calendar with the prospect as an attendee. The confirmation email goes out with an .ics file and a self-serve cancellation link. Twenty-four hours before the call, the prospect gets a reminder. If the prospect cancels, the event is removed from the client calendar and the designer gets a cancellation email. None of that requires the designer to babysit the booking page. The booking page is a view on the same calendar surface she is already using.

This is also the reason a booking page on Calendar FreeSync can be trusted more than a standalone scheduling tool. The standalone tool is doing the same job, but it is doing it from one calendar. Calendar FreeSync Bookings is doing it from the same surface the rest of the app reads, which means it sees the events that matter.

Tradeoffs we accepted

Building bookings on top of sync is the right call for the problem the product solves, but it is not the right call for every team. The design gives up three things on purpose.

First, we do not have AI scheduling that finds open slots across multiple attendees. The booking page is built around a single host's availability, and the host is responsible for coordinating with anyone else who needs to be in the meeting. If your team needs a tool that finds the intersection of three calendars and books it without human input, that is a different product category and you are better served by a tool that does it well.

Second, we do not have routing forms. There is no way to ask a visitor a question and direct them to a different host or a different page based on the answer. The booking page is the booking page, and every visitor sees the same slots. If your sales team needs qualified leads routed to the right account executive, you want Calendly or a dedicated routing tool.

Third, we do not integrate with Salesforce, HubSpot, or any CRM. A confirmed booking sends email notifications and creates a calendar event, but it does not write a row to your CRM or trigger a workflow. If your scheduling tool is the front door of a sales pipeline, that is a feature we do not pretend to have.

The honest summary is that the booking surface is deliberately small. We did not try to match every Calendly feature, because the foundation we are building on is different. We are building on calendar sync, and the booking page inherits whatever strengths and limits that foundation has. If your real availability is split across Google and Outlook, that foundation is the one that makes the booking page trustworthy. If you need AI scheduling, routing, or CRM integrations, this is the wrong product and we will say so in the comparison post on free Calendly alternatives.

Who this design is for

The booking page is built for people whose availability is split across accounts. That is a much larger group than it sounds. It includes freelancers juggling multiple client calendars, consultants who bill by the hour across different platforms, recruiters running interview loops across candidate and hiring-manager calendars, executives with a work calendar managed by an assistant and a personal calendar they keep private, small business owners and coaches who book client calls from a personal account while running the business from a work account, and parents who keep family commitments on a personal Google Calendar while managing work on Outlook.

For each of these setups, the booking page is solving the same problem: the host's real availability is bigger than any single calendar, and a scheduling tool that only checks one calendar will miss events. Calendar FreeSync already keeps those calendars aligned. The booking page is the natural next layer. The deep-dive guides on managing calendars across multiple clients and the freelancer calendar sync setup walk through the same logic from the sync side, and the same reasoning applies to booking.

What is next

The booking page is the foundation. The next round of work is around team scheduling (rounding up multiple hosts, collective events) and richer booking page customization (themes, custom confirmation messages, follow-up emails). The direction of travel is to keep adding layers on top of the same foundation, not to migrate to a different architecture. If you have feedback on what to ship next, the fastest way to reach us is the in-app support link.

FAQ

Why does Calendar FreeSync require 2 connected calendars for booking pages?+

Booking pages read availability from your connected calendars. If you only have one, the page can only check one source, and you are back to the same double-booking problem that any standalone scheduling tool has. The 2-calendar minimum is the minimum setup that lets the booking page see a useful picture of your real availability.

Does the booking page check busy blocks on my other synced calendars?+

Yes. Booking availability is built on top of the same sync engine that powers the rest of Calendar FreeSync. A busy block on any connected account shows up on the booking page automatically. This is the practical reason the booking page can be more accurate than a standalone scheduling tool tied to one calendar.

What happens to my booking page if a destination calendar disconnects?+

The page is automatically archived. This is the safe default. If someone books while the destination is disconnected, the booking would not have a calendar event to land in, so the page is paused instead of dropping bookings on the floor. Reconnect the destination calendar and the page can be reactivated from the bookings dashboard.

Can I use the booking page without a Pro subscription?+

No. Booking pages are a Pro feature. The free plan includes 2 calendar connections and unlimited syncs but not booking pages. A 7-day Pro trial is available to new subscribers, and Pro is $5.99 per month after the trial.

See the booking page on top of your synced calendars

Connect a second calendar, start a 7-day Pro trial, and publish a booking page that reads from the same availability surface as the rest of Calendar FreeSync.

Get started free