Outlook Calendar Integration
Connect Microsoft Outlook to sync meetings, check conflicts, and auto-create Microsoft Teams links.
Benefits
- Automatic Calendar Events: Meetings appear on your Outlook calendar
- Conflict Detection: Existing Outlook events block booking slots
- Microsoft Teams Links: Auto-generated for Microsoft 365 work accounts
- Two-Way Sync: Reschedule or cancel in Outlook and SalesCal updates to match
Outlook works with both Outlook.com (personal) and Microsoft 365 / Office 365 (work or school) accounts. Teams meeting links are only auto-created on Microsoft 365 work accounts — personal accounts can still book but need a manual meeting link.
Connecting Outlook
You can connect Outlook from two places:
Onboarding wizard (first-time setup):
- During onboarding, the calendar step shows Outlook Calendar alongside Google
- Click Connect next to Outlook
- Sign in with your Microsoft account
- Grant the requested permissions
- The badge changes to Connected with a green check
Anytime from the dashboard:
- Go to Settings > Integrations
- Find Outlook Calendar in the available integrations grid
- Click Connect
- Sign in and grant permissions
Required Permissions
SalesCal requests these Microsoft Graph scopes:
| Permission | Purpose |
|---|---|
offline_access | Persist refresh tokens so you don't have to reconnect every hour |
User.Read | Read your Microsoft profile to label the connection |
Calendars.ReadWrite | Read existing events for conflict detection; create, update, and delete meetings for SalesCal bookings |
OnlineMeetings.ReadWrite | Auto-generate Microsoft Teams meeting links on work accounts |
Microsoft Teams Meeting Links
If your event's location is set to Microsoft Teams, SalesCal asks Microsoft Graph to create the meeting with an online meeting attached. Microsoft returns a Teams join URL which gets stored with the booking.
- Work / Microsoft 365 accounts (e.g.
you@company.com): Teams links auto-generate - Personal accounts (
@outlook.com,@live.com,@hotmail.com,@msn.com): Teams creation silently fails — Microsoft's consumer accounts don't support Teams API meeting creation. Use Zoom or Google Meet for these accounts, or add the meeting link manually after booking
We classify your account when you connect — if you're on a personal account and want Teams, you'll need to upgrade to Microsoft 365 then reconnect.
How Sync Works
New Bookings
When someone books a meeting:
- SalesCal creates the meeting record in its own database
- An Outlook calendar event is created via Microsoft Graph on the assigned host's calendar
- If the location is Teams, an online meeting is attached and the join URL is captured
- The prospect receives the calendar invite
Availability Checking
When prospects view your booking page:
- SalesCal queries Microsoft Graph's
calendarViewendpoint for your existing events - Existing events block those time slots
- Only truly free times appear to the prospect
External Changes (Outlook → SalesCal)
SalesCal subscribes to Microsoft Graph webhooks so changes made directly in Outlook flow back:
- Reschedule in Outlook: SalesCal detects the new start time and updates the meeting record
- Cancel in Outlook: SalesCal marks the meeting as cancelled
- Edit time in Outlook: SalesCal re-syncs the new time
Limitation: Internal Edits Don't Sync to Outlook
If you reschedule a booking from within SalesCal, the existing Outlook event is updated. But editing the meeting from Outlook then editing again from SalesCal can produce edge cases where the two systems briefly disagree — re-fetch one side if you notice a mismatch.
Calendar Selection
SalesCal writes new bookings to your default Outlook calendar and always checks it for conflicts. You can also have it check additional calendars for conflicts:
- Go to Settings > Integrations
- Click your connected Outlook Calendar tile
- Your default calendar is shown at the top (always checked, and where bookings are created)
- Turn on any additional calendars you also want checked for conflicts, then Save changes
Additional calendars are read-only — they're only used to detect conflicts. New bookings always go to your default calendar. If you keep work meetings on a secondary calendar and want bookings created there, set it as your default in Outlook before connecting (or move bookings yourself after they're created).
Conflict Detection
What Blocks Slots
- Existing calendar events marked "Busy" (default)
- All-day events explicitly marked as "Busy"
- Events on your default Outlook calendar
- Events on any additional calendars you've turned on for conflict checking
What Doesn't Block
- Events marked as "Free" (including all-day events — Outlook's default for all-day)
- Events marked "Working Elsewhere"
- Declined invitations
- Cancelled events
- Events on calendars you haven't turned on for conflict checking
Team Members
Each team member connects their own Outlook account from their own SalesCal session. Round-robin and multi-host event assignment uses each host's own Outlook calendar:
- Conflicts are checked against the assigned host's calendar
- The booking event is created on the assigned host's calendar
- Hosts who haven't connected Outlook (or Google) won't appear in availability checks
There is no shared / delegated calendar support — if you book on behalf of someone, do it from their own SalesCal account.
Troubleshooting
"Failed to Connect"
- Try disconnecting and reconnecting
- Clear browser cookies for Microsoft (
login.microsoftonline.com) - If you're on Microsoft 365, your admin may have restricted third-party OAuth apps — ask them to allow SalesCal
"No Teams Link Generated"
- Confirm your account is a Microsoft 365 work account, not a personal
@outlook.comaccount - Verify Microsoft Teams is enabled for your Microsoft 365 tenant
- Check that the event's location is set to Microsoft Teams specifically (not "Custom" or another video provider)
"External edits aren't syncing back"
Webhook subscriptions expire after about 3 days and SalesCal renews them in the background. If renewals fail (rare), external sync stops. Disconnect and reconnect Outlook to recreate the subscription.
"Conflicts not being detected"
- Confirm the events are on a calendar that's being checked — your default calendar, or an additional calendar you turned on under the Outlook Calendar settings tile
- All-day events show as "Free" by default in Outlook — only events marked Busy block slots
- Refresh the booking page to fetch the latest availability
"Wrong calendar events being checked"
Outlook's default calendar is whichever calendar Microsoft considers your primary. Set the right one as default in Outlook (Calendar settings) and reconnect.
Outlook vs Google Calendar
| Feature | Outlook | Google Calendar |
|---|---|---|
| Conflict detection | Yes | Yes |
| Two-way sync | Yes | Yes |
| Auto video links | Teams (work accounts only) | Google Meet |
| Multiple calendars | Yes (check extra calendars; bookings go to default) | Yes (check extra calendars; bookings go to primary) |
| Personal accounts | Supported, but no Teams links | Supported, no Meet on personal Gmail |
| Webhook renewal | Every ~3 days | Every ~7 days |
Pick Outlook if your team is on Microsoft 365; pick Google Calendar if you're on Google Workspace. You can connect different team members on different platforms — the booking widget assigns based on whoever's free, regardless of which calendar they use.
Disconnecting Outlook
- Go to Settings > Integrations
- Find Outlook Calendar
- Click Disconnect
Existing Outlook events remain in your calendar. New bookings stop syncing to Outlook and your availability is no longer checked against your Outlook calendar.
Privacy & Security
- SalesCal only accesses the calendar(s) you grant via OAuth
- Refresh tokens are stored encrypted at rest
- Webhook subscriptions are scoped to the host's primary calendar only
- You can revoke SalesCal's access from Microsoft account → Privacy → Apps and services that can access your data
Best Practices
- Bookings are created on your default calendar — if you also keep busy time on other calendars, turn them on for conflict checking under the Outlook Calendar settings tile
- Add buffer time in your event rather than as separate Outlook events; buffers are kept correct as you reschedule
- For Teams on personal accounts, switch to Zoom or Google Meet
- Test before launching: book a test meeting, verify the calendar event and Teams link land correctly, then go live
Related Guides
- Google Calendar Integration — the same flow for Google accounts
- Zoom Integration — alternative video conferencing
- Weekly Schedule — your base availability that's combined with calendar conflicts
- Managing Meetings — meeting lifecycle in SalesCal