Multi-attendee booking automation in GoHighLevel - Need help with contact creation and appointment linking

What I’m trying to accomplish:

I need to set up automated booking for meetings with multiple people where some attendees might not be contacts in GoHighLevel yet. The tricky part is making sure everyone gets proper calendar invites and that all attendees become GHL contacts linked to the same appointment.

Current challenges:

  • GHL’s built-in calendar only connects the main person booking
  • When I add extra attendees, they only work if those people are already contacts
  • I tried using Make to watch my Google Calendar and create contacts automatically, but the new contacts don’t get connected to the original appointment
  • This breaks my follow-up sequences because the system can’t tell which contacts were at which meetings

What I need the system to do:

  1. Allow booking forms to accept multiple email addresses (even for people not in GHL)
  2. Send real calendar invitations to everyone (not just reminder emails)
  3. Create new GHL contacts for anyone who isn’t already in the system
  4. Link all attendees to the same appointment record
  5. Trigger follow-up workflows for each person based on their attendance

Tools I can work with:

I mainly use Make for automation but I’m open to Zapier or other solutions if they’re more reliable for this specific use case.

Questions:

  • Has anyone built a working solution for this scenario?
  • What’s the best way to maintain the connection between contacts and appointments?
  • Any issues with API rate limits or duplicate contact creation?
  • Would love to see examples of working automation flows

Thanks for any help or suggestions you can share!

Just dealt with this headache and found a workaround that actually works. Skip fighting GHL’s booking system - use it for the main contact only. Then build a separate intake form to grab all attendee emails. My Make scenario pulls those emails, creates contacts if they don’t exist, and links everyone with a custom appointment reference field. Here’s the key: treat each multi-person meeting as an opportunity in GHL’s pipeline. Attach all contacts as participants to that opportunity. Your follow-ups will work perfectly because the relationship lives in the opportunity record, not in GHL’s broken appointment system.

Had this exact issue with a client doing group consultations. Here’s what worked: don’t fight GHL’s native booking system - it can’t handle multiple unknowns well. I built a custom form to collect all attendee emails first, then used Make to process everything step by step. First scenario creates any missing contacts with a temp tag. Second scenario builds the appointment and links everyone through the GHL API. The game-changer? Store the appointment ID as a custom field for each attendee. This keeps everyone connected even when GHL’s native linking craps out. For calendar invites, skip GHL completely. I use Google Calendar API to send invites with all attendees included - way more reliable. Trigger follow-ups based on appointment tags, not GHL’s attendance tracking (it’s garbage for group bookings). Add small delays between contact creation calls to avoid rate limits. Use email lookup to prevent duplicates before creating new records.

I faced a similar problem a while back, and I can share what’s worked for me. Instead of relying entirely on GHL, I set up a dedicated webhook to capture booking information before it interacts with the GHL system. My process involves using a Make scenario that catches the form submission and validates the email addresses. Then, I create a master appointment record and loop through each attendee’s email to either find their existing contact or create a new entry, ensuring each one is tagged back to the master appointment. This approach treats the appointment as the primary entity rather than just linking contacts. For sending calendar invites, I bypass GHL and integrate directly with the client’s calendar, which eliminates synchronization issues. As for follow-ups, since every contact retains a reference to their appointment, I can trigger workflows seamlessly based on the appointment’s status without worrying about contact relationships. This method allows me to process appointments for multiple attendees in just a few seconds while avoiding duplicate contacts and ensuring that all links remain intact.