# GoHighLevel Troubleshooting

> Fix GoHighLevel leads that show as Unknown, IP-match errors in the Events Log, missing conversions, and the GoHighLevel OrderFormPurchase event in Meta.

Use this page to fix GoHighLevel tracking problems in AnyTrack. Find your symptom in the table, then follow the fix in its section. To set up the integration, see [GoHighLevel Integration](/docs/highlevel). For the list of events and their default mapping, see [GoHighLevel Events](/docs/gohighlevel-events).

| Symptom | Cause | Fix |
| :------ | :---- | :-- |
| Leads show as Unknown or Direct in the Campaign Report | The contact has no Click ID | [Leads Show as Unknown](#leads-show-as-unknown-in-the-campaign-report) |
| Leads from Typeform, Jotform, Zapier, or Make show as Unknown | The Click ID does not reach the `_atid` field | [Pass the Click ID from an External Form](#pass-the-click-id-from-an-external-form) |
| Recurring `Can't find match for IP` errors in the Events Log | Events arrive without the Click ID | [Recurring IP-Match Errors](#recurring-cant-find-match-for-ip-errors) |
| Meta shows `OrderFormPurchase` with no value | GoHighLevel sends the event from its own Meta Pixel field | [Stop the OrderFormPurchase Event](#meta-shows-a-gohighlevel-orderformpurchase-event) |
| Pipeline stage events do not reach Facebook Ads | The stage or the custom event is unmapped | [Pipeline and Opportunity Tracking](/docs/gohighlevel-events#pipeline-and-opportunity-tracking) |

## Leads Show as Unknown in the Campaign Report

Your GoHighLevel leads land under **Unknown** (or **Direct**) in the [Campaign Report](/docs/campaign-report), but the contacts have UTM values in GoHighLevel. The most common cause is **the way the contact enters GoHighLevel**.

AnyTrack attributes a lead by matching it back to the browser session where the ad click happened. That session stores the click ID (`_atid`) and UTM data as first-party data. If an app creates the contact **server-to-server** (for example, Zapier or Make), the contact never had that tracked session. AnyTrack has no session to match the contact to, so AnyTrack reports the contact as Unknown. The Unknown source is the expected result, not a tracking error.

The diagram shows one lead on two paths. When the click ID travels with the form submission, AnyTrack attributes the lead. When the click ID is lost, the lead lands under Unknown.

**The Click ID Fork: One Lead, Two Outcomes**

When a GoHighLevel lead comes from an external form, the AnyTrack click ID decides if the lead becomes an **attributed conversion** or lands under **Unknown**.

Shared start:

1. **Visitor lands from Facebook**. Tools: Facebook Ads. Tracking Tag fires. AnyTrack starts a session, collects the click ID and UTM parameters, and stores them as first-party data on the visitor. Data: click ID collected (present), utm parameters (present), first-party session (present).
2. **Visitor fills an external form**. Tools: Typeform, Jotform. The form sends the email and the answers. It sends the click ID only if the form collects it: `at_click_id` in Typeform, a hidden field in Jotform.

The path splits here: is the click ID attached?

Path 1, working path: Click ID attached.

3. **Form submits with the click ID**. The click ID leaves with the email and the answers. Data: email + data (present), click ID (present).
4. **Zapier → GoHighLevel**. Tools: Zapier, GoHighLevel. Zapier maps the click ID into the `_atid` custom field of the GoHighLevel contact. Data: click ID → _atid (present).
5. **GHL "Contact created" → AnyTrack**. Tools: GoHighLevel, AnyTrack. The `Lead` event arrives with the click ID. Data: _atid (present).

Path 2, broken path: Click ID dropped.

3. **Form submits without the click ID**. Only the email and the answers leave. Data: email + data (present), click ID (missing). Break point: The form does not collect the click ID, so the click ID is lost here. The connection to the next step breaks here.
4. **Zapier → GoHighLevel**. Tools: Zapier, GoHighLevel. Zapier creates the contact server-to-server, with no browser session and no click ID. Data: sessionSource: "Third Party", medium: "zapier".
5. **GHL "Contact created" → AnyTrack**. Tools: GoHighLevel, AnyTrack. The `Lead` event arrives with no click ID to match. Data: _atid (missing).

Both paths return to AnyTrack.

Path 1 result: **Attributed conversion**. AnyTrack matches the click ID to the Facebook ad click, credits the campaign, and sends the conversion to your ad platform through the Conversion API.

Path 2 result: **Unknown**. AnyTrack records the lead but has no click ID to match. The lead lands under Unknown with no campaign credit, even when the contact has UTM values in GoHighLevel.

**One field makes the difference.** AnyTrack attributes the lead with the click ID, not with the UTM values on the GoHighLevel contact. Collect the click ID on the form and map it through Zapier into the `_atid` custom field: the same lead then becomes an attributed conversion.

To confirm the cause, open the attribution source of the contact in GoHighLevel. A contact that a third-party tool created shows values such as `sessionSource: "Third Party"`, `medium: "zapier"`, and an empty `_atid`.

To fix it, make sure that the click ID travels with the lead:

1. **Best:** collect the lead on a native GoHighLevel funnel form. Add the `_atid` field to that form (see [Step 4: Add the Click ID Field to Your Forms](/docs/highlevel#step-4-add-the-click-id-field-to-your-forms)). The Tracking Tag supplies the Click ID value, and GoHighLevel stores it on the contact.
2. **If an automation must create the contact:** pass the original click ID through the automation into the `_atid` custom field of the contact. See [Pass the Click ID from an External Form](#pass-the-click-id-from-an-external-form).

<Callout icon="⚠️" theme="warning">
**UTM settings do not fix server-to-server leads**

If you reapply the UTM template or run Verify Ads Settings, the Unknown leads stay Unknown. Those settings affect only ad-click sessions, not contacts that another app creates server-to-server.
</Callout>

For the same problem on other CRMs, see [Why Conversions Show as Unknown or Direct](/docs/conversions-showing-as-unknown).

## Pass the Click ID from an External Form

AnyTrack joins two records:

- The **session** on your funnel or website: UTM parameters, traffic source, and first-party data.
- The **offline events** that GoHighLevel reports: contacts, orders, invoices, and opportunities.

The AnyTrack [Click ID](/docs/anytrack-click-id) connects the two records. The Tracking Tag writes the Click ID onto the page URL as the `_atid` parameter, and GoHighLevel stores it in the `_atid` custom field of the contact.

The path of the Click ID to the `_atid` field depends on where the lead fills in the form:

- **Native GoHighLevel form.** The Tracking Tag supplies the value when the form carries the `_atid` field. Add the field to each form (see [Step 4](/docs/highlevel#step-4-add-the-click-id-field-to-your-forms)).
- **GoHighLevel form embedded on another website.** Add the `_atid` field to the form, and install the Tracking Tag on the page that hosts the form. See [Tracking Embedded Forms on External Websites](/docs/highlevel#tracking-embedded-forms-on-external-websites).
- **External form, Zapier, or Make.** GoHighLevel has no tracked session for the lead. Map the Click ID from the source platform into the `_atid` custom field.

Each source platform gives the Click ID under its own parameter:

| Source platform | Click ID parameter | Destination in GoHighLevel |
| :-------------- | :----------------- | :------------------------- |
| [Typeform](/docs/typeform) | `at_click_id` | `_atid` custom field |
| [Unbounce](/docs/unbounce) | `click_id` | `_atid` custom field |
| [Elementor](/docs/elementor) | `click_id` | `_atid` custom field |
| [Calendly](/docs/calendly) | `utm_term` or `sfid` | `_atid` custom field |
| [LeadsHook](/docs/leadshook) | `atclid` | `_atid` custom field |
| Any standard HTML form | hidden field, value `--CLICK-ID--` | `_atid` custom field |

For the Elementor integration, see [Elementor](/docs/elementor). If your Elementor forms send leads to GoHighLevel without the Elementor integration, see [GoHighLevel and Elementor](/docs/gohighlevel-and-elementor). For the full pattern across every platform, see [Pass the Click ID from External Forms to Your CRM](/docs/external-form-to-crm).

## Recurring Can't Find Match for IP Errors

Recurring `Can't find match for IP` (No IP Match) errors in the [Events Log](/docs/integration-event-log) mean that the conversions from GoHighLevel arrive without the AnyTrack click ID. AnyTrack then falls back to low-accuracy IP matching. AnyTrack does not send events with errors to your ad platforms, so recurring errors also lower your conversion counts in Facebook Ads and Google Ads.

Check these causes in order:

1. **A native form has no `_atid` field.** Without the field, the contact holds no click ID, and every GoHighLevel event drops to IP matching. Add the field to each form (see [Step 4](/docs/highlevel#step-4-add-the-click-id-field-to-your-forms)).
2. **An embedded or external form does not pass the click ID.** Map the original click ID into the `_atid` custom field of the contact. See [Pass the Click ID from an External Form](#pass-the-click-id-from-an-external-form).
3. **A legacy manual-webhook setup sends the events.** Old manual webhooks send conversions without the click ID. Install the AnyTrack app from the Integration Catalog, authenticate, and select your GoHighLevel sub-account. Run a test purchase, and verify an OK status in the Events Log. Then disable the old manual webhooks.

## Meta Shows a GoHighLevel OrderFormPurchase Event

GoHighLevel carries its own Meta Pixel field. When that field holds a Pixel ID, GoHighLevel triggers an `OrderFormPurchase` event on the order form. The browser sends that event. `OrderFormPurchase` is a GoHighLevel event. AnyTrack does not send it.

GoHighLevel sends the event without a value and without a currency. Meta then reports data-quality warnings on your dataset, and lists the price-data actions as High priority.

You can confirm the sender in Meta Events Manager. Open the **Overview** tab and read the **Source** column. `OrderFormPurchase` shows the Source `Meta Pixel`, because the browser sent it. AnyTrack conversions show the Source `Conversions API`. See [Identify Which System Sent an Event](/docs/facebook-ads-troubleshooting#identify-which-system-sent-an-event).

<Callout icon="❗" theme="error">
**Do not add the event to the Tracking Tag**

`OrderFormPurchase` is not an AnyTrack event. A custom trigger for that name adds a third data source and does not stop the browser event. Remove the Meta Pixel from GoHighLevel instead.
</Callout>

<Callout icon="⚠️" theme="warning">
**Free plan: keep the GoHighLevel Meta Pixel**

The Free plan does not include the Conversion API, so AnyTrack does not send `Purchase` to Facebook Ads. On Free, keep the Meta Pixel in GoHighLevel. Remove it only after you upgrade and verify that AnyTrack sends `Purchase` to Facebook Ads.
</Callout>

To stop the event:

1. Open the funnel settings in GoHighLevel and clear the Meta Pixel ID. GoHighLevel labels the field Facebook Pixel ID.
2. Open the order form settings and clear the Meta Pixel ID.
3. Open Settings > Integrations and disconnect the Facebook connection.
4. Republish the funnel.
5. Run a test purchase. Confirm that `Purchase` arrives in Meta Events Manager with the Source `Conversions API`, a value, and a currency.

If you set up your Facebook Pixel in Tracking Pixels, AnyTrack loads it on your funnel pages. Your browser tracking then continues after you clear the field.

<FaqAccordion
  title="FAQ"
  icon="fa-duotone fa-circle-question"
  items={[
    {
      question: "Why does the Events Log show errors after installation?",
      answer: "Check three things. Verify that the AnyTrack Tracking Tag is in the head section of each funnel. Verify that the AnyTrack app is connected. Verify that you selected the correct GoHighLevel sub-account."
    },
    {
      question: "Why are my GoHighLevel conversions not appearing in AnyTrack?",
      answer: "Verify that the AnyTrack app is installed on the correct GoHighLevel sub-account. Then verify that the Tracking Tag is on the funnel."
    },
    {
      question: "Why does the _atid value change between my funnel pages?",
      answer: "The <code>_atid</code> URL parameter carries the AnyTrack page Click ID. The Tracking Tag generates a new value on each page load. The Property ID and the Client ID stay the same; only the final characters change. AnyTrack identifies the visitor by the Client ID, so a changing value does not affect attribution. On a 2-step order form the page does not reload between the steps, so the value stays the same on both steps. A lead shows as Unknown only when the contact has no click ID at all, not when the value changes from page to page. See <a href='/docs/anytrack-identifiers'>AnyTrack Identifiers</a>."
    }
  ]}
/>

<SupportHandoff
  title="Still missing GoHighLevel conversions?"
  description="Share these details with the AnyTrack support team."
  context="gohighlevel_troubleshooting"
  items={[
    'AnyTrack Property ID',
    'The GoHighLevel sub-account that you connected',
    'The email address of a test contact, and the time you created it',
    'A screenshot of the event in the Events Log of the GoHighLevel integration',
    'The URL of the funnel page where the lead filled in the form',
  ]}
/>

<Cards columns={2}>
  <Card title="GoHighLevel Integration" href="/docs/highlevel" icon="fa-plug" iconColor="blue-500">
    Set up the GoHighLevel integration and the Click ID field on your forms.
  </Card>

  <Card title="GoHighLevel Events" href="/docs/gohighlevel-events" icon="fa-list" iconColor="blue-500">
    Every GoHighLevel event, its default AnyTrack event, and pipeline stage mapping.
  </Card>

  <Card title="Why Conversions Show as Unknown" href="/docs/conversions-showing-as-unknown" icon="fa-circle-question" iconColor="blue-500">
    Find why a conversion has no source, on any CRM or form.
  </Card>

  <Card title="Events Log" href="/docs/integration-event-log" icon="fa-server" iconColor="blue-500">
    Read event statuses and errors for each integration.
  </Card>
</Cards>
