Impression/Click Tracking

Overview

Below explains how we track the impressions and clicks you see in the Reporting UI and API.

Impression Tracking - API Requests

When Kevel's Ad Decision Engine provides a Response to your Decision API Request, it'll include a field called impressionUrl, as shown below:

{
  "adId": 111,
  "creativeId": 222,
  "flightId": 333,
  "campaignId": 444,
  "clickUrl": "https://e-1234.adzerk.net/r?...",
  "impressionUrl": "https://e-1234.adzerk.net/i.gif?..."
  ...
}

This URL is unique to the ad, so if fired, it'll record that an impression happened for that particular ad.

In order to make it fire, you'll have to issue a GET or POST to this URL endpoint. Alternatively, you could place this impressionUrl directly on the page using an image tag, but we recommend issuing it server-side to help combat reporting discrepancies that could happen because of ad blockers. More info here.

📘

Impression tracking URLs expire after 24hrs. Impression URLs fired after 24hrs will return a 200 response, but no impression will be recorded.

If the same unique Impression URL is fired multiple times, multiple impressions will be recorded. Kevel does not deduplicate Impressions.

Impression Tracking - JS Ad Code

If using JavaScript ad code, Kevel serves a tracking pixel at time of impression. It looks like this: <img width="0" height="0" src="http://e-<networkId>.adzerk.net/v/v.gif?i=eyJVc2VyI..."

The random string of letters and numbers at the end prevents a user's browser from caching Veripixel.

Click Tracking

Kevel tracks clicks with a click tracking URL. When a user clicks on an ad, this link records a click in our reporting server, and then redirects the user's browser to the creative's destination page. The URL looks like:

http://e-1234.adzerk.net/r?e=eyJ0cyI6MTM2Mjc3MT...In0&s=K9N90sUT247it9GXOEmh49HPmBY

If you use the click tracking macro %URL% when setting up a JavaScript/HTML type creative, Kevel automatically generates our tracking URL wherever the macro is placed in the creative.

In the Decision API Response, you'll see the click URL under the clickURL parameter.

{
  "adId": 111,
  "creativeId": 222,
  "flightId": 333,
  "campaignId": 444,
  "clickUrl": "https://e-1234.adzerk.net/r?...",
  "impressionUrl": "https://e-1234.adzerk.net/i.gif?..."
  ...
}

You'll want to grab this URL and redirect the user to it if they click on the ad. Alternatively you can also call to it server-side using a GET or POST request type.

📘

Kevel registers a click whenever a user clicks on an ad with a unique impression. If a user clicks on the same ad multiple times without refreshing the page, we will not register new impressions, and therefore will not count the clicks after the initial click.

A click fired without an associated impression is tracked as a valid click and recorded.

Click tracking URLs do not expire.

Pulling Impression Pixel

There are times when you may need to figure out what ad from your account is serving into a given placement. This information is stored in the impression pixel that is served along with your ads. You can use the developer console of your browser to access this information.

  1. First, right-click on the page with the ad, and then left-click "Inspect" or "Inspect Element" in the context menu.
260
  1. Next, click the element selector on the top left of the dev console, then click on the ad placement you want to identify.
impression tracking
  1. This will bring you to the div for this placement. Look at the bottom of the div in the code for an image source calling for e-.adzerk.net. This is your impression pixel.
1052
  1. Right-click on this pixel, then select "Edit as HTML" to copy and paste the pixel into a text editor. Then copy the impression shim by selecting everything between the "=" and the "&" signs in the impression pixel. This will leave you with a block of text encoded in base-64.

For most users, you can simply email this to Kevel Support, and we can identify the flight for you.

For API users, you can decode the shim by using a base 64 decoder. This will generate a JSON object with various information about the impression that served. "fl" is the flight ID, which can be looked up in the API.

Bot Filtering

Bot filtering refers to the automatic filtering-out of impressions from bots and spiders. A request from a detected bot or spider will be fulfilled, but the impression or subsequent clicks will not be logged in our reporting system.

ScenarioAction
Making requests to the Decision APIMust set "enableBotFiltering": true in the Decision API Request after placements

Note: if firing impressions/clicks/events server to server, be sure to send the user-agent header in requests.
Using ados.js ad requestsNothing. Kevel automatically filters impressions for bots