## Overview

Kevel's reporting interface is your portal for analyzing campaign performance, such as impressions, clicks, CTRs, custom events, and more. The tool lets you filter and group by many fields, including [Advertiser](https://dev.kevel.co/docs/advertisers), [Campaign](https://dev.kevel.co/docs/campaigns), [Flight](https://dev.kevel.co/docs/flights), [Ad](https://dev.kevel.co/docs/ads), and more.

When creating a Custom Report, you have the option to **Filter** and/or **Group By**:

**Filter** = Limit data by certain characteristics, such as specific Advertisers, Flights, Ad Types, Countries, Keywords, etc. Ex: you want the report to include just one specific Advertiser's data.

**Group By** = Analyze performance at a granular level by breaking down data by Advertiser, Flight, Ad Types, Countries, Keywords, etc. Ex: you want to see a daily report for a specific Advertiser for the last month, broken down by each Ad.

By default, the report will have no filters and group everything by the total date range.

### Note  
Reports that contain over 15MB of data are too large to display in the UI. In those cases, we will show a link to a CSV download.
Also note that there is a limit of 1.3 million rows in reports. If the report exceeds this threshold, you will see an **Report Too Large** error returned with the following message:

_"The report you generated is too large. Please try removing some dimensions, shortening the date range, or reducing the date group granularity and generating the report again"_

### Caution  
All reports generated through the UI or API have a lifetime of 10 days; they expire after that and need to be regenerated.

Reporting data is available within 5 minutes of an event being recorded.

1. Go to **Reports** tab --> **New Report**
2. Pick your Dates (and Times if you are running an Hour report). Choose what you want to Group By and what you want to Filter by.
3. Choose a Time Zone for the report to display in. The default is GMT (UTC). **NOTE:** A Request Report (Inventory Report) will not show requests when a specific Time Zone is selected.
4. Click **Generate Report**

### Caution  
Reports that use the hourly Date Group can only be requested within the past 35 days.

4. You will see an interstitial screen that returns the current status of the report:

5. The report will look like below. To export to a CSV, click the **Download CSV** button on bottom left.

### Caution  
If your data is imported incorrectly, change your Text Delimiter settings so that `"` instead of `'` is `true`.

### Note  
By default, the data is grouped by a date bucket (Day, Week, Month, Total). If you added more GroupBy functions, you'll need to click the black triangle next to the date.

To edit a report, click the **Edit Report** button on bottom left.

## Report Filtering Options  
Filters limit "Filter" or "Exclude" the data to just the filters you want.

Choose from the drop-downs - you can add multiple filters, using include and exclude simultaneously.

### Note  
When grouping/filtering by Region, you must also group/filter by Country.

### Additional Important Notes About Keyword Filtering

1. When filtering by Keyword, separate each Keyword into different lines.
2. Keywords are case-sensitive. You must enter the keyword as it was set on the flight or passed in the request.
3. If there are multiple keyword filters, we treat them as OR, not AND. For example, keyword filters of "hats" and "shoes" will return results for all flights with "hats", all flights with "shoes", and all flights with both keywords.
4. If you **only** use a keyword as a filter, we will only returned _unmatched_ keyword data in the report. Unmatched keywords are keywords passed into the ad request but do not serve to flights or ads with keyword targeting.
5. Keywords cannot be used with reports that use non-GMT (UTC) timezones.
6. You cannot queue a report that groups by or filters by both Keywords and Region or City.

## Group By Options  
The Group By options provide a way to break down the data by various dimensions.

### Note  
Grouping by any "Device" dimensions does not work for requests. In other words, it is limited to performance reports and is currently not supported for inventory reports.
OS Major Version and OS Minor Version is only available starting on Oct 1, 2022.

### Information  
When selecting Group By Flight, you can optionally select "Group By Price". However, you _must_ Group By Flight to return Price and Rate Type data.

### Caution  
A report that groups by Keyword AND either Country OR Metro cannot exceed a time range of one month (31 days).

### Note  
When grouping by City, Country, Region, or Metro Area and the location can't be determined, the unknown location will be called `unknown` in the report.

## Columns in the Report  
| Name | Description |
| --- | --- |
| **Date** | Hour/Day/Week/Month. If you click the black triangle, it'll show a further breakdown by anything you Grouped By. |
| **Impressions** | The number of times an ad was displayed, listened to, etc (i.e., when the Impression URL is fired). |
| **Clicks** | The number of times an ad was clicked on and redirected through Kevel. |
| **CTR** | Click-through-rate (Clicks divided by Impressions). Uses the "Clicks" column even if the Click Bucketing feature is enabled. |
| **View Conversion** | Triggers when a user viewed an ad and then did a specified action. |
| **Click Conversion** | Triggers when a user clicked on an ad and then did a specified action. |
| **Server Conversion** | A conversion sent server-side, not through a pixel (like View & Click). |
| **Custom Events** | These columns refer to [Custom Event Tracking](https://dev.kevel.co/docs/custom-event-tracking). If you are tracking Custom Events, they will appear here. You have the option to remove these columns by pressing the 'Hide Events' toggle at bottom of the report. |
| **Revenue** | Revenue is calculated using a Flight's [Rate & Price](https://dev.kevel.co/docs/flights#section-rateprice). |
| **GMV** | Gross Merchandise Value. This value is [appended to an event](https://dev.kevel.co/docs/tracking-overview#adding-gross-merchandise-value) such as impressions or clicks. |
| **ROAS** | Total GMV / Total Revenue. |
| **eCPM** | Effective Cost Per Mille (aka 1,000 impressions) |
| **Click Bucketing** | For more information about click bucketing, please see the [click bucketing](https://dev.kevel.co/docs/click-bucketing) page. |

### Note  
Unique Clicks = "Unfiltered Clicks" - "Invalid UA Clicks" - "Duplicate Impression Clicks" - "Suspicious Clicks".

### Note  
Clicks will be sorted into the first bucket they are eligible for in this order: Invalid UA Clicks --> Duplicate Impression Clicks --> Suspicious Clicks --> Unique Clicks.
