Monitoring and Reporting This section goes more in depth on internal and external data sources for processing Adhese data. Measure Once tags have been deployed (see Adhese Setup and Implementation ), they start collecting data immediately. What does Adhese record? Actions and parameters divide the measurement process of Adhese into two categories: An action is 'something that happens'; The parameters are 'all the information that is collected together with the action.' Actions Adhese measures actions . Actions are behaviours that a visitor can perform, such as visiting a web page, reading an article, viewing or clicking on a banner ad, watching a video, playing a game, submitting a form, purchasing a product, etc. Each time a user performs a pre-defined action, the client sends a request to the Adhese servers. The most basic action of the ad-serving process is impressions . This means that a specific format (such as a leaderboard) was loaded onto a particular location (for example, the homepage or an article page) of a publication (for instance, a newspaper's website). It depends on the chosen implementation method when the counting of an impression takes place. Please refer to www.github.com/adhese/sdk for a complete description of the different implementation methods. User actions: beyond impressions and clicks Adhese allows for tracking of user actions beyond impressions and clicks. Additionally, Adhese enables tracking of multiple actions simultaneously. The standard syntax for an action tracking call enables the insertion of three elements: A campaign identifier, for example, Volvo2015 An identifier, like "info request" or "request for demo" A free value, such as the value of a purchase This tracking feature requires a custom setup of your account. Contact Support if you wish to implement this feature. Let's look at some examples of user actions. Within the ad environment If Adhese serves a splash ad or interstitial, it is possible to track the visitor's behaviour. Does the visitor click outside the ad or the close button inside the ad to continue to the underlying webpage? Outside the ad environment Adhese can also track events that occur outside the online advertisement environment. For instance, if a user clicks on your ad, Adhese can track their visit and determine if they made a purchase as a result of your advertising. This allows for more accurate attribution models, as many events can contribute to an online purchase or lead. Viewability Adhese has a tracker that can measure viewability if (legacy) document.write is used (see Parameters for templates and Advar templates ). If you use JSON, your logic can be implemented to measure viewability and then report it to Adhese via the viewableImpressionCounter parameter, which is available in the JSON response (see List of JSON response structure object fields ). Parameters A set of parameters accompanies every action or request. Parameters offer a greater insight into who is doing what and where and how these actions occur. The parameters consist of predefined data, such as screen size, browser and operating system, URL and referrer, or custom user data, such as age and geographic location. Custom parameters can be implemented based on your specific needs and possibilities. Refer to the Request Target Parameters appendix for a list of readily available parameters. The available target parameters and their prefixes are determined by the configuration of your Adhese account. Adhese will use this information to build your inventory and provide insights to match campaigns with your audience and vice versa. Remember that the unique identification of visitors and the storage of personal and other data are subject to national, European and international legislation. It is the exclusive responsibility of the publisher to comply with the law and adequately inform the user of his rights. Adhese can help and advise publishers here. More on user privacy is available in the GDPR section of the documentation. Impression measurement Impression measurement is an essential aspect of ad serving. Understanding how and when Adhese counts an impression is important. There are two scenarios: An ad is requested and visualised. An ad is requested and could be visualised, depending on rules like minimal screen size, device rotation, viewport, etc. The impression is counted later (i.e., deferred impression). The second scenario results in two types of requests: An ad request A track request An ad request is a request that returns an ad, the first scenario. The second scenario executes a tracking request after the initial ad request. Therefore, it acts as an impression request. If you are using track requests to measure impressions, these numbers will build up your inventory. The actual inventory is reported and used in forecasting. The above explanation about impression measurement applies to any tag (See Implementation of the Adhese ad tags ). The Campaign actions report per position reports the number of requests, tracks, and other events. Third-party discrepancies may arise when the publisher's report does not match the advertiser's report. Adhese counts an impression the moment the ad request is made, while the advertiser may count an impression when the ad is delivered to the user. For more information about third-party discrepancies, refer to Troubleshooting . Retention period of data Historical summarised data, such as daily unique visitors, is available anytime and can be archived at the client's request. The data can be accessed through reporting, data mining, our API, or on-demand as a custom report. However, there are some restrictions that you need to take into account: Legislation : certain information cannot be saved or must be deleted after a short period. The unique identification of users and personal and other data storage is subject to national, European and international legislation. Adhese can assist and advise publishers in the matter. However, it is the exclusive responsibility of the publisher to comply with the law and adequately inform users of their rights. Common sense : the amount of collected data can be huge for some (combinations of) parameters. You should consider whether storing such a large amount of data is necessary or desirable. The answer to this question will differ from client to client. Where there is a lot of data, it is often recommended that only aggregated data is maintained. Predictions are usually based on historical data. The type of data saved, the frequency of saving (whether daily, hourly, or otherwise), and the duration of storage depend on the client's needs and strategy. BigQuery Reporting & Dataset Information Introduction Adhese Gateway (GW) logs all actions taken while receiving a request from a device and returning a response milliseconds later. This data is made available to the Gateway users through BigQuery (BQ) tables that contain results per day and are updated at midnight. The BQ tables are subject to change. Therefore, if you implement against them, you must be prepared to configure changes to the column structure. We will communicate planned changes prior to any deployments. However, we will not wait for every implementer to update. Access your Adhese data As a customer, you can access your data in three different ways, each suitable for a specific use case. These are briefly described below. Through a predefined Google Data Studio report Standard Data Studio templates are available to connect to your data source. This gives you immediate insight without any additional development. Access to the Data Studio data source(s) This allows you to create your own custom dashboards, which are useful for reporting on specific cases not covered by the standard dashboards. Direct access to the BigQuery table(s) The more advanced option is to query the dataset(s) or export them directly. This requires some technical knowledge. If you would like to access your data in any of these ways, please contact Adhese support and provide a (Google) email address with which we can share access. Through a Google Data Studio template At Adhese, we offer a variety of predefined dashboards that provide immediate insights into your data. An example is shown below. Access to the Data Studio data source(s) Another option is to get direct access to the underlying data sources. This method makes it possible to create any custom report or dashboard. When working with the data, it is important to understand the different columns and how to interpret them. Direct access to the BigQuery table(s) This is the more advanced option for your data team. It allows them to query the data sources directly or export the data to their own data solution. The following steps are required to access the BigQuery source: Contact  Adhese support and provide a Google email address connected to a Google Cloud account . We'll give the necessary permissions (BigQuery dataViewer, see role details here ). Once access is provided, you can query the different tables. Ensure you are within your own Google Cloud project ; otherwise, errors will be returned. Ensure you use the correct data location; by default, this is europe-west2 . The table names are structured as follows: adhese-cloud.${customer}.${table_name} Where ${customer} is your Adhese account name, and ${table_name} is the table you are trying to query. See details about the different tables below. You can find your Adhese account name in the URL used to log in to the Adhese platform (e.g. https://demo.adhese.org/ ) A test query could look as follows: If this works, you should be able to use any BigQuery functionality to further process your data. If you still have any questions, please don't hesitate to contact us at Adhese support . Overview of Collected Data Two sets of data are collected during the lifetime of a single GW request/response: the Media set and the Market set . The Media set contains all the information about the request, including the device it originated from, the content associated with it, the user associated with it (if any), and so on. The exact attributes of the media set differ for each GW account, depending on the available data and the context configured for that account. The Market set contains the communication log between GW and the active markets for a given GW account. Market standards determine which attributes are available, though some are not available in all markets. The Market set contains all incoming bid responses from all active markets with advertiser and price information. Basic table schema Table descriptions slots_extended adhese-cloud.${customer}.slots_extended This table contains the Market data set. Each row contains the number of bid responses per day, aggregated in latency buckets of 10ms. Show table   Field name Type Mode Description date DATE NULLABLE The date on which these bid requests were received. slot RECORD NULLABLE   slot. id INTEGER NULLABLE The ID of the slot the bid request was made from. slot. code STRING NULLABLE The code of the slot the bid request was made from. publication RECORD NULLABLE   publication. name STRING NULLABLE The publication name in the Adhese dbase. publication. url STRING NULLABLE The publication URL in the Adhese dbase. format RECORD NULLABLE   format. name STRING NULLABLE The format name in the Adhese database. format. width INTEGER NULLABLE The format width in pixels for this Bid Response. format. height INTEGER NULLABLE The format height in pixels for this Bid Response. publisher RECORD NULLABLE   publisher. name STRING NULLABLE The name of this location in the Adhese dbase. market RECORD NULLABLE   market. name STRING NULLABLE The market instance name as known in the Adhese configuration. market. currency STRING NULLABLE The currency this market uses for bid responses. bid RECORD NULLABLE   bid. count INTEGER NULLABLE The number of bid responses for this record. bid. amount FLOAT NULLABLE The total value of the bid responses for this record in market.currency. bid. winning RECORD NULLABLE   bid.winning. count INTEGER NULLABLE The number of winning bid responses for this record. bid.winning. amount FLOAT NULLABLE The total value of the winning bid responses for this record in market.currency. bid. tracked RECORD NULLABLE   bid.tracked. count INTEGER NULLABLE The number of rendered bid responses for this record. (aka paid impressions) bid.tracked. amount FLOAT NULLABLE The total value of the rendered bid responses for this record in market.currency. seatId STRING NULLABLE The seat ID as known by this market. domain STRING NULLABLE The "OpenRTB domain" field, containing the domain of the advertising party or brand for this Bid Response. dealId STRING NULLABLE The deal ID as known by this market. crId STRING NULLABLE The creative ID as known by this market. discountRate FLOAT NULLABLE The value of the multiplier applied to this bid response. exchangeRate FLOAT NULLABLE The value of the exchange rate at the moment of the bid between market.currency and EUR. latency INTEGER NULLABLE The value of the latency bucket for these bids. deviceType STRING NULLABLE The label of the device that generated the bid request (phone, desktop, tablet, tv). consent BOOLEAN NULLABLE Indication of consent for the bid requests to this market. reduced_access_log adhese-cloud.${customer}.reduced_access_log This table contains direct ad server and campaign data. It can be joined with the metadata tables below. Show table   Field name Type Mode Description date DATE NULLABLE The date the request was made timestamp TIMESTAMP NULLABLE Timestamp (grouped per hour) on which the request was made  creative_id INTEGER NULLABLE The ID of the creative that was delivered slot_id INTEGER NULLABLE The ID of the slot for which the request was made booking_id INTEGER NULLABLE The ID of the booking that was delivered campaign_id INTEGER NULLABLE The ID of the campaign that was delivered impression_count INTEGER NULLABLE Each time an ad is requested, one impression is counted. This does not correspond to an IAB paid impression. track_count INTEGER NULLABLE When an ad is rendered on a page, 1 track is counted. This corresponds to an IAB paid impression. raw_track_count INTEGER NULLABLE Raw amount of tracked impressions that were made before filtering out the duplicates click_count INTEGER NULLABLE Each time a user clicks on an ad, 1 click is counted raw_click_count INTEGER NULLABLE Raw amount of clicks that were made before filtering out the duplicates actions STRING REPEATED A viewable impression is counted when a ‘Adhese_IABview’ or 'mrc_viewable' action is present. targets RECORD REQUIRED Contains the default and custom parameters that are set up. Contact the support team for more information about each field under targets.  Metadata tables Updated daily with metadata for primary keys in the reduced_access_log table. meta_slots adhese-cloud.${customer}.meta_slots Extra information regarding slots (= positions) can be found here Show table Field name Type Mode Description date DATE NULLABLE   id INTEGER NULLABLE   name STRING NULLABLE   url STRING NULLABLE   position_type STRING NULLABLE position type as defined when creating a slot template_file STRING NULLABLE   location_id INTEGER NULLABLE   location_name STRING NULLABLE   location_url STRING NULLABLE   location_code STRING NULLABLE   publication_id INTEGER NULLABLE   publication_name STRING NULLABLE   publication_url STRING NULLABLE   publisher_id INTEGER NULLABLE   publisher_name STRING NULLABLE   meta_format adhese-cloud.${customer}.meta_format Extra information regarding formats can be found here Show table Field name Type Mode Description date DATE NULLABLE   id INTEGER NULLABLE   name STRING NULLABLE   width INTEGER NULLABLE   height INTEGER NULLABLE   code_tag STRING NULLABLE Code used to request the format code_book STRING NULLABLE Code used to link formats (subformat setup) code_import STRING NULLABLE   meta_creatives adhese-cloud.${customer}.meta_creatives Extra information regarding creatives can be found here Show table Field name Type Mode Description date DATE NULLABLE   id INTEGER NULLABLE   name STRING NULLABLE   type STRING NULLABLE   format_name STRING NULLABLE   format_width INTEGER NULLABLE   format_height INTEGER NULLABLE   creative_width INTEGER NULLABLE   creative_height INTEGER NULLABLE   creative_url STRING NULLABLE   size_kb INTEGER NULLABLE size restriction if configured advar_fields RECORD REPEATED advar template fields advar_file STRING NULLABLE chosen advar template size_kb does not contain the actual size of the uploaded files within the creative.  meta_booking adhese-cloud.${customer}.meta_booking Extra information regarding bookings can be found here Show table meta_booking     Description Field name Type Mode   date DAT NULLABLE   id INTEGER NULLABLE   campaign_id INTEGER NULLABLE   slot_id INTEGER NULLABLE   start TIMESTAMP NULLABLE   end TIMESTAMP NULLABLE   delivery_method STRING NULLABLE   to_reach_unit STRING NULLABLE e.g. impressions/clicks to_reach_volume INTEGER NULLABLE amount of units to reach priority STRING NULLABLE   capping STRING NULLABLE   delivery_limit STRING NULLABLE   pricing_type STRING NULLABLE   unit_price FLOAT NULLABLE   external_key STRING NULLABLE   comment STRING NULLABLE   daily_start INTEGER NULLABLE   daily_end INTEGER NULLABLE   exclusive BOOLEAN NULLABLE   compete_with_rtb BOOLEAN NULLABLE   together_with INTEGER REPEATED   active RECORD NULLABLE   active.monday BOOLEAN NULLABLE   active.tuesday BOOLEAN NULLABLE   active.wednesday BOOLEAN NULLABLE   active.thursday BOOLEAN NULLABLE   active.friday BOOLEAN NULLABLE   active.saturday BOOLEAN NULLABLE   active.sunday BOOLEAN NULLABLE   meta_campaign adhese-cloud.${customer}.meta_campaign Extra information regarding campaigns can be found here Show table Field name Type Mode Description date DATE NULLABLE   id INTEGER NULLABLE   name STRING NULLABLE   priority STRING NULLABLE   created_by STRING NULLABLE   to_reach_unit STRING NULLABLE e.g. impressions/clicks to_reach_volume INTEGER NULLABLE amount of units to reach advertiser_company STRING NULLABLE   invoice_company STRING NULLABLE   media_company STRING NULLABLE   intermediary_company STRING NULLABLE   client_contacts STRING NULLABLE   internal_id STRING NULLABLE   external_id STRING NULLABLE   account_managers STRING NULLABLE   public_comment STRING NULLABLE   internal_comment STRING NULLABLE   meta_booking_targets adhese-cloud.${customer}.meta_booking_targets Contains for each booking the target group, target label and target code that is used in that booking. Extra information regarding targeting can be found here Show table Field name Type Mode Description date DATE NULLABLE   booking_id INTEGER NULLABLE   type STRING NULLABLE target name type_code STRING NULLABLE target prefix name STRING NULLABLE target value name code STRING NULLABLE target value code meta_dooh_player (not available) adhese-cloud.${customer}.meta_dooh_player Show table   Field name Type Mode Description id INTEGER NULLABLE   date DATE NULLABLE The date on which these bid requests were received. store_city STRING NULLABLE   store_id STRING NULLABLE   store_formula STRING NULLABLE Type of store. store_channel STRING NULLABLE store_category STRING NULLABLE store_latlong STRING NULLABLE Latitudinal and longitudinal coordinates of the store. store_adress STRING NULLABLE store_postal_code STRING NULLABLE Other error_log adhese-cloud.${customer}.error_log This is a generic table used to store errors. For instance, it can be employed to identify unmatched slot requests. Show table Field name Type Mode Description date DATE NULLABLE   error_type STRING NULLABLE   message STRING NULLABLE   count INTEGER NULLABLE   Possible error types SLOT_ID_UNKNOWN The code of the requested position in the ad request does not match a position in Adhese CREATIVES_ID_TOO_LONG The creative identifier in the click tracking URL is not a valid ID. SLOT_ID_UNKNOWN sl target could not be matched to a valid slot id XANDR_SLOT_ID_UNKNOWN sl target could not be matched to a valid slot id and starts with xandr_ BAD_CLICK_URL An invalid value was found in the click url. Related to the click part, e.g. /ad695511-11419 BAD_TRACK_URL An invalid value was found in the track url. Related to the track part, e.g. 581025-mrc_50_1s.track REQUEST_PARAMETER_DUPLICATE e.g more than one sl parameter was found REQUEST_PARAMETER_MISSING e.g no sl parameter was found