> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getthread.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Automate PSA Scheduling with Microsoft Bookings

> Use a Power Automate flow to sync Microsoft Bookings appointments with your PSA, enriching ticket context, calendar events, and AI meeting recap tools.

### **Overview**

**Note** while this example uses ConnectWise APIs, the structure is modular and can be adapted to any PSA.

This guide shows you how to connect **Microsoft Bookings** with your PSA platform to streamline and automate technician scheduling.

By integrating these systems, you create a seamless workflow that connects end-user appointment bookings to internal service operations. Specifically, this setup enables you to:

* **Extract ticket context** directly from booking form responses.
* **Enrich calendar events** with structured ticket details in the subject line.
* **Update PSA tickets** in real time to reflect a scheduled appointment.
* **Trigger meeting recap tools** like Fireflies or other AI notetakers by embedding ticket identifiers into meeting titles.

**Pro Tip** pair this automation with a Snippets shortcut in Thread Inbox to make sharing your calendar effortless. Create a pre-written snippet that inserts your Microsoft Bookings link into chats, so you can instantly offer customers a way to book time with you. [Learn how to create a Snippet](/inbox/how-to-create-an-email-signature-using-snippets)

### What this Power Automate flow does

This solution is built entirely within **Power Automate** and acts as a smart bridge between Microsoft Bookings and your PSA platform (e.g. ConnectWise, Autotask, Halo).

When a customer schedules an appointment using your Microsoft Bookings page, the **Power Automate flow** is triggered and performs the following steps:

1. **Extracts the ticket number** from the customer’s booking form response.
2. **Calls your PSA’s API** to fetch ticket details like summary and owner.
3. **Updates the calendar event title** with the ticket number and summary (e.g., `[12345] - Printer not working`).
4. **Updates the ticket status** to "Scheduled" in your PSA system.
5. **Adds a scheduled resource/technician** to the ticket based on the booking info.
6. **Triggers AI Notetakers** (e.g. Fireflies AI) by embedding ticket metadata in the event title.

### Why this matters

#### Business value

* **Reduces technician coordination overhead**: No need to manually update calendars or ticket statuses.
* **Improves recap accuracy**: Fireflies or Copilot recap tools can pick up the ticket number from meeting titles.
* **Syncs calendars**: Automatically connects Bookings and O365 calendars with CW schedules.
* **Protects SLA compliance**: Ensures that scheduled tickets are statused appropriately and assigned.

#### Best use cases

* MSPs with multiple engineers booking their own time.
* Partners using Fireflies AI or other AI notetakers for meeting recaps.
* Teams aiming to reduce manual triage and improve customer experience.

### How to set it up

Build the flow in [Power Automate](https://make.powerautomate.com/) using the structure and connections documented below.

#### 1. Shared booking page requirements

* You must include a shared booking page and custom form questions in Microsoft Bookings that collects the **ticket number** (e.g., "Enter your Thread ticket number").
* Ensure staff members are mapped to the right Office 365 calendars.

**Need help creating your booking page and custom form fields?** Refer to Microsoft’s official guide [Create a Bookings calendar and add custom questions](https://learn.microsoft.com/en-us/microsoft-365/bookings/add-questions?view=o365-worldwide)

#### 2. Power Automate flow structure

1. **Trigger**: `When an appointment is created` via Microsoft Bookings.
2. **Variable Init + Ticket Validation**: Validates the ticket number format.
3. **API Call**: Retrieves ticket data from ConnectWise.
4. **Switch Case**: Maps engineer name → calendar → event update.
5. **PATCH Call**: Updates the ticket status to “Scheduled”.
6. **POST Call**: Creates a scheduled resource on the CW ticket.
7. **Update Event**: Edits the Outlook calendar entry title.

Engineer-specific calendar logic is handled in a **Switch** block keyed by display name (e.g., Frodo Baggins, Samwise Gamgee).

#### 3. Required connections

Ensure these connectors are active in Power Automate:

|                        |                                                                                                                                                                                                                                                                                    |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Connector**          | **Use**                                                                                                                                                                                                                                                                            |
| Microsoft Bookings     | Receive appointments                                                                                                                                                                                                                                                               |
| Office 365 Outlook     | Update calendar events                                                                                                                                                                                                                                                             |
| ConnectWise (via HTTP) | Fetch and modify ticket data. Authentication is handled using an HTTP header containing your **Basic Auth** token and `ClientID` from ConnectWise API credentials. You can obtain your `ClientID` here: [ConnectWise Developer Portal](https://developer.connectwise.com/ClientID) |

### Example booking flow

1. **Technicians use snippets** in Thread Inbox to quickly share your team’s Microsoft Bookings link, making it easy for customers to book time with you.
2. **User Books** a time via your public Microsoft Bookings page.
3. **Flow Triggered** → Validates and extracts the ticket number.
4. **Calls CW API** to pull ticket summary and owner.
5. **Updates Calendar Title** → `[#12345] - Printer Jam on Floor 2`
6. **Changes Ticket Status** → “Scheduled”
7. **Adds Scheduled Resource** in CW so SLA timers and escalations reflect reality.

### **FAQs**

<AccordionGroup>
  <Accordion title="What if the ticket number is wrong?">
    The flow includes a basic numeric validation step and will fail silently if a non-ticket value is entered.
  </Accordion>

  <Accordion title="Can I extend this to other boards or engineers?">
    Yes—just expand the `Switch` block and calendar logic with the engineer’s name and calendar ID.
  </Accordion>
</AccordionGroup>


## Related topics

- [Scheduling Intent Detector](/skill-library/triage-and-routing/scheduling-intent-detector.md)
- [TimeZest Booking](/skill-library/scheduling-and-dispatch/timezest-booking.md)
- [Zapier Outlook Calendar Booking](/skill-library/connectors/zapier-outlook-calendar-booking.md)
