Answer · Tracking & analytics

Why is RefID tracking blank or Bad Request in Bookings?

Last updated 5 min readPart of Microsoft Bookings conversion tracking: what works6 sources

The question people ask
“Why is RefID tracking data blank (or giving Bad Request) in Microsoft Bookings?”

Asked in Microsoft Tech Community (opens in a new tab), Microsoft Tech Community (opens in a new tab) and Microsoft Learn (opens in a new tab)

Short answer

RefID (a campaign code such as ?RefID=spring_ads added to your booking page link) is the only campaign tracking feature Microsoft documents for Bookings, and the value is meant to appear in the Tracking data column of the booking export. Since late 2023, users have reported two failures: the link returns a Bad Request page, or the booking goes through but Tracking data is blank. Microsoft hasn't posted a fix in those threads. Our own capture of the booking page in September 2026 shows the page does read RefID and store it on the appointment, so a blank value points to a code that was lost or mangled before the booking, or to the export itself, rather than to a page that ignores it. Test with a plain value before you rely on it.

How RefID is supposed to work#

The Bookings documentation on customizing the booking page says to add a campaign ID to the page URL, and gives this example:

Text
https://outlook.office365.com/owa/calendar/TailspinToys@contosopetscom.onmicrosoft.com/bookings/?RefID=Twitter

The same page adds two warnings. Campaign IDs may only contain letters, numbers, underscores or hyphens, and "make sure you test your Campaign ID url". In February 2024 a Microsoft employee confirmed on Tech Community that the ID "will get attached to the appointment" and appears in the exported appointment data.

The export is the only place Bookings shows it. Go to the Shared Bookings home page, select Export, pick a date range and download the TSV file. The Tracking data field is one of the newer report columns.

What people report#

WhenWhat happenedOutcome
Nov 2023Adding ?refID= gave a Bad Request page on 79 of one organisation's 80 booking pages, including with the example from the Microsoft documentationNo replies on Tech Community. The Q&A copy was deflected and locked.
Mar 2024 and Jan 2025Bookings were made through RefID links, but the Tracking data column was blank in the exportNo fix posted. The original poster said "it didn't work for us".
2023A user could see Tracking data in the export and wanted it through the Graph APIUnanswered

Other query strings have broken Bookings links too. See UTM parameters causing Bad Request.

What we saw when testing (September 2026)#

We captured the public booking page and the calls it makes (13 live captures in several time zones), read how the page handles its URL, and made, rescheduled and cancelled a handful of test bookings. On a current shared booking page:

  • The name isn't case-sensitive. The page takes the first query parameter called refid in any letter case: RefID, RefId and refid all work. If a link has two, only the first counts.
  • Bad characters are removed silently. Everything except letters, digits, _ and - is stripped before the value is saved. spring.offer becomes springoffer, and a value made only of disallowed characters becomes empty. There's no error, so a mangled code looks like a working one.
  • It is stored on the appointment. The value is saved with the booking as tracking data, and it was still there after we rescheduled the booking.
  • Personal pages don't carry it. On a "Bookings with me" page, the booking request has no tracking field, so RefID can't work there. It's a shared booking page feature.
  • The owner's calendar event doesn't show it. The event the owner receives in Outlook had no trace of the RefID, so staff won't see the campaign unless they look at the export or a flow.

We couldn't check the export or the Bookings web app ourselves (we had no owner access to the test page), so we can't say why some exports show the column blank. What the capture does rule out is the page simply ignoring RefID.

How to test and troubleshoot#

  1. Use a plain value. Start with something like ?RefID=test_01. No spaces, dots, % encoding, + or = in the value; they are stripped, not rejected.
  2. Make it the only parameter. Remove UTMs and any other query strings, then add them back one at a time once the plain version works.
  3. Try both URL formats. The Microsoft example still uses the older outlook.office365.com/owa/calendar/.../bookings/ address, while current pages use outlook.office.com/book/.... Microsoft doesn't say whether RefID behaves the same on both.
  4. Make a real test booking through the tagged link, not through the calendar view in the Bookings web app.
  5. Export as an administrator. The FAQ says only staff with the Administrator role can download the report. The Microsoft docs describe the window as four-month periods in one place and "the past 120 days" in another, so choose a range that includes today.
  6. Check a second source. If you have a Power Automate flow on When a appointment is Created, look at the TrackingData field in the run history. If it's filled there but blank in the export (or the other way round), you've narrowed down where the problem is.
  7. Check the link that was actually opened. Shorteners, email click-tracking and redirects can drop the query string, and a script that changes an iframe src after it loads can leave the first load untagged.
  8. If you get Bad Request, confirm the page opens without the parameter, then open a Microsoft support ticket with the exact URL. Community threads on this have been deflected, not fixed.

If RefID doesn't work for you#

Keep campaign data on your side. Tag inbound traffic to a landing page on your own site, record the source there, and link to Bookings with no parameters or only a short RefID code. The UTM parameters guide covers this, and GA4 conversion tracking explains how RefID fits into a server-side setup.

Doing this with BookingsXP#

BookingsXP doesn't depend on RefID. The widget captures UTMs, click IDs such as gclid and fbclid, the referrer and the landing page on your site, then writes them into the booking itself: into the booking notes, and optionally into a Bookings custom question you choose. Our test booking through the widget showed that summary (source and medium, campaign, first page, booked-from page, reference) in the notes of the Outlook event, which RefID never reaches. See analytics and attribution or try it with your booking page. BookingsXP is independent and not affiliated with or endorsed by Microsoft.

Questions people also ask

Sources

  1. Microsoft Learn: Customize booking page (opens in a new tab) · learn.microsoft.com
  2. Microsoft Learn: Reporting info (opens in a new tab) · learn.microsoft.com
  3. Microsoft Learn: Bookings faq (opens in a new tab) · learn.microsoft.com
  4. Microsoft Learn (opens in a new tab) · learn.microsoft.com
  5. Microsoft Tech Community: Ms bookings tracking data refid generate bad request page (opens in a new tab) · techcommunity.microsoft.com
  6. Microsoft Tech Community: Track conversions for appointments booked through microsoft bookings on gt4 (opens in a new tab) · techcommunity.microsoft.com