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
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
You'll need from GoHighLevel:
API Key or OAuth Connection
Location ID (sub-account)
Log into GoHighLevel
Go to Settings > API
Generate or copy your API key
Find your Location ID in GHL settings or the URL when viewing your sub-account.
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
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) |
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 |
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
Match field types (text to text, dropdown to dropdown)
Use consistent naming
Map all important fields
Test with a sample lead
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.
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.
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
In GHL, create a workflow
Set trigger: "Contact Tag Added" or "Custom Field Changed"
Use the SalesCal status values
Add your automation steps
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
Verify API key is correct
Check Location ID is valid
Ensure API access is enabled in GHL
Try regenerating API key
Verify connection is active
Check for sync errors in settings
Confirm GHL location is correct
Test with a new lead
Verify field mapping is saved
Check field types match
Ensure GHL field exists
Test the specific field
Creating custom fields needs write permission that older connections didn't grant. Disconnect and reconnect GoHighLevel to refresh permissions, then try again.
Review GHL duplicate settings
Check if email matching is enabled
Consider merging duplicates manually
Verify webhook/trigger is active
Check GHL automation is running
Look for GHL error logs
In SalesCal lead records:
GHL Contact ID: Shows if synced
GHL Synced At: Last sync timestamp
Sync Status: Success or error
To remove the connection:
Go to Settings > Integrations
Find GoHighLevel
Click Disconnect
Confirm
Note: Existing GHL contacts remain, but new leads won't sync.
Only lead data is sent to GHL
Follows your GHL privacy settings
You control what fields sync
Can disconnect at any time
Map all fields before going live
Test sync with sample leads
Set up automations for each status
Use same field names when possible
Keep custom fields organized
Document your mapping
Check sync status regularly
Address errors promptly
Review automation performance
Automate follow-ups
Create tasks for sales team
Segment leads by status/grade
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
Managing Leads - Lead management in SalesCal
Qualification Rules - Status triggers
Lead Grading - Scoring data sync