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

# Pixels & conversion APIs

> Send conversions to Meta, Google, TikTok, GA4, and Microsoft without pasting a single snippet.

granvl's own analytics need no pixels. When you *also* want the ad platforms to hear about your conversions (for their bidding algorithms, or your own reporting), configure tracking **per domain** under **Settings → Tracking**: granvl injects and fires everything for you, and never asks you to paste snippet code into a page.

## Supported platforms

| Platform          | What you provide                            | How it fires                                                     |
| ----------------- | ------------------------------------------- | ---------------------------------------------------------------- |
| **Meta**          | Pixel ID + CAPI access token                | Browser pixel + server-side Conversions API events, deduplicated |
| **Google Ads**    | Conversion ID + label (optional google tag) | Conversion events on your granvl conversions                     |
| **GA4**           | Measurement ID + API secret                 | Browser + Measurement Protocol events                            |
| **TikTok**        | Pixel ID + Events API token                 | Browser pixel + server-side events                               |
| **Microsoft Ads** | UET tag ID                                  | Browser tag + server-side fires from one credential              |

Secrets are stored encrypted and shown as set/not-set, never echoed back.

<Frame caption="Per-domain tracking configuration in Settings">
  <img src="https://mintcdn.com/granvl/0qlHX0uI9PHH2UJI/images/guides/tracking.png?fit=max&auto=format&n=0qlHX0uI9PHH2UJI&q=85&s=6e5fd401d503653438bbb75a8d2c9ccb" alt="Per-domain tracking configuration in Settings" width="4258" height="595" data-path="images/guides/tracking.png" />
</Frame>

## Why not paste snippets?

* Injection is **interaction-gated**: pixels load after the visitor interacts, protecting your page speed scores.
* Server-side events (CAPI and friends) can't be pasted into HTML at all; they need a server, and granvl is that server, firing them with the same session identity as the browser events so platforms deduplicate correctly.
* Configuration is auditable in one place instead of buried in page HTML across variants.

Agents are instructed never to paste ad-platform snippets into page HTML for the same reasons. For genuinely custom scripts (chat widgets, tools granvl doesn't support natively), use the domain's **Custom scripts** slots; see [Domains](/guides/domains).

## Verifying

After saving credentials, hit **Send test event** (or ask your agent to run `test_tracking_pixel`). granvl fires a test conversion at Meta, GA4, and TikTok and reports each platform's response, so you know the credentials work before spending on traffic.

Every real conversion fire is also logged per domain with the platform's response, so a revoked token or misconfigured pixel shows up as failed fires rather than a silent gap in your platform reporting.

## UTMs are separate

Pixels report conversions *to the platforms*. Joining platform **spend** to your first-party conversions inside granvl runs on UTMs instead; see [Ads](/guides/ads#joining-spend-to-conversions). You want both: UTMs for truth in your dashboard, conversion APIs to feed the platforms' bidding.
