Case Study
Custom Zoom & Acuity API Integration: Automating Bookings, Tracking Shows vs. No-Shows, and Breaking Native Limitations
Client Overview:
Challenge:
Inaccurate Participant Count: The client previously relied on manually counting the number of participants who joined Zoom meetings. This count was added at the end of each meeting, which often led to inaccuracies. Participants could leave early, and the client had no way of knowing exactly who joined and for how long. They only had a basic participant count with no detailed attendee information.
No Visibility into Shows and No-Shows: The client struggled to differentiate between attendees (Shows) and absentees (No-Shows) for their meetings. Neither Acuity Scheduling nor Zoom provided a way to capture this data effectively. Zoom requires registration to track attendee information, but the client wanted to avoid using Zoom’s registration process to maintain a seamless booking experience. As a result, they lacked the ability to generate attendee lists for follow-up campaigns or reporting.
Our Approach:
We implemented a custom solution using Acuity API and Zoom API, hosted on WP Engine. The codebase consisted of JavaScript, HTML, CSS, PHP, and SQL, with the database managed in PHPMyAdmin. Here’s a breakdown of our approach:
Custom API Setup:
- We created a Server-to-Server (S2S) app in the Zoom Marketplace to use APIs and webhooks.
- We developed custom PHP code to automatically create Zoom meetings with registration enabled whenever a time slot was added in Acuity Scheduling. This setup allowed for dynamic changes to meeting times, hosts, and participant lists, with all data stored in a database table.
Custom Booking Form:
We built a custom, three-step form identical to Acuity’s interface:
Step 1: Display available time slots fetched from Acuity Scheduling API.
Step 2: Collect user details (First Name, Last Name, Email, Phone) with validation.
Step 3: Display a thank-you page with the booking confirmation.
The form automatically registered users in the corresponding Zoom meeting and created a booking in Acuity Scheduling using their respective APIs.
Custom Reschedule and Cancellation Process:
- We developed custom pages for rescheduling and canceling meetings, as Acuity’s native process was incompatible with our setup.
- The custom code used both Acuity and Zoom APIs to update meeting times, delete old registrants, and register users in new meetings.
Backup SMS Reminder System:
The client’s SMS reminders from Acuity were blocked due to the long Zoom join links containing unique participant IDs.
We created a backup system to send 15-minute reminder SMS messages by:
Step 1: Running a daily cron job to fetch available classes from Acuity Scheduling and store them in a table.
Step 2: Running a second cron job every minute to check for upcoming meetings and send SMS reminders using Front API.
URL Shortener for Join Links:
To prevent long Zoom links from being flagged, we implemented a custom URL shortener to create user-friendly links for emails and SMS reminders.
Webhook-Based Attendance Tracking:
We set up a webhook in the Zoom S2S app to receive notifications when meetings ended.
Upon receiving a notification, our custom code:
- Fetched the meeting registrants from Zoom.
- Retrieved the list of participants who joined the meeting.
- Updated the attendance status in the database (Show or No Show).
Sent the attendee lists to Klaviyo using their API to categorize users into separate lists for follow-up.
Klaviyo Integration:
We used Klaviyo API to:
- Create profiles for attendees.
- Subscribe users to notifications.
Add users to appropriate lists for Shows and No Shows.
We also set up automated flows in Klaviyo to send emails to No Shows with a booking link for rescheduling.
Front API for SMS Communication:
- The client wanted to use Front for SMS communication to allow two-way messaging with support staff.
- We created a webhook flow in Klaviyo to send user data to our backend file, which used Front API to send SMS messages through a designated channel.
- We implemented A/B testing for SMS templates to optimize engagement.
Results:
Eliminated Manual Attendance Tracking: The custom integration completely removed the need for manual attendance tracking, streamlining the process and saving valuable time for the team.
Automated Show/No-Show Tracking: Every meeting now automatically tracks who attended and who didn’t. This data is seamlessly fed into their Klaviyo lists and incorporated into their analytics reports, ensuring accurate and real-time insights.
Increased Control Over Booking Calendar: The custom setup provided the client with enhanced control over their booking calendar, allowing for greater flexibility and ease of management compared to the native integration.
Automated Follow-Up for No-Shows: The solution ensures that no-shows are promptly followed up, with automated email and SMS reminders sent via Klaviyo, significantly improving customer engagement and retention.
Conclusion:
This custom Zoom and Acuity integration transformed the client’s meeting management system, automating key processes that were previously time-consuming and error-prone. By breaking the limitations of the native integration, we provided a robust solution that not only improved booking efficiency but also enhanced the client’s ability to track attendance and follow up with no-shows. The result is a smoother, more reliable system that offers greater insights and control, ultimately driving a better user experience and stronger business outcomes.