Automatically push GHL leads into WiseRep calling campaigns — and send call transcripts, summaries and conversion status straight back to GHL when every conversation ends.
WiseRepHow it works
One webhook pushes new GHL leads into a WiseRep campaign. The second sends call results back to GHL after every completed conversation.
A workflow step fires when a contact qualifies — form submitted, tag applied, pipeline stage changed, or any GHL trigger you choose.
GHL POSTs the contact's name, phone and campaign tag to WiseRep's inbound webhook at api.wiserep.com/api/webhook.
WiseRep matches the tag to a campaign, queues the contact and the assigned AI agent makes a natural-voice call.
After every completed call WiseRep sends transcript, AI summary, conversion status and call length back to your GHL workflow.
| Direction | From | To | Purpose |
|---|---|---|---|
| Inbound | Go High Level | WiseRep | Send a new lead into a WiseRep campaign |
| Outbound | WiseRep | Go High Level | Send call results back after every completed call |
Prerequisites
Tags are how WiseRep routes incoming GHL leads to the correct campaign. Every campaign that receives GHL leads must have a unique tag.
Rules for tags
| Example Tag | Use Case |
|---|---|
ghl-sales | Main outbound sales campaign |
q3-real-estate | Quarterly real estate outreach |
webinar-follow-up | Post-webinar lead follow-up |
inbound-form | Leads from a website contact form |
This webhook tells GHL to send lead data to WiseRep whenever a contact qualifies.
POST https://api.wiserep.com/api/webhookIn Go High Level:
Phone number format
Numbers must be in international format — +12125550100, not 2125550100. If GHL's contact.phone doesn't include the country code, prepend it manually: "+1{{contact.phone}}".
Example request body
{
"full_name": "{{contact.full_name}}",
"phone": "{{contact.phone}}",
"tags": "ghl-sales",
"email": "{{contact.email}}",
"company": "{{contact.company_name}}",
"website": "{{contact.website}}"
}| Field | Type | Required | Description |
|---|---|---|---|
full_name | string | Yes | Contact's full name |
phone | string | Yes | Contact's phone number in international format |
tags | string | Yes | The WiseRep campaign tag (must match exactly) |
email | string | No | Contact's email address |
company | string | No | Contact's company name |
website | string | No | Contact's website |
This tells WiseRep where to send call results after every completed call from a tagged campaign.
From this point forward, every time a call completes on a tagged campaign, WiseRep will POST the results to that URL.
Example payload WiseRep sends to GHL
{
"to": "+12125550100",
"status": "completed",
"summary": "Sarah expressed strong interest in the enterprise plan and requested a follow-up demo on Thursday at 2pm.",
"transcript": "Agent: Hi Sarah, this is Alex calling from WiseRep — is now a good time?\nSarah: Hi Alex, yes I've been expecting your call...",
"converted": true,
"callLength": 187
}| Field | Type | Description |
|---|---|---|
to | string | The phone number that was called |
status | string | Call outcome: completed, no-answer, voicemail, or failed |
summary | string | AI-generated summary of the conversation and outcome |
transcript | string | Full word-for-word transcript of the call |
converted | boolean | true if the lead was marked as converted, false otherwise |
callLength | number | Duration of the call in seconds |
Once call data lands in GHL, you can use it to drive follow-up actions. Common setups:
| GHL Action | Condition | Example Use |
|---|---|---|
| Apply a tag | converted = true | Tag contact as interested |
| Apply a tag | converted = false | Tag contact as not-interested |
| Add a note | Always | Save summary to the contact's activity timeline |
| Update custom field | Always | Store transcript and callLength on the contact record |
| Enroll in sequence | converted = true | Trigger a follow-up email or SMS nurture sequence |
| Notify team member | converted = true | Alert a rep to follow up on a hot lead |
Use GHL's If/Else branches in your workflow to split on the converted field and route leads into the appropriate follow-up path.
Under the hood
Extracts full_name, phone, tags, and any other fields from the payload.
Splits tags by comma — a single payload can include multiple tags (e.g., "tags": "ghl-sales,urgent") and WiseRep matches the first campaign found.
Looks up the campaign by tag.
If a campaign is found: the contact is immediately added to the campaign's dial list and will be called according to the campaign's schedule and preferred calling hours.
If no campaign exists yet with that tag: the lead is stored safely and will be automatically retroactively added to the campaign as soon as one is created with a matching tag — no leads are ever lost.
All fields included in the payload (email, company, website, or any custom fields) are stored on the lead record and available as variables in your agent's prompt:
Hi {full_name}, this is Alex calling from WiseRep on behalf of {company}...Troubleshooting
| Check | What to do |
|---|---|
| Tag mismatch | Confirm the tags value in your GHL webhook body exactly matches the tag on the WiseRep campaign — it's case-sensitive |
| Campaign status | Leads can only be added to campaigns with status Scheduled or Active — not Completed or Cancelled |
| Workflow not firing | In GHL, open the workflow's execution history and confirm the webhook action ran. Check for errors on the webhook step |
| Wrong URL | Confirm you're posting to https://api.wiserep.com/api/webhook (not a staging or test URL) |
| Check | What to do |
|---|---|
| Integration not enabled | Go to Integrations → Go High Level in WiseRep and confirm the toggle is On |
| No tag on campaign | The outbound webhook only fires for calls from campaigns that have a tag set — verify your campaign has a tag |
| Wrong GHL URL | Confirm the URL in WiseRep's integration settings matches the webhook trigger URL in your GHL workflow |
| GHL workflow not published | In GHL, make sure the receiving workflow is Published, not in draft |
| Single calls excluded | Calls made via Calls → New Call are not attached to a campaign and will not trigger the outbound webhook |
| Check | What to do |
|---|---|
| Missing country code | Ensure GHL is sending numbers in international format: +12125550100 |
| GHL strips the + | Some GHL configurations omit the +. In your webhook body, use: "+{{contact.phone}}" or "+1{{contact.phone}}" |
| Invalid format | Avoid spaces, dashes, or parentheses — WiseRep expects a clean E.164 number |
Leads arrived before the campaign was created
No action needed. WiseRep stores all inbound webhook data even when no matching campaign exists. The moment you create a campaign and assign the matching tag, WiseRep will automatically retroactively add all previously received leads with that tag into the campaign's dial list.
See the two-way GHL sync live in a 20-minute demo, or start a free trial and connect your first workflow today.