Developers » Piano Analytics tagging » Event tagging » Standard events
Standard events
Forewords
One of the strengths of Piano Analytics data model is that it offers standard events and properties that are present by default.
These events will allow you to measure the majority of interactions present on your perimeters. So there is no need to reinvent an event from scratch when you just want to measure the loading of a page, or the consultation of a product page! Moreover, the use of these standard events allows us to provide you with dedicated metrics. For example, the time spent per page is a metric linked to the use of the standard page view event page.display
.
Each standard event can be linked to standard properties dedicated to it.
However, it is not mandatory to use each of the informed properties, and it is quite possible to add other properties (standard or custom) if you wish.
User
In order to track your logged users, you can use the following properties:
Properties | Type | Example |
user_id | String | A1192 |
user_category | String | Premium |
Content
Pages
Event name :
page.display
Standard properties linked:
Properties | Type | Example |
page | String | Article3 |
page_chapter1 | String | News |
page_chapter2 | String | Politique |
page_chapter3 | String | Elections |
The property definition is available within your data model.
Tagging example:
tag.events.send('page.display', { 'page': 'page name', 'page_chapter1': 'chapter 1' , 'page_chapter2': 'chapter 2' , 'page_chapter3': 'chapter 3' } );
_ = tracker.events.add(name: "page.display", data: "page" : "page name", "page_chapter1" : "chapter 1", "page_chapter2" : "chapter 2", "page_chapter3" : "chapter 3" ) tracker.dispatch()
tracker.Events().add("page.display", new HashMap() {{ put("page", "page name"); put("page_chapter1", "chapter 1"); put("page_chapter2", "chapter 2"); put("page_chapter3", "chapter 3"); }}) tracker.dispatch();
Clicks
Event name :
click.navigation
click.action
click.exit
click.download
Standard properties linked:
properties | Type | Example |
click | String | Article3 |
click_chapter1 | String | News |
click_chapter2 | String | Politique |
click_chapter3 | String | Elections |
The property definition is available within your data model.
Tagging example:
tag.events.send('click.navigation', { 'click': 'click name', 'click_chapter1': 'chapter 1', 'click_chapter2': 'chapter 2', 'click_chapter3': 'chapter 3' } );
_ = tracker.events.add(name: "click.navigation", data: "click": "click name", "click_chapter1": "chapter 1", "click_chapter2": "chapter 2", "click_chapter3": "chapter 3" ) tracker.dispatch()
tracker.Events().add("click.navigation", new HashMap() {{ put("click", "click name"); put("click_chapter1", "chapter 1"); put("click_chapter2", "chapter 2"); put("click_chapter3", "chapter 3"); }}) tracker.dispatch();
Internal search engine
Results display
Event name :
internal_search_result.display
Standard properties linked:
properties | Type | Example |
ise_keyword | String | Mobile Phone |
ise_page | Int | 2 |
The property definition is available within your data model.
Tagging example:
tag.events.send('internal_search_result.display', { 'ise_keyword': 'Mobile Phone', 'ise_page': 2 } );
_ = tracker.events.add(name: "internal_search_result.display", data: "ise_keyword": "Mobile Phone", "ise_page": 2 ) tracker.dispatch()
tracker.Events().add("internal_search_result.display", new HashMap() {{ put("ise_keyword", "Mobile Phone"); put("ise_page", 2); }}) tracker.dispatch();
Results clicks
Event name :
internal_search_result.click
Standard properties linked:
properties | Type | Example |
ise_keyword | String | Mobile Phone |
ise_page | Int | 2 |
ise_click_rank | Int | 15 |
The property definition is available within your data model.
Tagging example:
tag.events.send('internal_search_result.click', { 'ise_keyword': 'Mobile Phone', 'ise_page': 2, 'ise_click_rank': 15 } );
_ = tracker.events.add(name: "internal_search_result.click", data: "ise_keyword": "Mobile Phone", "ise_page": 2, "ise_click_rank": 15 ) tracker.dispatch()
tracker.Events().add("internal_search_result.click", new HashMap() {{ put("ise_keyword", "Mobile Phone"); put("ise_page", 2); put("ise_click_rank", 15); }}) tracker.dispatch();
Goals
In order to track conversion goals, you can use the following property:
Properties | Type | Example |
goal_type | String | Account creation |
On Site Ads
Event name :
publisher.display
publisher.click
self_promotion.display
self_promotion.click
Standard properties linked:
properties | Type | Example |
onsitead_type (required) | String | Publisher | Self promotion |
onsitead_campaign | String | Acquisition |
onsitead_category | String | Gold |
onsitead_creation | String | Banner_main |
onsitead_variant | String | Blue |
onsitead_format | String | 400×300 |
onsitead_general_placement | String | Sidebar |
onsitead_detailed_placement | String | Sidebar_bottom |
onsitead_advertiser | String | My Site |
onsitead_url | String | www.mysite.com |
The property definition is available within your data model.
awaiti
tag.events.send('publisher.display', { 'onsitead_type': 'Publisher', 'onsitead_campaign': 'Acquisition', 'onsitead_category': 'Gold', 'onsitead_creation': 'Banner_main', 'onsitead_variant': 'Blue', 'onsitead_format': '400x300', 'onsitead_general_placement': 'Sidebar', 'onsitead_detailed_placement': 'Sidebar_bottom', 'onsitead_advertiser': 'My Site', 'onsitead_url': 'www.mysite.com' } );
_ = tracker.events.add(name: "publisher.display", data: "onsitead_type": "Publisher", "onsitead_campaign": "Acquisition", "onsitead_category": "Gold", "onsitead_creation": "Banner_main", "onsitead_variant": "Blue", "onsitead_format": "400x300", "onsitead_general_placement": "Sidebar", "onsitead_detailed_placement": "Sidebar_bottom", "onsitead_advertiser": "My Site", "onsitead_url": "www.mysite.com" ) tracker.dispatch()
tracker.Events().add("publisher.display", new HashMap() {{ put("onsitead_type", "Publisher",); put("onsitead_campaign", "Acquisition",); put("onsitead_category", "Gold",); put("onsitead_creation", "Banner_main",); put("onsitead_variant", "Blue",); put("onsitead_format", "400x300",); put("onsitead_general_placement", "Sidebar",); put("onsitead_detailed_placement", "Sidebar_bottom",); put("onsitead_advertiser", "My Site",); put("onsitead_url", "www.mysite.com",); }}) tracker.dispatch();
Sales Insights
Properties
Product properties
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
product_id | ID | string | Yes | 'LPTAX174' |
product | Label | string | 'Laptop AX174' | |
product_variant | Variant | string | '8Go RAM' | |
product_brand | Brand | string | 'Loptap' | |
product_discount | Discounted product? | boolean | false | |
product_pricetaxincluded | Price tax included | float | 1399.90 | |
product_pricetaxfree | Price tax free | float | 1120.90 | |
product_currency | Currency (ISO 4217) | string | 'EUR' | |
product_stock | Product in stock? | boolean | true | |
product_quantity | Quantity | int | 1 | |
product_category1 | Level 1 category | string | 'Hardware' | |
product_category2 | Level 2 category | string | 'Computer' | |
product_category3 | Level 3 category | string | 'Gaming' | |
product_category4 | Level 4 category | string | 'Laptop' | |
product_cartcreation | Cart created by this product addition? | boolean | false | |
product_promocode | Product promotion code | array of string |
|
Cart properties
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
cart_id | ID | string | Yes | 'HW-8892' |
cart_currency | Currency (ISO 4217) | string | 'EUR' | |
cart_turnovertaxincluded | Turnover tax included | float | 2900.00 | |
cart_turnovertaxfree | Turnover tax free | float | 2340.50 | |
cart_creation_utc | Cart creation date (timestamp UTC in seconds) | int | 1501065673 | |
cart_quantity | Number of products | int | 3 | |
cart_nbdistinctproduct | Number of distinct products | int | 2 | |
cart_version | When updating the cart awaiting payment (adding/removing a product), it will be necessary to generate a new unique version identifier (cart_version ) associated with the cart (cart_id ). This is necessary when using pending carts/products (cart.awaiting_payment / product.awaiting_payment ) | string | 'v1' |
Transaction properties
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
transaction_id | ID | string | Yes | '29984' |
transaction_promocode | Promo code list | array of string | ['BLACKFRIDAY', 'VIP'] | |
transaction_firstpurchase | First purchase of the customer? | boolean | true |
Shipping properties
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
shipping_delivery | Shipping type | string | 'Express' | |
shipping_costtaxincluded | Shipping cost tax included | float | 10.50 | |
shipping_costtaxfree | Shipping cost tax free | float | 8.00 |
Payment properties
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
payment_mode | Payment mode | string | 'Credit card' |
Events
product.display
Used to measure the display of a product (not on the product page). For example on a listing page.
Recommended properties:
product_id
, product
, product_variant
, product_brand
, product_discount
, product_pricetaxincluded
, product_pricetaxfree
, product_currency
, product_stock
, product_category1
, product_category2
, product_category3
, product_category4
product.page_display
Used to measure the display of a product page.
Recommended properties:
product_id
, product
, product_variant
, product_brand
, product_discount
, product_pricetaxincluded
, product_pricetaxfree
, product_currency
, product_stock
, product_category1
, product_category2
, product_category3
, product_category4
product.add_to_cart
Used to measure the addition of a product to the cart.
Recommended properties:
cart_id
, product_id
, product
, product_variant
, product_brand
, product_discount
, product_pricetaxincluded
, product_pricetaxfree
, product_currency
, product_stock
, product_category1
, product_category2
, product_category3
, product_category4
, product_quantity
, product_cartcreation
product.remove_from_cart
Used to measure the removal of a product from the basket.
Recommended properties:
cart_id
, product_id
, product
, product_variant
, product_brand
, product_discount
, product_pricetaxincluded
, product_pricetaxfree
, product_currency
, product_stock
, product_category1
, product_category2
, product_category3
, product_category4
, product_quantity
product.awaiting_payment
Used to measure a product waiting for payment.
Recommended properties:
transaction_id
, cart_id
, product_id
, product
, product_variant
, product_brand
, product_discount
, product_pricetaxincluded
, product_pricetaxfree
, product_currency
, product_stock
, product_category1
, product_category2
, product_category3
, product_category4
, product_quantity
product.purchased
Used to measure a purchased product.
Recommended properties:
transaction_id
, cart_id
, product_id
, product
, product_variant
, product_brand
, product_discount
, product_pricetaxincluded
, product_pricetaxfree
, product_currency
, product_stock
, product_category1
, product_category2
, product_category3
, product_category4
, product_quantity
cart.awaiting_payment
Used to measure a cart awaiting payment.
Recommended properties:
cart_id
, cart_currency
, cart_turnovertaxincluded
, cart_turnovertaxfree
, cart_quantity
, cart_nbdistinctproduct
, shipping_delivery
, shipping_costtaxincluded
, shipping_costtaxfree
A
transaction.confirmation
event with the samecart_id
and anoffsite_confirmation
property (boolean
,true
) allows to confirm this cart afterwards. A delay of 24 hours is left for the arrival of this confirmation.
transaction.confirmation
Used to measure a completed transaction.
Recommended properties:
cart_id
, cart_currency
, cart_turnovertaxincluded
, cart_turnovertaxfree
, cart_creation_utc
, cart_quantity
, cart_nbdistinctproduct
, transaction_id
, transaction_promocode
, transaction_firstpurchase
, shipping_delivery
, shipping_costtaxincluded
, shipping_costtaxfree
, payment_mode
Audio / Video
Specifications
Important notes
In order to properly monitor the measurement of your AV content, there are a few things you need to know.
play vs playbackStart
The events av.play
(play
) represent the first click on the play button, which starts loading the video.
The events av.start
(playbackStart
) represent the playback of the first frame of the content.
The classic sequence of events is therefore av.play
followed by av.start
. In between, the video loading time can be measured with events av.buffer.start
followed by av.buffer.heartbeat
..
If you are not able to differentiate these two times, it is necessary to send av.start
(playbackStart
).
start vs resume
If playback is resumed (after a pause or loading time (rebuffer) for example), it will be necessary to send an event av.resume
(playbackResumed
) rather than av.play
.
Cursor position management
When using methods related to reading content, the cursor position is required.
This position makes it possible to know the real progress of the reading.
Playback speed management
In order to measure the position of the cursor, the libraries calculate the time actually spent playing. By default, one real second will correspond to one second of playing.
However, you can change this playback speed via the method setPlaybackSpeed
, by specifying the speed factor.
Tracking examples
Full playback

seek event tracking

Automatic processing
Some automatic processings are managed by the tagging libraries.
However, it is necessary to know them and to take them into account when tagging not using libraries.
seek (seek start, forward/backward)
When calling a seek
(seek
) method, several events are raised:
av.seek.start
, indicating the start of seek, and bearing the cursor position before the moveav.forward
orav.backward
, depending on the start and end positions of the cursor move .
session id
Each playback session has a unique identifier (property av_session_id
).
A playback session is defined by a content play. It stops if the content changes, or if the video is stopped (av.stop
).
buffer vs rebuffer
Two types of loading times can be identified:
- buffer (
av.buffer.start
(bufferStart
) andav.buffer.heartbeat
), for loading before the start of playback (betweenav.play
andav.start
) - rebuffer (
av.rebuffer.start
(bufferStart
) andav.rebuffer.heartbeat
), for loading during playback (afterav.start
) ).
The method bufferStart
checks if a playbackStart
has been called on the current session, in order to send the corresponding load type.
heartbeat
During playback, in order to measure durations more precisely, heartbeat events provide information on the status of the player.
Several types of heartbeat are available:
av.heartbeat
, triggers after aplaybackStart
orplaybackResumed
, allows to measure the content playbackav.(re)buffer.heartbeat
, triggers after abufferStart
, allows to measure the duration of loading times
The time between two heartbeats is defined at the moment of media instantiation. It can be fixed for the whole playback, or it can evolve via a JSON object.
On short media, we recommend to fill in 5 seconds between each heartbeat, in order to have a fine enough measurement without overloading the user’s network and the collection servers. On larger media, you should space heartbeats with more time, up to 30 minutes in order to keep the playback session alive.
duration
The time actually spent in front of the content is filled in the property av_duration
, via a timer.
This is the time elapsed in milliseconds between the previous event and the current one.
previous event/position
On each event, it is necessary to fill in the position (av_previous_position
) and the name (av_previous_event
) of the previously sent event.
Pattern
Common standard properties
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_content_id | Content ID | string | Yes | 'bc35' |
av_session_id | Session ID | uuid* | Yes | '799d9f3b-7307-5113-a260-2e1371e35fe6' |
av_content | Content Label | string | 'Broadchurch 3.5' | |
av_content_type | Content Type | string | 'TV Show' | |
av_content_duration | Content Duration (in milliseconds) | int | 2760000 | |
av_content_linked | Linked Content Label | string | 'myLinkedContent' | |
av_publication_date | Publication Date (timestamp) | date | 1501065673 | |
av_content_genre | Content genre(s) | array of string | ["Crime","Drama","Mystery"] | |
av_show | Show Label | string | 'Broadchurch' | |
av_show_season | Show Season Label | string | '3' | |
av_episode_id | Episode ID | string | '5' | |
av_episode | Episode Label | string | 'Episode #3.5' | |
av_channel | Channel Label | string | 'ITV' | |
av_author | Author Name | string | 'Chris Chibnall' | |
av_content_version | Content Version (full length, …) | string | 'Full length' | |
av_content_duration_range | Duration range | string | '0-10' | |
av_broadcasting_type | Broadcasting Type | string | 'Live' | |
av_broadcaster | Broadcaster Name | string | 'ITV' | |
av_ad_type | Ad Type | string | 'Mid-roll' | |
av_player | Player Label | string | 'Main' | |
av_player_version | Player Version | string | '1.55' | |
av_player_position | Player Position | string | 'Homepage' | |
av_auto_mode | Auto play mode | boolean | true | |
av_language | Media language | string | 'fr' | |
av_subtitles | Subtitles | string | 'en' | |
av_launch_reason | Launch reason | string | 'auto' |
* uuid type requires a version 5 (random) or version 5 (named) RFC 5122-compliant UUID, otherwise, our processing will generate one to replace the tagged value.
Events
av.heartbeat
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.buffer.heartbeat
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.rebuffer.heartbeat
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.play
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.buffer.start
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.rebuffer.start
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.start
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.resume
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.pause
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.stop
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.forward
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.backward
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.seek.start
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_duration | Time spent since previous event (ms) | int | Yes | 5000 |
av_position | Current event cursor position | int | Yes | 15000 |
av_previous_event | Previous event name | string | Yes | 'av.heartbeat' |
av_previous_position | Previous event cursor position | int | Yes | 10000 |
av.ad.click
av.ad.skip
av.error
Property | Description | Type | Mandatory | Example |
---|---|---|---|---|
av_player_error | Error message | string | 'Content not available' |