# Labeling guide. Bug review
**book.becasaapartments**
This document describes some necessary corrections for the correct measurement of the user's browsing path in the reservation process of https://book.becasaapartments.com/.
We currently have a number of events in the data layer that lack key information for measurement, so they will need to be modified. New events must have the standard Google Analytics 4 eCommerce structure: https://developers.google.com/tag-manager/ecommerce-ga4?hl=es
These modifications are detailed below:
## Search and use filters
### Reservation search
#### When
Every time the user performs a reservation search.

#### Old event
We currently do not have any event that measures this interaction.
#### New event
```
dataLayer.push({
event: "booking_search",
userId: "ef79dcaa-1c2e-4543-9249-bec800e9cdd8"
location: "Rivas" // Search location
start_date: "2023-04-01", // Check in
end_date: "2023-04-30", // Departure date
adults: 2, // Number of adults
childrens: 0, // Number of children
booking_type: “corta estancia” // Category of the apartment. If it is more than two months, then "Larga estancia". If it is less than two months, then "Corta estancia".
gtm.uniqueEventId: 16
})
```
### Use of filters
#### When
Every time the filters are used. It should be activated every time the user interacts with any of the following elements:

<br>

#### Old events
We currently have various events implemented in the various filter interactions.
##### Filter by location
```
dataLayer.push({event: "filter_by_location", ecommerce: {items: ["Rivas"]}, gtm.uniqueEventId: 76})
```
##### Filter by dates
```
dataLayer.push({event: "filter_by_dates", gtm.uniqueEventId: 136})
```
##### Filter by guests
```
dataLayer.push({event: "filter_by_guests", gtm.uniqueEventId: 158})
```
##### Filter by bedrooms
```
dataLayer.push({event: "filter_by_bedrooms", gtm.uniqueEventId: 176})
```
##### Filter by bathrooms
```
dataLayer.push({event: "filter_by_bathrooms", gtm.uniqueEventId: 194})
```
These interactions must be measured with a single event. Therefore the old events must be replaced by the new event.
#### New event
```
<script>
window.dataLayer = window.dataLayer || [];
dataLayer.push({
event: 'parameter_filter',
userId: "ef79dcaa-1c2e-4543-9249-bec800e9cdd8"
location: "Rivas" // Search location
start_date: "2023-04-01", // Check in
end_date: "2023-04-30", // Departure date
adults: 2, // Number of adults
childrens: 0, // Number of children
bedrooms: 2 // Number of bedrooms
bathrooms: 2 // Number of bathrooms
24_hour_checkin: true // True if the checkbox is checked
adapted_bath: true // True if the checkbox is checked
spaces_non_smoking: true // True if the checkbox is checked
bar: true // True if the checkbox is checked
24_hour_security: true // True if the checkbox is checked
aerobics: true // True if the checkbox is checked
baggage_storage: true // True if the checkbox is checked
accessible_parking: true // True if the checkbox is checked
air_conditioning: true // True if the checkbox is checked
barbecue_utensils: true // True if the checkbox is checked
bath_or_shower: true // True if the checkbox is checked
bathroom_amenities: true // True if the checkbox is checked
bathroom_emergency_pull_cord: true // True if the checkbox is checked
bbq_area: true // True if the checkbox is checked
beach_chairs: true // True if the checkbox is checked
bike_parking: true // True if the checkbox is checked
business_center: true // True if the checkbox is checked
});
</script>
```
Only the filters used will appear, so it will not be necessary to include in the dataLayer the filters whose box is not checked.
## Eventos de ecommerce
### view_item_list
#### When
This event will need to be completed each time the user visits a listing page:

#### Old event
Currently the following event is activated as many times as apartments appeared in the list
```
dataLayer.push({
event: "view_search_results",
ecommerce: {
items: [
"/properties/607?mu=1",
"Comfort 1 Bedroom Apartment with plus terrace",
119.25,
"EUR",
null
]
},
gtm.uniqueEventId: 96
})
```
Therefore, these events must be unified and replaced by the new event
#### New event
```
<script>
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'event': 'view_item_list',
'item_list_id': 'item_list_id', // The ID of the list in which the item was presented to the user.
'item_list_name': 'item_list_name', // The name of the list in which the item was presented to the user.
'booking_type': 'Corta estancia', // Category of the apartment. If it is more than two months, then "Larga estancia". If it is less than two months, then "Corta estancia".
'items': [
{
'item_id': '602', // The ID of the item. *One of item_id or item_name is required.
'item_name': 'Comfort 1 Bedroom Apartment', // The name of the item. *One of item_id or item_name is required.
'currency': 'EUR', // The currency, in 3-letter ISO 4217 format.
'item_list_id': 'item_list_id', // The ID of the list in which the item was presented to the user.
'price': 100 // The monetary price of the item, in units of the specified currency parameter.
},
{
'item_id': '605', // The ID of the item. *One of item_id or item_name is required.
'item_name': 'Apartamento 1 dormitorio', // The name of the item. *One of item_id or item_name is required.
'currency': 'EUR', // The currency, in 3-letter ISO 4217 format.
'item_list_id': 'item_list_id', // The ID of the list in which the item was presented to the user.
'price': 200 // The monetary price of the item per night or month, in units of the specified currency parameter.
}
]
});
</script>
```
This event must be unique and collect in the same dataLayer as many elements as apartments appeared in the list.
### view_item
#### When
This event must be completed each time the user enters an apartment page.
#### Old event
We currently do not have any events implemented that measure this interaction.
#### New event
This event must collect the details of apartment.
```
window.dataLayer = window.dataLayer || [];
dataLayer.push({
event: "view_item",
ecommerce: {
items: [{
item_id: '602', // The ID of the item. *One of item_id or item_name is required.
item_name: 'Comfort 1 Bedroom Apartment', // The name of the item. *One of item_id or item_name is required.
price: '100 // The monetary price of the item per night or month, in units of the specified currency parameter.
location: "Rivas" // Apartment location
currency: 'EUR', // The currency, in 3-letter ISO 4217 format.
item_list_id: 'item_list_id', // If associated with a list selection.
item_list_name: 'item_list_name', // If associated with a list selection.
booking_type: 'Corta estancia' // Category of the apartment. If it is more than two months, then "Larga estancia". If it is less than two months, then "Corta estancia".
}]
}
});
```
### Begin checkout
#### When
This event must be completed each time the user initiates a purchase process.

#### Evento anterior
Currently we have implemented the following event
```
dataLayer.push({
event: "click_book_now",
ecommerce: {
items: [
{
id: "/properties/608?mu=1",
name: "Comfort 1 Bedroom Apartment PMR",
price: 1600,
currency: "EUR"
}
]
},
gtm.uniqueEventId: 84
})
```
This event does not collect all the necessary fields, so it must be replaced by the new event.
#### New event
```
window.dataLayer = window.dataLayer || [];
dataLayer.push({
event: "begin_checkout",
ecommerce: {
items: [{
item_id: '602', // The ID of the item. *One of item_id or item_name is required.
item_name: 'Comfort 1 Bedroom Apartment', // The name of the item. *One of item_id or item_name is required.
price: 100 // The monetary price of the item per night, in units of the specified currency parameter.
quantity: 20 // Number of days of the reservation
currency: 'eur', // The currency, in 3-letter ISO 4217 format.
}]
}
});
```
### checkout step 2
#### When
This event must be completed in step 2 of checkout.

#### Old event
```
dataLayer.push({
event: "checkout_step_2",
ecommerce: {
items: [
{
id: "/properties/608",
name: "Comfort 1 Bedroom Apartment PMR",
price: 1900,
currency: "EUR"
}
]
},
step: 2,
gtm.uniqueEventId: 102
})
```
This event does not collect all the necessary fields so it must be replaced by the new event
#### New event
```
window.dataLayer = window.dataLayer || [];
dataLayer.push({
event: "checkout_step_2",
ecommerce: {
items: [{
item_id: '602', // The ID of the item. *One of item_id or item_name is required.
item_name: 'Comfort 1 Bedroom Apartment', // The name of the item. *One of item_id or item_name is required.
price: 100 // The monetary price of the item per night, in units of the specified currency parameter.
quantity: 20 // Number of days of the reservation
currency: 'EUR', // The currency, in 3-letter ISO 4217 format.
}]
}
});
```
### checkout step 3
#### When
This event must be completed in step 3 of checkout.

#### Old event
Currently we have implemented the following event
```
dataLayer.push({
event: "checkout_step_3",
ecommerce: {
items: [
{id: "/properties/602", name: "Comfort 1 Bedroom Apartment", price: 500, currency: "EUR"}
]
},
step: 3,
gtm.uniqueEventId: 367
})
```
This event does not collect all the necessary data so it must be replaced by the new event.
#### New event
```
window.dataLayer = window.dataLayer || [];
dataLayer.push({
event: "checkout_step_3",
email: "test@test.com" , // These data must be coded (SHA-256)
phone_number: "+34640000000", // These data must be coded (SHA-256)
address: {
first_name: "firs_name", // These data must be coded (SHA-256)
last_name: "last_name" // These data must be coded (SHA-256)
},
ecommerce: {
items: [{
item_id: '602', // The ID of the item. *One of item_id or item_name is required.
item_name: 'Comfort 1 Bedroom Apartment', // The name of the item. *One of item_id or item_name is required.
price: 100 // The monetary price of the item per night, in units of the specified currency parameter.
quantity: 20 // Number of days of the reservation
currency: 'EUR', // The currency, in 3-letter ISO 4217 format.
}]
}
});
```
**It is important that the personal data of phone_number, email, fist_name and last_name are collected encrypted according to the Google documentation.**
https://support.google.com/google-ads/answer/9004655
### purchase
#### When
This event will need to be triggered at checkout. **It must be activated only once after completing the purchase**. If the user refreshes or enters this url again, the event should not fire again.

#### Old event
We currently have the following event implemented in the purchase interaction:
```
dataLayer.push({event: "purchase", ecommerce: {items: ["rjM1-hfj1Rq6G6CeFfq8mA", 1600]}, gtm.uniqueEventId: 29})
```
This event should be replaced by the new event.
#### New event
```
dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "T12345",
value: 2000,
currency: "EUR",
items: [{
item_id: '602', // The ID of the item. *One of item_id or item_name is required.
item_name: 'Comfort 1 Bedroom Apartment', // The name of the item. *One of item_id or item_name is required.
price: 100 // The monetary price of the item per night, in units of the specified currency parameter.
quantity: 20 // Number of days of the reservation
currency: 'EUR', // The currency, in 3-letter ISO 4217 format.
}]
}
});
```