GoHighLevel CRM Integration
Connect GoHighLevel (GHL) to automatically sync leads and booking data to your CRM.
Benefits
- Automatic Lead Sync: Leads pushed to GHL automatically
- Status Updates: Booking status synced in real-time
- Custom Field Mapping: Form responses sync to GHL fields
- Workflow Triggers: Trigger GHL automations from bookings
Connecting GoHighLevel
- Go to Settings > Integrations
- Find GoHighLevel
- Click Connect
- Enter your GHL API credentials or authorize via OAuth
- Select your GHL location/sub-account
- Save the connection
API Credentials
You'll need from GoHighLevel:
- API Key or OAuth Connection
- Location ID (sub-account)
Finding Your API Key
- Log into GoHighLevel
- Go to Settings > API
- Generate or copy your API key
Location ID
Find your Location ID in GHL settings or the URL when viewing your sub-account.
How Sync Works
Lead Creation
When a lead is captured in SalesCal:
- Contact created in GHL
- Contact data mapped to GHL fields
- GHL contact ID stored in SalesCal
- Future updates use this ID
Sync Triggers
| Event | GHL Action |
|---|---|
| Step 1 Complete | Contact created (status: incomplete) |
| Qualification Pass | Contact updated (status: qualified) |
| Qualification Fail | Contact updated (status: disqualified) |
| Booking Complete | Contact updated (status: booked) |
Data Synced
| SalesCal Field | GHL Field |
|---|---|
| First Name | First Name |
| Last Name | Last Name |
| Phone | Phone |
| Custom Fields | Custom Fields (mapped) |
| Lead Score | Custom Field (optional) |
| Lead Grade | Custom Field (optional) |
| Event Name | Tag or Custom Field |
Custom Field Mapping
Map SalesCal form fields to GHL custom fields:
- Go to integration settings
- Find Field Mapping
- For each SalesCal field:
- Select the corresponding GHL field
- Or create a new GHL field
- Save mappings
Mapping Best Practices
- Match field types (text to text, dropdown to dropdown)
- Use consistent naming
- Map all important fields
- Test with a sample lead
One Saved Question, One GHL Field
Form fields come from your team's shared question library, so a question reused across several events still maps to a single GHL field — you won't get duplicate fields for the same question. Archived questions (from Settings → Questions) can't be picked for a new mapping, but a mapping created before the question was archived keeps working and still shows in your mapping list.
Tag Mapping
GHL has no "lead status" concept, so SalesCal applies tags as a contact moves through each stage. In Tag Mapping, map any of these stages to one or more GHL tags:
| Stage | Meaning |
|---|---|
| New | Started form, didn't finish |
| Qualified | Form completed, passed qualification rules |
| Disqualified | Failed qualification rules |
| Booked | Call is scheduled |
| Rescheduled | Call time changed |
| Cancelled | Booking cancelled |
| Completed | Call completed with an outcome |
When you add a tag, the field suggests tags that already exist in your connected GHL location, so you can pick an existing tag or type a brand-new one. If you type a new name, SalesCal creates the tag in GHL immediately — it shows up in your GHL tag list (and as a workflow trigger option) as soon as the mapping is saved, before any contact reaches that stage.
Tags are applied to a contact at the moment they enter a stage. Adding a mapping doesn't retroactively tag contacts that already passed that stage. If a contact syncs but its tags can't be applied, the sync appears as partial in the Sync Log with the reason, instead of reporting a clean success.
GHL Automations
Trigger Ideas
On Incomplete Lead:
- Send follow-up email
- Add to nurture sequence
- Notify sales rep
On Qualified Lead:
- Send confirmation
- Assign to rep
- Add to hot lead list
On Disqualified Lead:
- Send polite decline
- Add to long-term nurture
- Log for analysis
On Booking:
- Send preparation email
- Create task for rep
- Add calendar reminder
Setting Up Automations
- In GHL, create a workflow
- Set trigger: "Contact Tag Added" or "Custom Field Changed"
- Use the SalesCal status values
- Add your automation steps
Duplicate Handling
When a lead already exists in GHL:
- By Email: Existing contact updated
- New Contact: Created if no match found
- Merge Settings: Follow your GHL duplicate settings
Troubleshooting
"Failed to Connect"
- Verify API key is correct
- Check Location ID is valid
- Ensure API access is enabled in GHL
- Try regenerating API key
Leads Not Syncing
- Verify connection is active
- Check for sync errors in settings
- Confirm GHL location is correct
- Test with a new lead
Custom Fields Not Mapping
- Verify field mapping is saved
- Check field types match
- Ensure GHL field exists
- Test the specific field
Can't Create Fields in GHL ("not authorized" / permission error)
Creating custom fields needs write permission that older connections didn't grant. Disconnect and reconnect GoHighLevel to refresh permissions, then try again.
Duplicate Contacts
- Review GHL duplicate settings
- Check if email matching is enabled
- Consider merging duplicates manually
Status Not Updating
- Verify webhook/trigger is active
- Check GHL automation is running
- Look for GHL error logs
Viewing Sync Status
In SalesCal lead records:
- GHL Contact ID: Shows if synced
- GHL Synced At: Last sync timestamp
- Sync Status: Success or error
Disconnecting GoHighLevel
To remove the connection:
- Go to Settings > Integrations
- Find GoHighLevel
- Click Disconnect
- Confirm
Note: Existing GHL contacts remain, but new leads won't sync.
Data Privacy
- Only lead data is sent to GHL
- Follows your GHL privacy settings
- You control what fields sync
- Can disconnect at any time
Best Practices
Clean Setup
- Map all fields before going live
- Test sync with sample leads
- Set up automations for each status
Consistent Data
- Use same field names when possible
- Keep custom fields organized
- Document your mapping
Monitor Syncs
- Check sync status regularly
- Address errors promptly
- Review automation performance
Leverage Automations
- Automate follow-ups
- Create tasks for sales team
- Segment leads by status/grade
Advanced: Webhook Mode
For more control, use webhooks:
- Enable webhook mode in integration settings
- SalesCal sends events to your webhook
- Your system processes and syncs to GHL
- More flexibility for custom logic
Related Guides
- Managing Leads - Lead management in SalesCal
- Qualification Rules - Status triggers
- Lead Grading - Scoring data sync