Answer · Tracking & analytics

How far ahead do Microsoft Bookings customers book?

Last updated 4 min read6 sources

The question people ask
“How can I see how far in advance customers book in Microsoft Bookings?”

Asked in Microsoft Learn (opens in a new tab)

Short answer

Not natively. As of October 2026, Microsoft Bookings has no lead-time report, and the TSV export lists each appointment's date and time but not when it was booked. To measure it, log the booking time with a Power Automate flow on When a appointment is Created, or read each appointment's createdDateTime from the Microsoft Graph API. Then subtract one from the other in Excel.

This page is about measuring how far ahead people book. To set the minimum notice and booking window, see lead time and maximum days in advance.

Why the export can't do it#

Microsoft's reporting doc lists the export columns: Date & Time, customer and staff fields, Service, Duration (minutes), Event Type, pricing, Custom Fields, Booking ID and Tracking data. Date & Time is when the appointment happens. Nothing records when it was made. An answer on Microsoft Q&A says the same: Bookings doesn't show the creation time in the app or the export, and it points to Graph's createdDateTime. So the export can show busy days and hours, but not how far ahead people booked. The Excel reporting guide covers what it can do.

Option 1: log it with Power Automate#

This needs no code. It only captures bookings made after you switch it on.

  1. Create an Excel table in OneDrive or SharePoint with the columns AppointmentId, Service, Staff, Start, BookedAt and LeadHours.
  2. In Power Automate, create an automated flow with the Microsoft Bookings trigger When a appointment is Created. Pick your booking page, or paste its SMTP address from Integrations → Power Automate in Bookings.
  3. Add the Excel action Add a row into a table and map:
    • AppointmentId: SelfServiceAppointmentId. The connector FAQ calls this the ID that stays the same across triggers.
    • Service: ServiceName.
    • Staff: the first entry of StaffMembers (Power Automate adds an Apply to each loop, which is fine).
    • Start: StartTime.
    • BookedAt: the expression utcNow().
    • LeadHours: div(sub(ticks(triggerOutputs()?['body/StartTime']), ticks(utcNow())), 36000000000). A tick is 100 nanoseconds, so 36,000,000,000 ticks is one hour.
  4. Save, make a test booking, and compare Start with the appointment in the Bookings calendar. The connector doesn't document whether StartTime is UTC. If it's off by your UTC offset, adjust it with convertTimeZone() before you trust the numbers.

Limits from the connector page, as of October 2026: the connector is in preview, only Bookings admins can create appointment flows, and each booking mailbox allows five flows. In a group booking, only the first customer fires Created; later ones fire Updated.

Option 2: read createdDateTime from Graph#

The Graph bookingAppointment resource has createdDateTime ("when the appointment was created", always UTC) and start. Read appointments with the calendar view endpoint, which needs Bookings.Read.All:

Text
GET https://graph.microsoft.com/v1.0/solutions/bookingBusinesses/SalesDemos@contoso.com/calendarView?start=2026-07-01T00:00:00Z&end=2026-10-01T00:00:00Z

Lead time is start.dateTime minus createdDateTime. Unlike the flow, this covers past bookings too. The docs' example response is shortened and doesn't show createdDateTime, so check one real response before you build on it. Two catches:

  • Reschedules. createdDateTime doesn't change when the appointment moves, so a booking pushed back a month looks booked a month further ahead.
  • Staff bookings. Appointments staff enter for customers are included. Filter them out if you want customer behaviour only (see the FAQ on selfServiceAppointmentId).

Turn it into a report#

In Excel, add a LeadDays column (=[@LeadHours]/24) and a bucket column:

Text
=IFS([@LeadHours]<24,"Under 24 hours",[@LeadHours]<72,"1-2 days",[@LeadHours]<168,"3-6 days",[@LeadHours]<336,"1-2 weeks",[@LeadHours]<720,"2-4 weeks",TRUE,"4+ weeks")

Pivot the bucket by Service, and use =MEDIAN() rather than the average. Then compare it with your settings:

  • Many bookings in the first bucket and a long minimum lead time? You may be turning away people who want to come in soon.
  • Almost nobody books beyond two weeks? A 365-day booking window isn't costing you anything, but it isn't helping either.
  • Reminder timing. If most people book two days out, a reminder 48 hours before goes out almost as soon as they book.

Change settings on the booking page or per service.

Doing this with BookingsXP#

If customers book through the BookingsXP widget or hosted page, each completed booking records its lead time in whole days. The dashboard home shows "booked N days ahead on average" (or "mostly same-day") for the last 30 days. On Pro, the events CSV export has slot_start and lead_days for every booking, so you can build the buckets above without a flow. With Store bookings switched on, the Pro bookings CSV also has each booking's created and start times. On Business, the REST API returns totals.avgLeadDays. There's no lead-time distribution chart, so the buckets are still an Excel job. The average and the appointment heatmap are hidden in Zero data retention mode. It only covers bookings through the widget or hosted page, not those made on Microsoft's own page or by staff. See analytics and pricing. BookingsXP is independent and not affiliated with or endorsed by Microsoft.

Questions people also ask

Sources

  1. Microsoft Learn: Reporting info (opens in a new tab) · learn.microsoft.com
  2. Microsoft Learn (opens in a new tab) · learn.microsoft.com
  3. Microsoft Learn (opens in a new tab) · learn.microsoft.com
  4. Microsoft Learn: Bookingbusiness list calendarview (opens in a new tab) · learn.microsoft.com
  5. Microsoft Learn: Workflow definition language functions reference (opens in a new tab) · learn.microsoft.com
  6. Microsoft Learn: Set scheduling policies (opens in a new tab) · learn.microsoft.com