Setting default guest emails in Calendly popup widget not working

I’m trying to set up default guest email addresses when opening a Calendly popup widget. I’m using the initPopupWidget method and passing guest emails in the prefill configuration.

window?.Calendly.initPopupWidget({
  url: bookingUrl,
  prefill: {
    email: user.email,
    firstName: "",
    lastName: "",
    name: "",
    guests: ["[email protected]", "[email protected]"],
  },
});

The main email field gets populated correctly with user.email, but the guest email fields remain empty. I have to manually click the “Add Guests” button to see the guest email input section, and even then it shows up blank instead of having the predefined emails I specified in the guests array. Has anyone encountered this issue before or know what I might be doing wrong?

calendly’s guest prefill is definitely bugged. I tried this same thing last week and just gave up. the guests array gets completely ignored even though their docs say it should work. try passing guest emails as URL parameters instead - like &guests=email1,email2 in your bookingUrl. it’s worked for some people, but don’t expect help from calendly support on this one.

Been dealing with Calendly integrations for years - this guests array thing is broken by design. The widget loads the guest section dynamically, so your prefill data just disappears.

What works: intercept after the widget renders. I set a 500ms timeout after initPopupWidget, then use MutationObserver to watch for the guest section in the DOM. Once it shows up, directly set the input values.

Here’s the trick - don’t use Calendly’s prefill for guests at all. Store guest emails separately, then populate with vanilla JS afterward. Way more reliable than fighting their API.

Or if you control the booking flow, skip guest prefill entirely and handle attendee invites on your backend after booking completes. Less friction and actually works every time.

Had this exact problem a few months back with our Calendly booking system. Calendly’s guest prefill is pretty limited and won’t auto-expand the guest section or reliably populate fields through the API. I switched to the inline embed instead of the popup widget when I needed guest emails prefilled - works way better. If you’re stuck with the popup, try adding a short delay before initializing the widget, and make sure guest invitations are enabled in your event type settings. Also check that your event type actually supports guests - it’s disabled by default in some templates.

Yeah, Calendly’s prefill limitations are annoying, especially when you want to streamline booking. That guests array issue hits everyone.

I hit the same wall building a meeting scheduler for our team. Instead of wrestling with Calendly’s weird API, I just automated the whole thing with Latenode.

Here’s what I did: built a workflow that grabs guest emails from our form, then auto-sends calendar invites to everyone after booking. No more dealing with Calendly’s broken guest prefill or making users add attendees manually.

Latenode plugs straight into calendar systems and email services, so you can build exactly what you want. Full control over booking without platform headaches.

This completely killed the guest email problem for us. Users book through a clean interface, everyone gets notified automatically.

Check it out: https://latenode.com

Indeed, this is a common challenge users face with the Calendly popup widget. The guests array in the prefill configuration typically does not trigger the expansion of the guest section. A workaround I’ve used is to programmatically simulate a click on the “Add Guests” button after the widget has fully loaded, followed by using JavaScript to populate the guest input fields. You can attach a listener to the widget’s load event and utilize document.querySelector to target the guest input elements. If this approach fails, consider using Calendly’s scheduling links along with UTM parameters, which tend to provide a more reliable solution for guest email prefill. However, if your interface supports it, the inline embed option remains the most stable choice.