Skip to main content
GoHighLevel and ClickFlare Integration HighLevel (often called GoHighLevel) is a CRM and marketing automation platform with its own funnels, forms, calendars, pipelines and workflows. Agencies and lead-gen teams use it to capture leads, book calls and track opportunities to a sale. This guide sends the steps that matter back to ClickFlare:
  • ClickFlare → HighLevel: ClickFlare passes its click ID to your funnel page, and the form saves it on the contact in a custom field.
  • HighLevel → ClickFlare: when a workflow reaches the step you choose, the Custom Webhook action sends the conversion to ClickFlare with that click ID.
Each step arrives as its own custom conversion, so opt-ins, booked calls and sales show as separate columns next to your ad cost. An optional last section covers the reverse direction.

At a glance

To set up GoHighLevel with ClickFlare:
  1. Create conversions, campaign and offer.
  2. Create the click ID custom field.
  3. Save the click ID from the form.
  4. Add the Custom Webhook action.
  5. Write the body and repeat.
Each step is explained in Setup.

How the data flows


What you’ll need

  • A ClickFlare account with your own tracking domain. See Tracking domains.
  • A HighLevel account with workflows, and a form or funnel that can keep a URL parameter in a hidden field.
  • Access to add the Custom Webhook action. HighLevel bills some workflow actions per execution as premium actions. Check in your account whether Custom Webhook is one of them before you send high volume through it.

Setup

1

Set up your own tracking domain

Add a custom tracking domain, for example trk.yourdomain.com, under Tracking domains. Every Custom Webhook action points at it.
2

Create a custom conversion for each step

In ClickFlare, go to Settings → Custom Conversions and create one per step you report:The parameter of each custom conversion is the ct value the workflow sends. It must match exactly. See Custom conversions.
3

Create the campaign and add your funnel page as the offer

Go to Campaigns → New Campaign and pick your traffic source and tracking domain. See Creating a campaign.In the campaign path, create a new offer inline with the funnel page that holds your form:
Keep the braces. Set the offer payout to Auto so ClickFlare uses the payout HighLevel sends. Save the campaign and copy the campaign URL for your ads.
4

Create the click ID custom field

In HighLevel, create a contact custom field of a text type, for example ClickFlare Click ID.
5

Save the click ID from the funnel form

Add the custom field to your form as a hidden field and set it to take its value from the cf_click_id URL parameter. Check your form builder’s field settings for the option that fills a field from the URL. HighLevel’s help center doesn’t document it in the article this guide is based on, so test with one submission and check the contact record.If your funnel has several pages, the click ID must reach the page with the form. Keep the parameter on links between pages, or put the form on the first page.
6

Add the Custom Webhook to a workflow

Go to Automation → Workflows and open the workflow for the step, for example one triggered when an appointment is booked. Click + Add action → Send Data → Custom Webhook and name it, for example “ClickFlare booked call”.
7

Configure it as a JSON POST

  1. Set Event to CUSTOM. This shows Method, Content-Type and the Raw Body editor.
  2. Set Method to POST.
  3. Enter the URL https://trk.yourdomain.com/cf/cv.
  4. Set authorization to none. ClickFlare’s postback doesn’t need it.
  5. Set Content-Type to application/json.
  6. In Raw Body, write the JSON and insert the click ID field with the tag icon (the dynamic value picker):
Replace CLICK_ID_FIELD with the dynamic value the picker inserts for your ClickFlare Click ID field. It looks like {{contact.id}} but with your field’s key. Keep the quotes around it.For a sale, add "txid" with a value unique per conversion, such as an opportunity or order ID, so several sales on one click stay apart. See Steps, payout and duplicates.Click Save Action.
Don’t use Event = POST. That mode sends a form-style key/value body, not JSON. ClickFlare’s JSON endpoint needs a JSON body, so use CUSTOM, or the GET option below.
8

Repeat for each step

Add a Custom Webhook in each workflow you report from, each with its own ct. Then test (see Verify the setup).

Option: GET postback with query parameters

Use Event = GET if you prefer the URL postback. It carries the same values as the JSON body, txid included. GET sends no body. Add these under Query Parameters, using the tag icon for dynamic values: The request matches this postback:
Note the key is click_id in the URL and cf_click_id in a JSON body.

Steps, payout and duplicates

One step, one ct. A conversion with a different ct on the same click is added as a new conversion. A contact who opts in, books and buys shows once in each column, so you see cost per lead, cost per booked call and cost per sale side by side. Payout from the sale. HighLevel’s dynamic values cover contact, opportunity and other workflow data. On the sale webhook, insert the opportunity value or order amount with the tag icon. Send 0 on earlier steps so revenue isn’t counted twice. Repeats. Without txid, the same ct arriving twice for one click counts as one conversion, which protects you if a contact re-enters a workflow. For several sales per click, send a unique txid in the JSON body or the GET query. Choose what the ad platform sees. Each custom conversion is mapped to the traffic source postback separately, so you can send only booked or sale to the ad platform.

Verify the setup

1

Click through the campaign

Open your ClickFlare campaign URL. The funnel page should load with cf_click_id= and a real click ID, not the text {cf_click_id}.
2

Submit the form

Open the new contact in HighLevel and check the click ID custom field holds the same ID.
3

Run the workflow

Trigger the step (book a test call), or use Test Workflow with that contact. Check the workflow’s Execution Logs for the webhook’s status code. Turn on Save response from this Webhook if your account offers it.
4

Check ClickFlare

In Logs → Event Logs, the conversion should appear with your ct and payout on the campaign you clicked through.
To see exactly what HighLevel sends, point the action at a test URL from Webhook.site first, then switch the URL back to your tracking domain.

Send ClickFlare conversions to HighLevel (optional)

To go the other way, for example to tag a contact or move an opportunity when ClickFlare records a purchase from your checkout, use the Custom Webhook integration. Go to Integrations → Conversion API → New integration, choose Webhooks, map the event, choose POST and put macros such as {cf_click_id} and {payout} in the body. On the HighLevel side, a workflow can start from an incoming webhook with the Inbound Webhook trigger, which HighLevel lists as a premium trigger. The workflow then finds the contact by the click ID and acts on it. Without it, use Zapier, Make or n8n to receive the webhook and update HighLevel.

Troubleshooting

  • The hidden field isn’t set to read cf_click_id from the URL, or reads a different parameter name.
  • The form is on a later funnel page and the parameter was lost on the way.
  • A lander’s CTA links straight to the funnel instead of using the ClickFlare click URL.
  • The campaign uses direct tracking, so the click ID isn’t in the URL. See Direct tracking.
Event isn’t set to CUSTOM. Only CUSTOM shows the method picker, Content-Type and Raw Body.
  • The raw body has a literal field name instead of the dynamic value, or the field was empty on that contact.
  • The body uses click_id instead of cf_click_id, or Content-Type isn’t application/json.
  • The ct value doesn’t match a custom conversion’s parameter exactly.
See Troubleshooting S2S postbacks.
The JSON is invalid. Check for a missing comma or quote, and that the dynamic value is inside quotes.

FAQ

Yes. The form saves the ClickFlare click ID on the contact, and a workflow’s Custom Webhook action sends it to ClickFlare as JSON at the step you choose.
Custom Webhook. HighLevel recommends it for flexible request building. HighLevel describes the simpler Webhook (Outbound) action as being for pre-defined patterns. You need the raw JSON body with ClickFlare’s own keys, which Custom Webhook gives you.
Yes. Place the conversion tracking pixel on the thank-you page with ct=lead, and use workflows only for later steps.
No. HighLevel says any trigger works with Custom Webhook, as long as the fields you map exist when the workflow runs.
Yes. Add param1 to param20 to the JSON body or the query parameters. ClickFlare stores them with the conversion.

Custom conversions

One ct per step

Postback parameters

click_id, txid, ct

HubSpot

The same flow in HubSpot