> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cliqo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Install the pixel

> The snippet that lets Cliqo see behaviour on your store — and how to confirm it is working.

The pixel is a snippet you paste into your store. With it, Cliqo learns **what someone did before buying** — which product they looked at, which category they browsed, where they stopped — and builds segments from that on its own.

Without the pixel, Cliqo only knows who is already on your list and what they already bought. With it, you can reach people who showed interest and never came back.

## The snippet

In **Settings → Pixel**, the *Cliqo Tracking Pixel* panel shows your snippet already personalised, with a **Copy all** button. It looks like this:

```html theme={null}
<!-- Cliqo Tracking Pixel -->
<script async src="https://app.cliqo.io/px.js?t=YOUR-ID" data-tenant="YOUR-ID"></script>
```

> **The identifier appears twice, on purpose.** In the address — `https://app.cliqo.io/px.js?t=YOUR-ID` —, which Google Tag Manager never touches, and in `data-tenant`, which GTM strips when it injects the tag. That's why the same snippet works for GTM and for a direct install. *(With no identifier at all the pixel still works: it resolves the store by domain. But only if that domain is already registered in Cliqo — your verified domain, or the **Store website** under Settings → Brand.)*

Paste it in the `<head>` of **every page** of the store — not just the home page. It has to be the `<head>`, not the end of `<body>`: the pixel needs to load before the content to measure time on page correctly.

## Where to paste it, by platform

The panel offers three routes, each with its step-by-step on screen:

* **GTM** — marked *Recommended*, it's the one that opens first. A Custom HTML tag triggered on all pages; a link opens Google Tag Manager.
* **Loja Integrada** — shows up when your account is registered as a Loja Integrada store. The snippet goes under Design → Edit theme HTML, just above `</head>`; a link opens that platform's dashboard.
* **Manual** — for any other store: paste it into your theme template, just above `</head>`.

**The snippet is the same for all three routes.** Tag Manager strips `data-*` attributes, and `data-tenant` is one of them — that's why the snippet also carries your identifier inside the script address (`?t=…`), which GTM cannot strip.

## Confirming it works

At the top of the same panel there is a **Verify pixel** button (once the first hit arrives, it becomes **Verify now**). After pasting the snippet, open a page of your store in another tab and click it. While the panel is open, the check also repeats on its own every minute.

The result has three states:

* **Pixel active** — traffic arrived in the last 24 hours. You are set.
* **Installed · no recent traffic** — the pixel has sent hits before, but nothing in the last 24 hours. It is installed; the store just had a quiet day. Don't touch the snippet.
* **Awaiting installation** — no hit has ever arrived.

If the screen says "awaiting installation", open one of your own store pages and click **Verify pixel** again. If the hit shows up, it is installed; if not, see the last section of this article.

## What it captures on its own

You do not have to tag anything. Once installed, the pixel identifies the page type and emits the events below — and each one feeds an automatic segment under **Audience › Lists and segments**, **Segments** tab:

| Event | Feeds the segment |
| - | - |
| Page view | All visitors |
| Product view | Browsed without buying |
| Category browsing | Category interest |
| Cart page visit | Almost bought |
| Checkout page visit | Checkout abandonment |

Beyond those, the pixel measures **scroll depth** on product pages (25%, 50%, 75%, 90%) and **real time on page** — interest signals that open rate cannot capture.

To recognise the page type it first reads your theme's standard markup (`og:type`, `og:title`, `og:price`), then structured product data, and only then falls back to heuristics. That is what makes it work on any platform, with no dedicated integration.

## Recording a purchase

The pixel recognises the order confirmation page on its own when its address contains one of the common fragments — `/finalizacao`, `/obrigado`, `/pedido/sucesso`, `/order/success`, `/thank-you`, `/order-received` or `/concluido` — and records the purchase with the order number and value. If your thank-you page matches none of them, call this on it:

```js theme={null}
window.cliqo.purchase(value, orderId, productName);
```

This is what closes the loop: without the purchase recorded, Cliqo sees the browsing but never learns it became a sale, and attributed revenue comes out understated.

## Tie the purchase to who bought it

This is the call that separates *"there was a sale"* from *"Marina bought it"*.

Cliqo ties browsing to a person when they arrive through one of your email links. Someone who walks straight into the store and buys never takes that path: the order exists on one side, the browsing on the other, and the two never meet. Without this link, **abandoned cart and revenue per campaign have no way to work** — the sale shows up with no owner.

On the thank-you page, say who bought:

```html theme={null}
<script>
  window._cliqo = window._cliqo || [];
  window._cliqo.push(['identify', 'BUYER_EMAIL']);
</script>
```

Replace `BUYER_EMAIL` with your platform's variable holding the order's email.

**Email works — and it's what your store actually has.** The call accepts two forms: the contact's Cliqo identifier (a UUID your store doesn't know) or the **email**. Given the email, the server resolves the contact and stitches the earlier browsing on its own.

### Order is what makes it work

**The email has to be on the page before the purchase is recorded.** It isn't sent on its own: it rides along on that page's next event — and on the thank-you page the only event is the purchase. If it arrives after that, there's nothing left to carry it, and the identification doesn't happen. With no error on screen.

Hence two recommendations:

* **Use the form above** (`window._cliqo.push`), not `window.cliqo.identify(...)`. It works even when it runs **before** the pixel loads, and it's the only safe one when you don't control the order.
* **Place the snippet above the purchase call** in your template (or above the pixel snippet, if the purchase is detected automatically).

### Through Google Tag Manager

A **Custom HTML** tag, fired only on the order confirmation page, with a **higher priority** than the tag that fires the purchase. In GTM, a higher priority number fires first — if the other one sits at `0`, put this one at `10`.

### How to check it worked

Place a test order. On the thank-you page, open developer tools (**F12**) → **Network** tab → filter by `track`. The request must carry an **`identify_email`** field with the buyer's email.

If it isn't there, it's almost always the order: the email tag is firing after the pixel.

### Privacy of this call

The email is used only to find the contact that already exists in your base. It **never appears in a log**, and Cliqo **does not answer whether the email exists or not** — the identification is silent on both sides, so the pixel's address can't be used to discover who is on your list.

## Privacy and LGPD

The pixel stores an anonymous identifier in the visitor's browser and records which pages they saw. Under Brazil's LGPD that is **pseudonymised personal data**, even with no name or email attached.

Two obligations that are yours, not Cliqo's:

1. **Your privacy policy must state that the store uses a tracking pixel**, what it is for, and who the data is shared with.
2. **If your store shows a cookie notice, the pixel belongs in it.**

None of this blocks using it — it is the same framing as any analytics tool. It just has to be written down.

### When the visitor declines

If the visitor declines marketing cookies, the pixel keeps counting visits but **does not link the browsing to any customer**: events stay anonymous. It understands the refusal on its own in two cases:

* **Google Consent Mode v2** (your cookie notice sends `ad_storage` or `analytics_storage` = `denied`);
* **Shopify**, through the store's own customer privacy setting.

If your cookie notice is something else, tell the pixel when the visitor declines:

```html theme={null}
<script>
  window._cliqo = window._cliqo || [];
  window._cliqo.push(['consent', { marketing: false }]);
</script>
```

If they accept later, send `{ marketing: true }`.

## When to stop waiting and ask for help

If the snippet is in the `<head>`, you visited the store, and the panel still records nothing, open the page source in your browser and search for `px.js`.

**Finding `px.js` does not mean it is working** — it means it loaded. There are three different answers, and only one of them closes the matter.

**① It is not there.** The snippet sits in a template that page does not use. This is the most common cause. Move it to the template the store actually loads.

**② It is there with your identifier** — either `data-tenant="..."` on the tag itself, or `?t=...` at the end of the `px.js` address. It loaded and identified itself: the install is correct and the problem is on our side. Talk to us.

**③ It is there, but with no identifier at all.** This is the misleading case. The page loads the pixel, it fires normally, and still nothing reaches the panel — no error, no warning. With no identifier it arrives anonymous, and the visit is only counted if your store address is already registered on our side. If it is not, it is discarded silently.

This happens mostly with tag-manager installs: Google Tag Manager strips `data-*` attributes when it injects the tag, but never touches the address.

**How to confirm it is ③:** open the browser console (F12 → Console tab) and reload the page. If the line `[cliqo] sem token na tag` shows up, this is the case.

**The fix:** put the identifier in the address itself, `https://app.cliqo.io/px.js?t=YOUR-ID`. The address survives the tag manager; `data-tenant` does not.

If it persists, write to us at [contato@cliqo.io](mailto:contato@cliqo.io) with the address of a page where it should be.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.