Answer · Integrations

Send Microsoft Bookings appointments to HubSpot or Salesforce

Last updated 4 min read6 sources

The question people ask
“How do I send Microsoft Bookings appointments to HubSpot, Salesforce or Dynamics?”

Asked in community.hubspot.com (opens in a new tab), Microsoft Learn (opens in a new tab) and Microsoft Learn (opens in a new tab)

Short answer

As of September 2026, Microsoft Bookings has no built-in integration with HubSpot, Salesforce or Dynamics 365. The route Microsoft supports is the Microsoft Bookings (Preview) connector in Power Automate: a flow fires when an appointment is created, updated or cancelled, then writes a contact, lead or activity into your CRM. The other options are third-party integration platforms, or polling the Microsoft Graph API yourself.

What exists for each CRM#

CRMNative integrationPractical route
HubSpotNone. A HubSpot Ideas thread asks for onePower Automate calling HubSpot's API, or an iPaaS tool
SalesforceNone. A Microsoft Q&A answer says there's "no built-in way"Power Automate with the Salesforce connector (Premium)
Dynamics 365 / DataverseNone directPower Automate with the Microsoft Dataverse connector (Premium)

Route 1: Power Automate (Microsoft's own path)#

Our guide Bookings + Power Automate: send new bookings to a CRM walks through the whole build. The outline:

  1. Check who builds the flow. Only someone with the Administrator role on that booking page can create flows with the appointment triggers, and they need a Bookings licence. Tenant admin rights on their own aren't enough.
  2. Pick the trigger. Create an automated cloud flow and choose "When a appointment is Created" (Microsoft's spelling). Choose the booking page from the list, or paste its SMTP address, which you'll find in Bookings under Integrations → Power Automate.
  3. Add the CRM action.
    • Salesforce: Create record (Lead, Contact or Event), or Insert or Update (Upsert) a Record by External ID (V2) to avoid duplicates.
    • Dynamics 365 / Dataverse: Add a new row or Upsert a row on the contact, lead or appointment table.
    • HubSpot: look for a HubSpot connector in your environment's connector list. If there isn't one, send an HTTP request to HubSpot's CRM API.
  4. Map the fields. The trigger gives you the customer's name, email, phone, address and notes, the answers to custom questions, the staff member, the service, start and end times, the Teams join URL, SelfServiceAppointmentId and TrackingData (the RefID campaign value).
  5. Handle changes. Build separate flows on "When an appointment is Updated" and "When an appointment is Cancelled" to update or close the CRM record.

Limits to plan around (as of September 2026)#

  • The connector is still in Preview.
  • Only 5 flows per booking mailbox. A created flow, an updated flow and a cancelled flow already use 3 of them.
  • Users report that the Updated trigger doesn't fire for some edits. See why a Bookings trigger isn't firing.
  • In group bookings, the second and later attendees fire Updated, not Created.
  • Cancel reason and custom notes aren't populated for 1:1 bookings.
  • Throttling is 100 calls per connection per 60 seconds.
  • The connector isn't available in GCC, GCC High, DoD or 21Vianet.
  • The Salesforce and Dataverse connectors are Premium in Power Automate, so the flow owner needs a premium licence.

Route 2: third-party integration platforms#

Pipedream, viaSocket and Onlizer list Microsoft Bookings integrations that can reach HubSpot or Salesforce. Pipedream says it has Bookings actions but no Bookings triggers, so these tools usually poll for new appointments rather than reacting to them. Zapier has no Microsoft Bookings app. See Is there a Zapier integration for Microsoft Bookings?

Route 3: poll the Graph API#

Developers can read appointments with the Microsoft Graph Bookings API and push them to the CRM. There are two catches:

  • Bookings doesn't support Graph change notifications or webhooks. See Does Microsoft Bookings support webhooks?
  • Appointments have no created-date filter, so you have to list them on a schedule and compare the list with what you've already synced.

Graph allows 4 concurrent Bookings requests per app and mailbox. The API covers shared booking pages only, not Bookings with me.

Route 4: manual export#

If you only need a periodic sync, download the TSV export (4-month windows) and import it into the CRM. See export Microsoft Bookings to Excel. It isn't real time, and customer lists can't be exported separately.

Doing this with BookingsXP#

If your bookings come from a website, the BookingsXP widget sits on top of your existing Bookings page, and its optional data layer can send a booking.created webhook to Zapier, Make, n8n or your CRM's inbound endpoint. It also passes along the UTM and click-ID source of the visit. Webhooks are on paid plans (details), and they only cover bookings made through the widget, not bookings that staff enter in the Bookings calendar. BookingsXP is independent and not affiliated with or endorsed by Microsoft.

Questions people also ask

Sources

  1. Microsoft Learn (opens in a new tab) · learn.microsoft.com
  2. Microsoft Learn: Power automate integration (opens in a new tab) · learn.microsoft.com
  3. Microsoft Learn (opens in a new tab) · learn.microsoft.com
  4. Microsoft Learn (opens in a new tab) · learn.microsoft.com
  5. Microsoft Learn: Booking api overview (opens in a new tab) · learn.microsoft.com
  6. Microsoft Learn: Throttling limits (opens in a new tab) · learn.microsoft.com