How the GoHighLevel Integration Works
The GoHighLevel integration keeps your Pabau clients in step with the contacts in a GoHighLevel sub-account. Contacts sync both ways — new and updated Pabau clients are pushed to GoHighLevel in near real time, and contact changes made in GoHighLevel flow back into Pabau — while appointment activity and lead outcomes land on the GoHighLevel contact as tags your marketing agency can build workflows on.
This is a connector inside Pabau's Data Sync tool. If you're new to Data Sync, read How Data Sync works in Pabau first for the general concepts (triggers, mapping, the delivery log and retries). This guide covers everything specific to GoHighLevel.
NOTE: The GoHighLevel integration is being rolled out gradually. If you don't see it in your App Marketplace yet, contact support to have it enabled for your account. You need administrator access in Pabau to set it up.
What the connector does
- Creates or updates a GoHighLevel contact when a client is created or edited in Pabau.
- Brings contact changes made in GoHighLevel back into Pabau — and can optionally create new Pabau clients from unmatched GoHighLevel contacts (off by default).
- Adds a tag to the synced contact when an appointment is booked, changed or cancelled (
pabau-appointment:booked,pabau-appointment:updated,pabau-appointment:cancelled). - Adds a tag when a lead is marked won or lost (
pabau-lead:won,pabau-lead:lost) — closing the loop for your agency's ROI reporting. - Optionally deletes the GoHighLevel contact when a client is deleted in Pabau (off by default).
NOTE: The connector syncs the client / contact object only. Appointments and leads are represented as tags on the contact, not as GoHighLevel appointments or opportunities. A contact deleted in GoHighLevel is never deleted in Pabau — medical records are retained, and erasure only ever flows from Pabau outwards.
Before You Start
The connection uses GoHighLevel's own sign-in (OAuth) — there are no API keys to copy. You'll need:
- A GoHighLevel account — yours, or one your marketing agency manages for you.
- A sign-in that can access the sub-account (location) you want to connect, and permission to authorise apps for it. If an agency runs GoHighLevel for you, ask them which sub-account is yours.
Step 1: Connect Your GoHighLevel Account
You can start from either of two places:
- Setup > App Marketplace — select the GoHighLevel tile. It takes you straight into the Data Sync setup below.
- Data Hub > Data Sync — select Add connector, choose GoHighLevel, and select Set up.
The first step of the setup asks you to connect your account. Select Connect GoHighLevel — a GoHighLevel window opens where you sign in, pick the sub-account to connect, and approve the access. Once you approve, the window closes and Pabau creates the connection automatically, then opens it so you can review the triggers, field mapping and settings described below.
TIP: If your browser blocks the pop-up window, allow pop-ups for Pabau and select Connect GoHighLevel again.
Step 2: Triggers
On the Triggers tab, choose which Pabau events are pushed to GoHighLevel:
client.create/client.update→ Create or update GoHighLevel contacts (on by default).client.delete→ Delete GoHighLevel contacts (off by default).booking.create/booking.update/booking.canceled→ Tag GoHighLevel contacts with appointment status (on by default).lead.won/lead.lost→ Tag GoHighLevel contacts with lead outcome (won/lost) (on by default).
IMPORTANT: Once client.delete is switched on, deleting a client in Pabau always deletes the linked GoHighLevel contact — even if you've set the contact sync direction to inbound only. This is deliberate, so an erasure honoured in Pabau is honoured in GoHighLevel too. Leave it off if your agency needs deleted clients to remain as contacts in GoHighLevel.
Step 3: Field Mapping
On the Mapping tab, expand Contacts to see how Pabau client fields map to standard GoHighLevel contact fields. The default mapping is:
- Email → Email (required — see how matching works below)
- First name → First name
- Last name → Last name
- Mobile phone → Phone number
- Street address → Street address
- City → City
- County / province → State / region
- Postcode → Postal code
- Country → Country
- Date of birth → Date of birth
Turn a row off to stop that field syncing, retarget a row to a different GoHighLevel field (for example Company name, Website URL, Contact source or Timezone) using the dropdowns, or add rows for your own custom fields. The contact group's direction control decides whether contacts sync both ways (the default), outbound only (Pabau → GoHighLevel) or inbound only, and the Data conflict resolution setting decides which side wins when it's unclear which has the newer data — Pabau is the source of truth by default.
NOTE: GoHighLevel has a single standard phone field, so Pabau's Mobile phone maps to it by default — that's the SMS-reachable number GoHighLevel campaigns text and dial.
The Appointments and Leads groups below the contact mapping are composed automatically — they show how appointment status and lead outcome become tags on the synced contact. There's nothing to map by hand; switch them on or off from the Triggers tab.
Step 4: Sync Settings
On the Settings tab you'll find the connection card — showing the connected GoHighLevel account, with the option to disconnect — and two sync options:
- Create missing records on update (default Yes) — editing a client that has never synced creates the contact in GoHighLevel instead of skipping it.
- Create new clients from GoHighLevel contacts (default No) — when on, GoHighLevel contacts that match no existing client are created as new Pabau clients. Matched contacts still sync either way.
Use Test connection to confirm Pabau can reach your GoHighLevel sub-account.
IMPORTANT: Leave Create new clients from GoHighLevel contacts off unless you're sure you want it. GoHighLevel locations often hold large volumes of marketing contacts, and switching this on creates a Pabau client for every new unmatched contact your agency adds.
How Records Are Matched
When a contact changes in GoHighLevel, Pabau works out which client (if any) it belongs to:
- A client that has already synced with that contact is always used — the stored link is authoritative.
- Otherwise, if the contact's email matches exactly one Pabau client, that client is linked and updated.
- If the email matches more than one client, or matches a client already linked to a different GoHighLevel contact, nothing is written — the change is skipped rather than guessed. Contacts without an email address are never matched by guesswork either.
If nothing matches, a new Pabau client is created only when Create new clients from GoHighLevel contacts is on. In every case, older data never overwrites newer data — each side's changes only apply when they're newer than what the other side already holds.
Working With the Tags in GoHighLevel
Appointment and lead activity arrives in GoHighLevel as tags on the synced contact:
pabau-appointment:booked— an appointment was booked.pabau-appointment:updated— an appointment was changed or rescheduled.pabau-appointment:cancelled— an appointment was cancelled.pabau-lead:won— a lead was marked won.pabau-lead:lost— a lead was marked lost.
Your agency can use these as triggers for GoHighLevel workflows — confirmations, review requests, reactivation campaigns, or closed-loop ROI reporting. Pabau only ever adds its own tags; it never removes or replaces the tags your agency already keeps on a contact.
Test It End to End
On the Mapping tab, select Send test event, choose an event such as client.update, and select Send test. Pabau picks a real client, pushes it through the live pipeline, and records the result in the log labelled as a test. Open the Logs to confirm it succeeded, then check the contact in GoHighLevel.
Reading the Delivery Log
Select Logs on the connector to see every delivery — including the exact request Pabau sent, the response GoHighLevel returned, and a correlation ID for support tickets. Failures follow the standard Data Sync rules: temporary problems (rate limits, network errors, GoHighLevel server errors) retry automatically on a widening schedule, while permanent rejections show the reason so you can fix the data and re-send with Sync latest data. See How Data Sync works in Pabau for the full guide to statuses, retries and re-sending.
Disconnecting
To stop the sync, open the connector's Settings tab and disconnect the GoHighLevel account, or pause or delete the connector from its card in Data Hub > Data Sync. Disconnecting stops syncing in both directions; the delivery history is kept for audit.
Related articles
- How Data Sync works in Pabau