Connect GoHighLevel
Link your GoHighLevel account to sync contacts and pipeline data.
GoHighLevel (GHL) is the CRM backbone of your Adsu setup. When you connect GHL, Adsu gains access to your contacts, pipeline stages, appointment bookings, and conversation data. This is the single most important integration because it provides the contact database that every other part of Adsu builds on — ad attribution, funnel tracking, speed-to-lead metrics, and revenue matching all depend on having your GHL contacts synced.
What Gets Synced
- Contacts — All contacts in your GHL sub-account are synced, including name, email, phone, tags, and source information. New contacts created in GHL appear in Adsu within 30 minutes.
- Pipeline Stages — Adsu monitors your selected pipeline for stage changes. When a contact moves from "New Lead" to "Appointment Set" in GHL, Adsu updates their funnel stage and can send a conversion event to Meta.
- Appointments — When a contact books an appointment through your GHL calendar, Adsu automatically advances them to the "appointment_set" funnel stage.
- Messages — Inbound messages auto-advance contacts to the "contacted" stage. Outbound staff messages are tracked for speed-to-lead reporting.
Prerequisites
- A GoHighLevel account with an active sub-account for your gym location.
- At least one pipeline set up in GHL that represents your sales process (e.g., "Sales Pipeline" with stages like New Lead, Contacted, Appointment Set, Showed, Closed).
- Admin-level access to the GHL sub-account you want to connect.
Connection Steps
Open the Connections page
In your Adsu dashboard, navigate to Settings > Connections. You will see a list of available integrations. Find the GoHighLevel card and click Connect.

Authorize with GoHighLevel
Clicking Connect opens the GoHighLevel OAuth authorization screen. Sign in with your GHL credentials if prompted, then review the permissions Adsu is requesting. These include access to contacts, opportunities (pipeline data), calendars, and conversations.
Click Authorize to grant access. You will be redirected back to your Adsu dashboard.
Verify the connection
After redirecting back, the GoHighLevel card on the Connections page should now show a green "Connected" status. Adsu has securely stored your GHL access token (encrypted at rest) and will automatically refresh it before it expires.
Select your sales pipeline
Navigate to Settings > Funnel to map your GHL pipeline to Adsu's funnel stages. Select the pipeline that represents your gym's sales process from the dropdown. Adsu will load the pipeline stages so you can map them to funnel stages like new, contacted, appointment_set, showed, closed, and active_member.
See Configure Funnel Stages for detailed instructions on mapping your pipeline.
Initial data backfill
Once connected, Adsu automatically kicks off a 90-day historical backfill. This pulls in your existing GHL contacts so the dashboard is populated immediately. You do not need to wait for new leads to start seeing data.
The backfill typically completes within a few minutes. You can monitor progress on the Dashboard > Sync page.
Webhook Setup
Adsu automatically registers webhooks with GoHighLevel during the OAuth connection process. These webhooks enable real-time updates for:
- Pipeline stage changes — When a contact's opportunity moves to a new stage or status in your selected pipeline.
- Inbound messages — When a lead sends a message through SMS, email, or chat.
- Outbound messages — When a staff member sends a message (used for speed-to-lead tracking).
AppointmentCreate Webhook
The AppointmentCreate webhook must be manually enabled in the GoHighLevel developer portal. This is the webhook that allows Adsu to auto-advance contacts to the "appointment_set" stage when they book through your GHL calendar.
To enable it: go to the GHL Marketplace Developer Portal, open your app settings, navigate to Webhooks, and add AppointmentCreate to the list of subscribed events. No extra OAuth scopes are required.
How GHL Data Flows Through Adsu
Understanding how GHL data moves through Adsu helps you get the most out of the integration:
- Contact sync (every 30 minutes) — Adsu polls GHL for new and updated contacts via the search API. This serves as a catch-up mechanism in case any webhooks are missed.
- Stage catch-up sync — During each contact sync, Adsu also checks pipeline opportunity stages. If a contact's stage in GHL is ahead of their Adsu funnel stage, Adsu advances them (advance-only, never demotes).
- Real-time webhooks — For faster updates, GHL webhooks push stage changes, appointment bookings, and messages to Adsu in real time.
- Matching engine — Once contacts are synced, the matching engine (runs every 30 minutes) links them to ad touchpoints using email, phone, visitor fingerprints, and other signals.
- CAPI feedback — When a contact advances through funnel stages and originated from a Meta ad, Adsu sends conversion events back to Meta via the Conversions API.
Token Management
GHL access tokens are short-lived but Adsu handles renewal automatically. A background job runs every hour to check for tokens expiring within the next 2 hours and refreshes them proactively. You should never need to manually re-authorize your GHL connection unless you revoke access from the GHL side.
Already using the GHL Marketplace?
If you install Adsu through the GoHighLevel Marketplace (rather than connecting from the Adsu dashboard), the OAuth flow works the same way. Adsu detects marketplace-initiated installs and completes the setup automatically. You will still need to select your pipeline and map funnel stages after the initial connection.
Troubleshooting
- Connection fails or redirects back without connecting — Make sure you are signing in with the correct GHL sub-account. Adsu needs sub-account level access, not agency-level access.
- Contacts not appearing — Check the Sync page in your dashboard. The initial backfill may still be running. Contacts should appear within 5 minutes of connecting.
- Pipeline stages not syncing — Ensure you have selected a pipeline on the Settings > Funnel page. Without a selected pipeline, Adsu cannot track stage changes.
- Appointments not triggering stage advances — Verify that the AppointmentCreate webhook is enabled in the GHL developer portal (see the warning above).