Due to redirect delays from the payment provider, many users never go back to the shop after payment, so I really need to fill in the blanks with webhook data.
I have some trouble converting the payload claimed by the Data Client into a format that will be properly digested by GA4.
Which tag would you recommend for that purpose? Any tips?
You can do it directly, or you can use sGTM and send events first to sGTM and then from there to GA4 and other platforms. But this makes sense if you want to send it to other platforms as well.
Note that in order for this to work correctly you must have session cookies and user id cookie of the user who made the purchase available in the webhook.
I usually create a custom template to map one event data format to another.
For example I used this function in custom template to map ga4 items to Klaviyo event properties:
const itemsInput = data.itemsArray; // Ensure 'itemsArray' is defined as the input in your template configuration
const klaviyoItems = itemsInput.map(item => {
// Build an array of categories, filtering out undefined or null values
const categories = [];
if (item.item_category) categories.push(item.item_category);
if (item.item_category2) categories.push(item.item_category2);
if (item.item_category3) categories.push(item.item_category3);
if (item.item_category4) categories.push(item.item_category4);
if (item.item_category5) categories.push(item.item_category5);
return {
ProductID: item.item_id,
SKU: item.item_id,
ProductName: item.item_name,
Quantity: item.quantity || 1,
ItemPrice: item.price,
RowTotal: item.quantity ? item.quantity * item.price : item.price,
ProductURL: item.url || '', // Assuming URLs can be directly taken from the item data
ImageURL: '', // If image URLs are available, they should be handled similarly
Categories: categories,
Brand: item.item_brand
};
});
return klaviyoItems;
You can create a similar template in server GTM using your webhook event data and transforming it into items array.