Automations
Send GHL data to another app
Push contacts into Slack, Sheets, Zapier, Make or your own software the moment something happens in GHL.
What you'll get
- A live connection that pushes contact details out of GHL into any app that can receive a web request, the moment the thing you care about happens.
- It can fire on almost anything GHL knows about, not just a new contact: a tag added, a pipeline stage changed, an appointment no showed, a call missed, a form submitted.
- It shows up in the client's own Automation list, so they can see it, pause it, and edit it without you.
Say this
Send every new contact to my Slack channel.
When a contact moves to Consultation Booked, post them to this address: https://hooks.zapier.com/...
Show me every webhook in this account and where each one is sending data.
The pro prompt
The exact ask we run on real client accounts
Proven liveSet up a webhook in my [Radiance Med Spa] account. Fire it whenever a contact gets the tag [hot-lead], and send it to [https://example.com/my-receiver]. Add my own fields to what it sends: [clinic] set to [Radiance Med Spa], and [greeting] set to the contact's first name. Then show me exactly what will land at the other end, and tell me what happens if my receiver is down.
Click the box to select it, then press ⌘C (or Ctrl+C)
Everything in [brackets] is yours to change. Ask for the last part every time. What GHL sends is not what most people expect.
What happens when you ask
- Claude builds a small workflow in the account: your chosen trigger, and one step that sends the data out.
- It publishes it, so it starts working immediately, and hands you back its ID.
- Ask it to fire a test, and it will tag a throwaway contact so you can watch the request land before you trust it with real leads.
Good to know
- What arrives is a fixed set of contact fields, plus the sub-account details, plus which workflow sent it, plus any custom fields you asked for. Your own fields can include merge fields, so "the contact's first name" arrives already filled in.
tagsarrives as one comma separated line of text, not a list. This catches people out constantly. If the receiving app checks whether tags contains "vip", it will also match a contact tagged "vip-waitlist". Split on the comma first.- If the receiving app is down, GHL keeps trying, roughly five minutes later, then ten minutes after that. Nothing is thrown away.
- But the contact stops there while it retries, and so does everything after it in that workflow. If the send is not critical, put it at the end of the workflow, or give it a workflow of its own, so an outage at the other end cannot hold up your follow up.
- GHL has a paid "Custom Webhook" step that lets you replace the whole message with your own format. You almost never need it. Adding your own fields, your own headers, and choosing POST, GET or PUT all work on every plan.
Where people go wrong
| What happened | The fix |
|---|---|
| "I deleted the webhook and it deleted my whole nurture." | It will refuse to do that. A webhook here is a workflow, so if that workflow does other things too, Claude stops and tells you instead of deleting it. To just switch a webhook off, ask to set it back to draft. |
| "My receiver only got some of the leads." | Something earlier in the workflow is holding contacts up, or the send is behind a step that failed. Ask Claude to audit that workflow. |
"My code crashed on tags.map." | tags is text, not a list. Split it on commas first. |
| "I pointed it at a test address and forgot." | Ask for every webhook in the account and where each one sends. Old test addresses are the most common thing this turns up. |