HLAI Experts

Telehealth clinics · Purchase tracking

Purchase tracking from GoHighLevel, with no pixel on your prescription pages

Your ads need to know what sold. Your store pages should not report who looked at which treatment. We send each paid purchase from a GoHighLevel (GHL) workflow to your ad-attribution tool, and keep every pixel and third-party analytics script off the store.

Book a 1:1 with Rob30 minutes, free

The job

Reporting sales to your ads without a script on the store

Ad platforms learn from purchases, and the usual way to tell them is a pixel: a script placed in each page that reports the visit. Meta's developer documentation calls its pixel JavaScript that tracks visitor activity, and lists what it can collect from the browser's request headers, including the IP address and the address of the page. On a prescription store, the address of a product page names a treatment.

So the store carries no pixel at all. For a telehealth clinic we kept every ad-tracking pixel and every third-party analytics script off the store pages, the clinic's own attribution tool included. It is our build rule for prescription pages. It is not legal advice, and whether your clinic may use any tracking tool is a question for your compliance adviser.

Purchases go out from HighLevel instead. When an invoice is paid, a HighLevel workflow sends a webhook to the clinic's ad-attribution tool, and the tool takes it from there. The message leaves from the workflow, not from the patient's browser. It carries purchases only: the build sends no lead events and no page views.

What the webhook carries is a choice, made in writing. HighLevel's standard outbound webhook sends the contact's standard fields and every custom field by default, along with the location's details. Its Custom Webhook action lets the body be written field by field, with the tool's key sent in a request header rather than the URL. A clinic's contacts can hold far more than an attribution tool needs, so the plan document lists each value the feed sends, and the clinic approves that list before we build.

The fix that made it reliable. For a while, some paid orders never reached the attribution tool. Other automations in the account acted on the same contacts first and pulled them out before the webhook step ran. We added wait steps so the purchase goes out before anything else moves the contact, and paid orders have reached the tool reliably since. HighLevel's help center describes a related timing problem it calls a race condition, where two updates in the same second run out of order, and its answer is also a Wait step.

Checked at both ends. HighLevel's execution logs show that the webhook step ran, but not what it sent, so a test purchase is also checked in the attribution tool.

What we set up

What goes into the purchase feed

  • Nothing added to the store pages: no pixel, tag or analytics script
  • A workflow that starts when an invoice is paid
  • A webhook from that workflow to your ad-attribution tool, carrying the purchase only
  • A field list in the plan document: every value the feed sends, approved by your clinic
  • The tool's key sent in a request header, as HighLevel advises, never in the URL
  • Wait steps so no other automation pulls a contact out before its purchase is sent
  • A test purchase confirmed in HighLevel's execution log and in your attribution tool

How a setup runs

How the feed gets built

  1. A 1:1 with Rob

    Rob asks which attribution tool you use and what it expects for a purchase, then looks in your HighLevel account at what already runs when an order is paid.

  2. The plan document

    The plan names the trigger, the destination and every field the feed sends. Anything not on that list stays in HighLevel. You approve it before we build.

  3. Build, then timing

    We build the workflow, then go through every other automation that touches a paid order, so none of them moves the contact before the purchase has gone out.

  4. Test purchases and the QA report

    A test order goes through checkout. We confirm the step in HighLevel's execution log and the purchase in your attribution tool, and the QA report shows both, with screenshots.

  5. Changes later

    Want another event in the feed? It gets a verdict first, inside the agreed scope or new scope, and its fields go through the same approval as the first list.

What you bring

What the feed needs from you

Your attribution tool

The tool you already use to report conversions to your ad platforms, and the address it receives events on.

Its key and format

The key or token the tool asks for, and the fields it expects on a purchase.

If your tool allowlists IPs

HighLevel's help center says it offers no static IP allowlist for webhooks, so a tool that accepts only known IP addresses needs another way in.

Your automation list

The automations that run when an order is paid, or access for us to read them, so the timing can be checked.

Who signs off the fields

The person at your clinic who approves which values may leave HighLevel.

Where it stops

The feed sends purchases only: no leads, no page views, and no script on the store. We don't choose your attribution tool or decide what your agreement with it allows, and we promise no ad results. Nothing here is legal advice.

Questions

What clinics ask about tracking without pixels

Can we see which ads sell without a pixel on the store?
Yes, for purchases. Each time an invoice is paid, a HighLevel workflow sends the order to your attribution tool, and your tool takes it from there. Nothing loads in the patient's browser on the store pages.
Why not just put the Meta pixel on our product pages?
Meta's documentation says its pixel collects what is in the browser's request headers, including the IP address and the page address. On a prescription store the page address names a treatment. Keeping pixels off those pages is our build rule, not legal advice.
Does the webhook send the whole patient record?
It can, if nobody checks. HighLevel's standard outbound webhook includes every standard and custom contact field by default. We list the fields the feed may carry in the plan, and HighLevel's Custom Webhook action lets the body hold only those.
What if a paid order never reaches the attribution tool?
That happened on a live build: other automations pulled contacts out before the webhook step ran. Wait steps fixed it, and paid orders have arrived reliably since. Before a feed goes live we now check every automation that touches a paid order.
Does the feed send leads or form fills too?
Not in the build we describe. It sends purchases only. Adding lead events is new scope, planned with its own field list and approved before anything changes in the account.
How do we know the feed is working?
HighLevel's execution logs show that the webhook step ran, though not the data it sent. Your attribution tool's dashboard shows what arrived, so every test purchase is checked in both places.
Rob Eason

Who you talk to

Rob Eason

Rob runs HLAI Experts and takes the 1:1 calls himself.

He is a HighLevel Certified Admin with the second-most reviews in HighLevel's Certified Admin Directory worldwide, all of them 5 out of 5.

He won HighLevel's Top New Subaccounts via AI Employee award in its 2025 Summer of AI Awards and taught HighLevel's official masterclass on its AI Employee.

Before HighLevel, he co-owned a 60-employee financial services firm and sold his share.

On the call he looks at your account, not a script.

5/5 across 83 reviews in HighLevel's Certified Admin Directory

Talk through your purchase feed with Rob

Bring the name of your attribution tool. In 30 minutes Rob looks at what runs in your HighLevel account when an order is paid and says what the feed would send.

Book a 1:1 with Rob