Bookings
Calendar Sync (Google + Outlook)
Last updated 19 May 2026
Calendar Sync (Google + Outlook)
Connect each team member's personal calendar so external events block bookable slots and confirmed bookings push out to Google or Outlook automatically. Two-way sync, per staff member, both web and mobile.
Where to find it — Web: Settings → Calendar sync. Mobile: More → Calendar sync. Owner roll-up: Team page → Calendar connections card (web only).
TL;DR
- Each staff member connects their own Google or Microsoft Outlook calendar from their logged-in account. Owner can't connect on their behalf.
- External events block bookable slots and render as muted blocks on the schedule. Bookings push out to the connected calendar within a minute.
- Conflict detection runs continuously. Dashboard widget + push notification surface clashes and offer a one-tap reschedule.
- Google is free for every venue. Microsoft Outlook is PRO-only.
What syncs in each direction
| Direction | What happens | Default |
|---|---|---|
| External → OpenChair ("Block my schedule") | Personal events from the connected calendar block bookable slots and appear as muted blocks on the schedule for that staff member. | On |
| OpenChair → external ("Push bookings out") | Every booking create, reschedule, edit, and cancel appears on the connected calendar within about a minute. Title is {Service} {First L.}; description has the venue and a deep link back to the booking. |
On |
| Show event titles | When on, the real title of external events is visible on the OpenChair schedule. When off (default), external events display as Busy. | Off |
Each toggle is independent. A staff member can pull events without pushing bookings, or vice versa.
Note
Events you mark as Free (Google) or Available (Microsoft) sync but do not block bookable slots. Cancelled events are removed.
Sync window
We sync events 30 days into the past and 12 months into the future. Older or further-out events aren't pulled. Recurring events sync as their individual instances within that window.
Connecting a calendar
From web
- Open Settings → Calendar sync.
- Pick Google or Microsoft Outlook and click Connect.
- Sign in to your Google or Microsoft account when prompted and approve the requested permissions.
- You'll be redirected back to OpenChair. The connection card flips to Connected as your.email@example.com.
- Toggles are on by default. Adjust if you want different behaviour.
From mobile
Same flow, started from More → Calendar sync. The OAuth round-trip opens your device browser and returns you to the app on completion.
What permissions we ask for
Read and write your primary calendar — that's it. We only ever read and write events on the primary calendar of the account you sign in with. We don't touch other calendars, contacts, mail, or files.
Conflict detection
A conflict is when an external event overlaps with a booking on the same staff member, on the same time window.
Conflicts are derived live — there's no stored conflicts table to keep clean. When a new external event arrives or a booking is moved, the system rechecks the affected window in real time.
Three things happen when a conflict appears:
- Dashboard widget — the Schedule conflicts card on the home dashboard lists today's and tomorrow's clashes with one-tap Reschedule and Open booking buttons.
- Push notification — the affected staff member gets a push the moment the conflict is detected. Each external event triggers at most one push for its lifetime.
- Mobile schedule indicator — the conflicting booking block shows a small conflict overlay on the mobile day view.
Dismissing a conflict hides it from the widget without changing either side. Undismiss from the widget settings if you change your mind.
Tip
Conflicts are not blocking. Customers can still book if the staff member has manually marked themselves available. The widget is a reminder, not a hard stop.
Owner roll-up (Team page)
On the Team page (web), the Calendar connections card shows every active staff member with their connection status (Google, Microsoft, or none). Each row has a Send request button that pushes a notification to the staff member with a deep link to Settings → Calendar sync.
- Limited to 1 request per staff per 24 hours to prevent nag spam. The button reads Sent · retry in 23h during the cooldown.
- Hidden for solo venues (1 staff total — no point asking yourself).
- Owner-only. Managers and stylists see no card.
The owner can't OAuth on a staff member's behalf — Google and Microsoft credentials belong to the human, not the salon.
Reconnection
OAuth tokens occasionally expire — most commonly when a staff member changes their Google or Microsoft password, revokes the OpenChair app from their account, or doesn't sign in for a long stretch. When that happens:
- The connection card shows a Reconnect state with a red banner.
- A persistent Calendar connection needs attention banner appears on the dashboard (web) and Today screen (mobile).
- Sync pauses. No conflict detection, no booking pushes, no event blocks — until you click Reconnect and re-authorise.
The reconnect flow is one click. Your existing toggles and settings are preserved.
Settings
| Setting | Where | What it does |
|---|---|---|
| Block my schedule with external events | Each connection card | Pull external events and use them to block bookable slots. |
| Push my OpenChair bookings to this calendar | Each connection card | Push new and updated bookings to the external calendar. |
| Show event titles | Each connection card | When off, external events display as Busy. When on, the real event title is visible on the schedule. |
| Manual sync | Each connection card | Force a refresh — useful if you just connected and want events to appear immediately. |
| Disconnect | Each connection card | Removes the connection. External events stop blocking, OpenChair bookings stop pushing. Existing pushed events stay on the external calendar; they're not deleted on disconnect. |
Who can use this
| Role | Connect own calendar | See own connection status | See team roll-up | Send connection request |
|---|---|---|---|---|
| Owner | Yes | Yes | Yes (web) | Yes |
| Manager | Yes | Yes | No | No |
| Stylist | Yes | Yes | No | No |
Common mistakes
| Problem | What to check |
|---|---|
| External events aren't blocking the schedule | The Block my schedule toggle is on; the events aren't marked Free in Google or Available in Outlook; the event is within the 30-day-back to 12-month-forward sync window. |
| Bookings aren't appearing on my Google/Outlook calendar | The Push bookings out toggle is on; the booking was created after the connection was made (we don't backfill past bookings on connect); the cron last ran less than 60 seconds ago. |
| The dashboard says Calendar connection needs attention | OAuth tokens expired. Click Reconnect on Settings → Calendar sync. |
| I'm an owner and can't see my staff's Microsoft calendar | Microsoft Outlook is PRO-only. If your venue is on FREE, only Google connections are available. |
| I disconnected and now my old bookings are still on the external calendar | Disconnect doesn't delete previously pushed events. Remove them manually in Google or Outlook if you don't want them there. |
| Conflicts keep firing for an event I'm fine with | Open the dashboard widget and dismiss the conflict. Dismissal is reversible. |
| The same external event is firing duplicate push notifications | It shouldn't — each event notifies once for its lifetime. If you're seeing duplicates, the event may have been deleted and re-created externally. Contact support with the calendar and event details. |
What's not supported
- Choosing which calendar to sync — only the primary calendar on each provider syncs today. A foundation for multi-calendar selection exists but isn't wired up yet.
- Editing external events from OpenChair — external events are read-only on the schedule. Open them in Google or Outlook to make changes.
- Filtering by event title or keyword — the only filter is the Show event titles toggle (all-or-nothing).
- Two-way sync of customer-facing details — bookings push out with our template title and description. Changes you make to those event details in Google or Outlook don't sync back into the booking record.
FAQ
Does this cost extra?
Google Calendar is free for every venue. Microsoft Outlook is a PRO feature. Both work the same way once connected.
Who connects the calendar, the owner or each staff member?
Each staff member connects their own calendar from Settings → Calendar sync on their logged-in account. Tokens belong to that person's Google or Microsoft account. The owner can nudge them with a one-tap request from the Team page but can't connect on their behalf.
Will my private events show on the salon calendar?
By default external events show as 'Busy' with no title. Flip 'Show event titles' on the connection card if you want the real title visible to your team. Either way, events you mark as 'Free' or 'Available' in Google or Outlook never block bookable slots.
What happens when a personal event collides with a booking I've already taken?
The dashboard surfaces a Schedule conflicts widget with the clash and a one-tap reschedule button. You also get a push notification the moment the conflict is detected. Conflicts can be dismissed if you're happy to keep both.
How fast do changes sync?
Usually within a minute. We listen for live notifications from Google and Microsoft, and top up hourly in case a notification gets dropped. Booking pushes to the external calendar run on a one-minute cron.
Can I sync more than one calendar per provider?
Not yet. Only the primary calendar on each provider syncs today. We've built the foundation for multi-calendar selection; it'll ship when there's a clear pattern of how operators want to use it.
What happens if I disconnect?
External events stop blocking your bookable slots. New OpenChair bookings stop pushing out. Existing events that were already pushed to your external calendar stay where they are — disconnect doesn't delete them.