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

# Tracking and measurement

> How impressions, engagements, clicks, and conversions are measured, and the one rule that makes impressions billable.

Adgentek measures five event classes. If you integrate with an SDK, all of this is automatic. If you integrate via the REST API, the impression rules below are your responsibility, and they determine whether you get paid for impression-priced demand.

## The one rule

Impression pixels fire client-side, from the user's browser or app, as an image request. Never from your backend. Never via fetch.

Impressions fired from server infrastructure are classified as general invalid traffic (GIVT) by verification vendors (IAS, DoubleVerify, MOAT) because they originate from datacenter IP space. GIVT impressions are discarded and unbilled. Impressions fired via `fetch()` fail silently on CORS in many contexts, so the event never arrives. The correct client-side implementation:

```javascript theme={null}
// Correct: fires from the user's browser, no CORS involvement
new Image().src = ad.tracking.impression_url;
```

```javascript theme={null}
// Wrong: CORS will block this silently in many contexts
fetch(ad.tracking.impression_url);
```

```javascript theme={null}
// Wrong: fires from datacenter IP space, classified as GIVT, unbilled
// (any server-side HTTP request to the impression URL)
```

## Event classes

**Impression.** Fired client-side when the ad enters the viewport. SDKs handle viewability timing automatically. This is the billable event for CPM demand.

**Billing notice (burl).** A server-side notification fired on impression receipt. This is the only legitimate server-side event in the stack, and it is used on headless surfaces (AdsMCP) where no client render exists. A burl does not substitute for an impression pixel and does not qualify a surface for CPM demand.

**Engagement.** Interaction events inside interactive formats: chip taps, free-text questions, interaction depth in a Spark unit. Fired client-side by the format runtime.

**Click.** All clicks route through the Adgentek redirect layer, where click-quality filtering runs. This is what makes CPC demand safe on every surface, including headless ones. Never link directly to advertiser destinations; always use the click URL from the ad payload.

**Conversion.** Measured advertiser-side via the Adgentek conversion pixel on the advertiser's site. Conversions are what make CPA demand work on headless surfaces: the billable event is verified independently of the ad render.

## What this means per integration path

| Path            | Impression              | burl             | Engagement                     | Click                     | Notes                            |
| --------------- | ----------------------- | ---------------- | ------------------------------ | ------------------------- | -------------------------------- |
| SDKs and Widget | Automatic               | Not needed       | Automatic                      | Automatic                 | Nothing to implement             |
| REST API        | You fire it client-side | Optional         | You report via SDK-lite events | Use the payload click URL | Certification unlocks CPM demand |
| AdsMCP          | Not available           | Fired on receipt | Not available                  | Use the payload click URL | CPA and filtered CPC only        |

If any of this is unclear for your architecture, write to [hello@adgentek.ai](mailto:hello@adgentek.ai) before you build. Getting the impression path wrong is the single most common integration error, and it directly costs you revenue.
