Direct HighLevel connection · 8 min read
How to automate review requests after HighLevel appointments
Written by Mannie Gill, Founder & Lead Developer at EmbedMyReviews. LinkedInPublished
Connect the client’s HighLevel sub-account to EMR with a Private Integration token and Location ID. EMR checks appointments every 15 minutes and schedules review requests after they end. You can select calendars and require an explicit Showed status, without building a HighLevel workflow or a Zap.
TL;DR
The short version
- Use the GHL card in EMR Automations.
- Use a Private Integration token beginning pit-, not the old Business Profile API key.
- Choose Only when marked Showed if staff reliably record attendance. Otherwise understand that an unmarked no-show can receive a request.
Before you set this up
This native guide follows calendar appointments. If the client records completion in a pipeline stage, its existing workflow can post directly to EMR’s inbound webhook.
Use a HighLevel workflow for completed jobs instead →What happens automatically?
- 01
HighLevel appointment ends
- 02
EMR checks calendar and attendance
- 03
The campaign sends at your chosen time
Choose this when: A salon, clinic, consultant or service business already uses HighLevel calendars to record real customer appointments.
Choose another route when: A business that only wants a request when an invoice is paid or a deal stage changes. This native trigger follows appointments.
Who does what?
The business owner
Provides a sub-account token and Location ID, confirms the right calendars and agrees who updates attendance.
You, the agency
Sets the matching EMR campaign, calendar and attendance rules, performs the tests and watches skipped or failed events.
Set up EMR Automations while signed in as the agency owner and working in the intended client location. The business owner handles access to their own software. They do not need your agency login or a daily EMR task.
A message you can send the business owner
“We can request reviews after appointments in your HighLevel calendar. You will provide a connection token for this business and its Location ID. Together we will choose the right calendars and decide how your team records attendance. I will connect and test the review campaign; your staff will keep using HighLevel.”
Once it is connected
Staff keep appointments and contact details accurate in HighLevel. If you choose Only when marked Showed, they must mark attendance before the request is due. You manage the EMR campaign and check for skipped or failed appointments.
Have these ready
- An appointment campaign and working sender in the correct EMR location.
- Permission to create a Private Integration in the client’s HighLevel sub-account.
- Contacts with usable email or phone details for the campaign channel.
First client? Prepare the review campaign first
From your agency, open Business → Customers → Manage Customers → Open dashboard (or the Customer tab if shown). Select the business location you are setting up.
A campaign is the review message and any follow-ups you want EMR to send. A feedback form controls where the customer is invited to leave their review.
Use Grow → Review Tools → Feedback Forms to prepare the customer’s review destination, then Grow → Campaigns → Request Reviews to create the campaign. Choose its feedback form, message and working sender. Start with one email step for this walkthrough. Add your own test contact through Grow → Campaigns → Invites and verify the message and link.
Set the campaign’s sending window and duplicate-request window. Honour opt-outs. For Google review campaigns, ask eligible customers consistently, leave review gating off and offer no incentives.
Do I need to understand APIs or write code?
No code, HighLevel workflow or Zap is needed. A Private Integration token lets EMR check this business’s calendars. You paste that token and the Location ID into the GHL wizard; EMR checks appointments automatically.
A key or token is a private connection credential. A webhook is an automatic notice that something happened, such as a payment completing. Keep connection credentials private; the business owner does not need to share their everyday login password.
The walkthrough
Set it up, step by step
Token, location ID and calendar selection. Work through this together the first time.
Business owner
Create a token in the client sub-account
In the HighLevel sub-account, open Settings → Private Integrations and create an integration. If the option is unavailable, ask the HighLevel account administrator to check access.
Select View Contacts and View Calendars & Calendar Events. Copy the Private Integration token securely. Copy the Location ID from Settings → Business Profile as well.
Before moving on: The token belongs to this business’s sub-account and starts with pit-.
Agency
Open the GHL connection in EMR
From your agency account, open the client dashboard and select the correct location. Go to Connect → Integrations → Automations. On the GHL card, click Connect GHL. If it already shows Manage GHL, open that and choose New Integration.
Enter a useful connection name, the Location ID and Private Integration token. Click Validate Connection, then continue.
Before moving on: EMR can list the calendars from the correct HighLevel sub-account.
Together
Select only the customer calendars you need
Choose specific calendars to exclude sales calls, internal meetings and unrelated services. All calendars also includes calendars added later.
Decide how staff record attendance. Choose Only when marked Showed for an explicit completion check. Choose Send unless cancelled or marked no-show only if an unmarked appointment should be treated as attended.
Before moving on: The attendance rule matches what the staff actually do every day.
Agency
Set the campaign and timing
Select the campaign and a delay after the appointment, up to seven days, or The next morning in the correct timezone.
Optional Only these tags accepts comma-separated HighLevel contact tags. A contact needs at least one of those tags. Use tags for genuine service eligibility, not to select only happy customers.
Set enough delay for reception to mark attendance. In Only when marked Showed mode, EMR must confirm Showed when the request is due. If it is skipped, marking attendance later does not automatically retry it.
Before moving on: A normal attended customer meets the calendar, contact, tag and attendance rules.
Together
Activate and test an attended appointment and a no-show
Review the settings and click Activate Integration. Create test appointments using your own contact record and the selected calendar.
Allow for the 15-minute check interval and your configured delay. Run both the attended and no-show tests below before relying on the automation.
Before moving on: You receive one correctly branded request for the eligible appointment and none for the excluded one.
Example: a salon records attendance after a treatment
A treatment ends at 11 am and reception marks it Showed. EMR picks it up on a scheduled check and schedules the campaign using the appointment end time. With a one-hour delay, the intended enrolment time is noon. Polling and campaign sending rules mean this is not a promise of delivery to the exact minute.
How to know it is working
Follow the event all the way to a message you receive. A green connection or a successful test response is only part of that journey.
Where to look: Open Automations → GHL, click the connection name and check Recent appointments. Read any skipped reason. Then find the test contact under Grow → Campaigns → Invites and verify the message in your inbox. In the automation’s activity, Sent means the contact was passed to the campaign; the inbox check confirms the message actually arrived.
When to expect the message: Set the first-request delay here in the automation. EMR does not add the campaign’s first-step delay on top, but its allowed sending hours still apply. For example, a request due at 8 pm waits if the campaign only sends between 9 am and 6 pm. Follow-up timing stays in the campaign.
Testing again? Use another email address you control for a second successful-send test. Reusing the first address can correctly trigger your duplicate-request rule. Keep that protection on for real customers.
Test 1: Complete a test appointment on a selected calendar; mark it Showed if using strict attendance.
Expected result: After the next check and configured delay, verify both the activity entry and the message in your own inbox or phone.
Test 2: Mark a second appointment no-show or cancelled while its request is still Scheduled in the automation.
Expected result: EMR stops that appointment’s pending request after learning its status. Do not use an already-processed appointment as the cancellation test.
Test 3: In strict mode, leave a test appointment without Showed.
Expected result: No request sends. This demonstrates why someone must own attendance updates.
If something does not work
The token is rejected
Use a sub-account Private Integration token, not a legacy API key. Check the Location ID and both permission groups.
Appointments are visible but all are skipped
Read the reason in Recent appointments. Check the contact is attached, has an email or phone, is not marked DND (Do Not Disturb), and meets the calendar and tag rules. With Only when marked Showed, staff must update attendance before the request is due; EMR also needs to reach HighLevel to confirm it.
Customers receive two requests
Check whether an existing HighLevel reputation workflow is also active. Choose one owner for automated review invitations and retain the EMR campaign’s duplicate window.
At handover, record the connection name, source account, client location, campaign, timing, test result and person responsible for failures. Test again after changing the workflow. Keep passwords, API keys and private webhook URLs out of the handover notes.
Cost, reliability and the simpler alternatives
Cost: Use the existing HighLevel account and EMR subscription. No separate bridge is needed. Check access to Private Integrations in the client sub-account; email and SMS sending remain separate costs.
Reliability: EMR checks every 15 minutes and rechecks attendance before passing the contact to the campaign. It excludes cancellations and no-shows it learns about in time. Changing attendance after that handoff does not withdraw a queued campaign request. Keep appointment statuses up to date.
When to use something else: Use Square or Stripe when payment after service is the meaningful event. If the business only needs a simple shared appointment diary, Google Calendar may be easier to maintain than adding HighLevel solely for reviews.