Tracking Events on Easol
DataLayer Tracking Events
The dataLayer is a JavaScript object used to capture and store information about user behaviour on the website. It acts as a central source of truth for tracking, allowing tools like Google Tag Manager (GTM) to listen for key events and read the associated data.
Easol pushes information to the dataLayer whenever customers take key actions on your website, such as adding items to their cart, starting checkout, completing a booking, or submitting an enquiry. These events can then be picked up by GTM and forwarded to other platforms, including Google Analytics 4 (GA4), advertising platforms, and email/CRM tools.
All events below are pushed to the dataLayer and are available for use in Google Tag Manager (GTM).
Learn more how to set up Google Analytics on Easol here.
User
When a user is logged in to Easol, their details are pushed to the dataLayer on every page load. This happens separately from the ecommerce events — it is not included as part of individual event payloads like purchase or add_to_cart.
As this data contains personally identifiable information (PII), it must not be sent to GA4 in accordance with Google's policies. This information can, however, be used for CRM integrations (e.g. Klaviyo).
// Pushed on page load when a user is logged in
dataLayer.push({
"userId": "207d69df-1c0a-4e07-bdd5-0889b2685e23",
"userName": "Jane Smith",
"userEmail": "jane.smith@example.com",
"userCurrency": "GBP"
});
| Field | Description |
|---|---|
| userId | Unique identifier for the logged-in user within Easol |
| userName | Full name of the logged-in user (PII — do not send to GA4) |
| userEmail | Email address of the logged-in user (PII — do not send to GA4) |
| userCurrency | Active currency for the user at the time of the event |
Page view
Page views are tracked automatically by GA4's built-in enhanced measurement when Google Tag Manager is configured.
GA4 will automatically capture page_location, page_referrer, and page_title without any custom setup.
Page-Level DataLayer Variables
In addition to the ecommerce events described above, Easol pushes contextual variables to the dataLayer on specific page types. These are available in GTM for use in tags and triggers.
Product pages
dataLayer.push({
"productId": "28ac502a-80d5-40b4-b6b0-6814a0298f1f",
"productName": "Kayaking Adventure",
"productLocation": "United Kingdom",
"productCountryCode": "GB"
});
// If the product has a fixed departure date:
dataLayer.push({
"productDate": "2026-05-15"
});
Blog post pages
dataLayer.push({
"pageTitle": "Top 10 Adventures for 2026",
"pagePostDate": "2026-03-15 09:00:00 UTC",
"pagePostDateDay": "15",
"pagePostDateMonth": "3",
"pagePostDateYear": "2026"
});
These variables can be used for:
- Product-level retargeting in advertising platforms
- Content performance analysis
- Building audiences based on which products or content users viewed
E-commerce events
Add to Cart
An add_to_cart event fires whenever a package, product, or extra is added to the shopping cart. This event includes full details of the items the customer added to their cart.
dataLayer.push({
ecommerce: {
event: "add_to_cart",
currency: "USD",
value: "518.00",
coupon: "SAVE10",
items: [
{
item_id: "dbdb87db-f1ac-4078-a7c6-7827204f94eb",
item_name: "Nomadic Festival",
affiliation: "The Festival Company",
coupon: "SAVE10",
discount: "-10.00",
item_brand: "The Festival Company",
item_category: "Experience",
item_category2: "Festival",
item_category3: "Music",
item_variant: "VIP Pass",
price: "428.00",
quantity: 1,
item_date: "2024-09-04",
item_time: "16:30:00",
guest_count: 2
},
{
item_id: "dbdb87an-f1ac-7639-a7c7-7827204f94jk",
item_name: "Nomadic Festival",
affiliation: "The Festival Company",
coupon: "SAVE10",
discount: "-10.00",
item_brand: "The Festival Company",
item_category: "Experience",
item_category2: "Festival",
item_category3: "Spend",
item_variant: "RFID Voucher",
price: "90.00",
quantity: 2,
item_date: "2024-09-04",
guest_count: 1
}
]
}
});
Package pricing logic
Easol supports two package pricing models. The structure of the items array differs slightly depending on which model is used. This mirrors the format of Easol reporting.
Custom-priced packages
- A dedicated package line item is included
- All individual products included in the package are also included as separate line items
- The package line item carries the total price (
priceand event-levelvalue) - Included items typically have a price of
0.00
Sum-priced packages
- No package-level line item is included
- The total price is derived from the sum of the individual items
- Each item carries its own price
This logic applies consistently across add_to_cart, begin_checkout, and purchase events.
| Field | Description |
|---|---|
| item_id | Unique identifier for the variant or package in Easol |
| item_name | Name of the product or package |
| affiliation | Company name in Easol (useful for multi-venue businesses) |
| coupon | Voucher code applied, if any |
| discount | Discount value applied to this item |
| guest_count | Number of guests associated with the item |
| item_brand | Company name in Easol (matches affiliation) |
| item_category | High-level product type — Experience, Package, or Accommodation
|
| item_category2 | Category assigned to the product in Easol. For packages, this is always Package
|
| item_category3 | Subcategory assigned in Easol. For packages, this is always null
|
| item_date | Date the experience is booked for |
| item_time | Time the experience is booked for |
| item_variant | Variant name. For package line items, this is the package name |
| price | Item price. For custom-priced packages, the package line item carries the total price while included items typically show 0.00. This mirrors Easol revenue reporting. |
| quantity | Quantity of the item |
Remove from Cart
When one or more items are removed from the cart, a remove_from_cart event is fired. If the entire cart is cleared, the value is set to "0.00" and coupon is set to null.
dataLayer.push({
ecommerce: {
event: "remove_from_cart",
currency: "USD",
value: "428.00",
coupon: "SAVE10",
items: [
{
item_id: "dbdb87an-f1ac-7639-a7c7-7827204f94jk",
item_name: "Nomadic Festival",
affiliation: "The Festival Company",
coupon: "SAVE10",
discount: "-10.00",
item_brand: "The Festival Company",
item_category: "Experience",
item_category2: "Festival",
item_category3: "Spend",
item_variant: "RFID Voucher",
price: "90.00",
quantity: 2,
item_date: "2024-09-04",
guest_count: 1
}
]
}
});
| Field | Description |
|---|---|
| value | Updated cart total after removal. Set to "0.00" if the entire cart was cleared |
| coupon | Active voucher code, if any. Set to null if the cart was cleared |
| items | Array of the removed item(s), using the same item structure as add_to_cart
|
Begin Checkout
When a customer reaches /checkout, a begin_checkout event is fired. This event includes details of all items in the cart, along with the initial sale_ref assigned to the booking.
If the customer completes the purchase, this sale_ref becomes the booking ID shown in Easol.
dataLayer.push({
ecommerce: {
event: "begin_checkout",
currency: "USD",
value: "428.00",
coupon: "SAVE10",
sale_ref: "19A-BCD2",
items: [
{
item_id: "dbdb87db-f1ac-4078-a7c6-7827204f94eb",
item_name: "Nomadic Festival",
affiliation: "The Festival Company",
coupon: "SAVE10",
discount: "-10.00",
item_brand: "The Festival Company",
item_category: "Experience",
item_category2: "Festival",
item_category3: "Music",
item_variant: "VIP Pass",
price: "428.00",
quantity: 1,
item_date: "2024-09-04",
item_time: "16:30:00",
guest_count: 2
}
]
}
});
Add Payment Info
An add_payment_info event fires when a customer enters their payment details during the checkout process. This event signals that the customer has progressed through the checkout funnel and is about to complete their purchase.
This event can be used to:
- Track checkout funnel progression in GA4
- Measure drop-off between checkout start and payment completion
- Send conversion signals to advertising platforms for optimisation
The event payload follows the same item structure as begin_checkout, with the addition of a payment_type field.
dataLayer.push({
ecommerce: {
event: "add_payment_info",
currency: "USD",
value: "428.00",
coupon: "SAVE10",
payment_type: "Card",
sale_ref: "19A-BCD2",
items: [
{
item_id: "dbdb87db-f1ac-4078-a7c6-7827204f94eb",
item_name: "Nomadic Festival",
affiliation: "The Festival Company",
coupon: "SAVE10",
discount: "-10.00",
item_brand: "The Festival Company",
item_category: "Experience",
item_category2: "Festival",
item_category3: "Music",
item_variant: "VIP Pass",
price: "428.00",
quantity: 1,
item_date: "2024-09-04",
item_time: "16:30:00",
guest_count: 2
}
]
}
});
| Field | Description |
|---|---|
| payment_type | The payment method selected: "Card", "Open banking", or "Klarna"
|
Purchase
A purchase event fires on successful transaction completion. This is fired for all bookings made via the Easol checkout, including those triggered by an enquiry or recommendation.
If the booking originated from an enquiry (i.e. a group sale / recommendation), recommendation_booking will be true. For standard online bookings it will be false.
The purchase event includes the transaction_id of the purchase (matching the transaction ID on the Easol sales report), alongside the booking reference (via sale_ref).
If a customer uses a voucher code, this will be displayed as coupon and the discount assigned to each line item will be shown in the discount field.
dataLayer.push({
ecommerce: {
event: "purchase",
transaction_id: "abcb87db-f1ac-4078-a7c6-7827204f94eb",
value: "428.00",
coupon: "SAVE10",
currency: "USD",
recommendation_booking: false,
sale_ref: "19A-BCD2",
items: [
{
item_id: "dbdb87db-f1ac-4078-a7c6-7827204f94eb",
item_name: "Nomadic Festival",
affiliation: "The Festival Company",
coupon: "SAVE10",
discount: "-10.00",
item_brand: "The Festival Company",
item_category: "Experience",
item_category2: "Festival",
item_category3: "Music",
item_variant: "VIP Pass",
price: "428.00",
quantity: 1,
item_date: "2024-09-04",
item_time: "16:30:00",
guest_count: 2
}
]
}
});
| Field | Description |
|---|---|
| transaction_id | Unique booking identifier. |
| sale_ref | Easol booking reference used across the full lifecycle — enquiries, carts, checkout, and completed purchases |
| recommendation_booking |
true if the booking originated from an enquiry/recommendation flow; false for standard online bookings |
| coupon | Voucher code used, if any |
Login
A login event fires when an existing user logs in. This event has no additional payload — it signals that a login occurred.
dataLayer.push({ event: "login" });
User details (userId, userName, userEmail, userCurrency) are not included in the login event itself. They are pushed separately to the dataLayer on the subsequent page load (see the User section above). After login, the user data will be available in the dataLayer on all future page views for that session.
Sign Up
A sign_up event fires when a new user creates an account. This event has no additional payload — it signals that an account was created.
dataLayer.push({ event: "sign_up" });
As with login, user details are pushed separately on the subsequent page load, not as part of this event.
Generate Lead
A generate_lead event is fired when an enquiry form built using Easol Enquiries is submitted. This event identifies the form submitted, the enquiry ID, and the sale_ref that will be assigned to the booking (as the Easol booking reference) if the enquiry converts into a successful sale.
This sale_ref can be used to attribute the original source of the enquiry to a booking, such as Google Ads, Meta, or other marketing channels.
dataLayer.push({
ecommerce: {
event: "generate_lead",
company: "The Festival Company",
form_name: "2024 event enquiry",
form_id: "abcf87db-f1ac-1234-a7c6-7827204f12jh",
enquiry_id: "abcd87db-f1ac-5678-a7c6-7827204f94eb",
sale_ref: "19A-BCD2"
}
});
| Field | Description |
|---|---|
| company | The company name in Easol associated with the enquiry form |
| form_name | Name of the Easol enquiry form that was submitted |
| form_id | Unique identifier for the enquiry form |
| enquiry_id | Unique identifier for this specific enquiry submission |
| sale_ref | Booking reference that will follow the enquiry through to purchase, enabling end-to-end attribution |
GA4 Parameter Glossary
The table below documents the parameters passed by Easol, how they appear in GA4, and whether they require custom dimension registration.
| Parameter | Example | GA4 Field | Scope | Custom Dim? | Description |
|---|---|---|---|---|---|
userId |
207d69df-... | user_id |
User | No | Unique user identifier in Easol |
userName |
Jane Smith | N/A | N/A | N/A | PII — must not be sent to GA4 |
userEmail |
jane@example.com | N/A | N/A | N/A | PII — must not be sent to GA4 |
userCurrency |
GBP | currency |
Event | No | Active currency for the user |
value |
250.00 | value |
Event | No | Total monetary value of the event |
currency |
GBP | currency |
Event | No | ISO currency code |
sale_ref |
9DG-YZV5 | sale_ref |
Event | Yes | Easol booking reference |
transaction_id |
ad900109-... | transaction_id |
Event | No | Unique ID for the booking |
item_id |
92338524-... | item_id |
Item | No | Unique variant/package ID in Easol |
item_name |
Kayaking Session | item_name |
Item | No | Product or package name |
item_brand |
Your Company | item_brand |
Item | No | Company name in Easol |
item_category |
Experience | item_category |
Item | No | Product type (Experience/Package/Accommodation) |
item_category2 |
Active | item_category2 |
Item | No | Category in Easol. Packages = "Package" |
item_category3 |
Water Sports | item_category3 |
Item | No | Subcategory in Easol. Packages = null |
item_variant |
Morning Session | item_variant |
Item | No | Variant name |
price |
250.00 | price |
Item | No | Item price (see package pricing logic) |
quantity |
1 | quantity |
Item | No | Quantity of the item |
guest_count |
4 | guest_count |
Item | Yes | Number of guests |
item_date |
2026-05-15 | date_of_booking |
Item | Yes | Booking date |
item_time |
10:00:00 | time_of_booking |
Item | Yes | Booking time |
payment_type |
Card | payment_type |
Event | Yes | Payment method: "Card", "Open banking", or "Klarna" |
recommendation_booking |
true / false | recommendation_booking |
Event | Yes | Whether booking is from enquiry/recommendation |
form_id |
3c9468de-... | form_id |
Event | Yes | Easol enquiry form ID |
enquiry_id |
8d8250fe-... | enquiry_id |
Event | Yes | Unique enquiry submission ID |
Important: Parameters marked as "Custom Dimension Required" (Yes) must be manually registered in your GA4 property settings before they will appear in reports and explorations. To do this, go to Admin → Custom definitions → Create custom dimension in GA4.
Comments
0 comments
Article is closed for comments.