Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

The 1st edition of the Target Community Lens newsletter is out now! Click to the right to find all the latest updates

Tracking Failed Actions to Google Analytics


Level 4

I'm trying to find some documentation to see if there is code that I can execute when a failed action occurs. I'd love to be able to send information to the dataLayer so I can start tracking these at scale. I can certainly observe those failed actions that happen in my own testing, but I don't believe there is a way to report on these in Adobe Target. I don't have Adobe Analytics; is there a current method to report on these failed actions events in Analytics for Target? 


Topics help categorize Community content and increase your ability to discover relevant content.

0 Replies


Level 5

Can you please clarify what do you mean by "failed action"?
Is no campaign qualification consider as fail action? or more about server/connectivity errors?


Level 4

A failed action is a partially failed application of the experience onto the page (Mbox). You can see an example of what that looks like in the post here


For example, I have an experience that replaces a good majority of the content on a specific page. I have a script like the following to check for and send associated activity information to the dataLayer, but that only checks if the Adobe Target request succeeded and what it got back. It doesn't tell me that the experience was successfully applied to the page. 


You can see what successful actions look like by debugging a working activity on a page that you know the activity is targeted to by appending the following query string parameter. 



That will send rendering events to the console --make sure you have verbose logging enabled if you are using Chrome--about the rendering of the activity(ies) on the page. You'll see messages like the following in the console. 



AT: Rendering action 
{action: 'appendContent', content: '<style id="adobeTargetExperienceStyles">...}
action: "appendContent"
content: "<style id=\"adobeTargetExperienceStyles\">\n    /
id: "54c8bbc7b4f641c6b0080d4fxxx"
selector: "head"
[[Prototype]]: Object



AT: Action rendered successfully 
{action: 'appendContent', content: '<style id="adobeTargetExperienceStyles">...}
action: "setContent"
content: "<style id=\"adobeTargetExperienceStyles\">\n    /
id: "54c8bbc7b4f641c6b0080dxxx"
selector: "head"
[[Prototype]]: Object



But here is what I'm looking for. Sometimes those rendering actions fail and the experience either fails completely or partially applies (in the example that you have CSS targeting global classes in the offer). It could be due to me trying to call a method that isn't supported by the browser or something else. What I'd like to understand is how often that fails and for which devices so I can debug on those devices to get any unknown issues resolved. So my goal here is to send those rendering debugging events (or just the failed action events) to the dataLayer so I can start tracking the application of the experiences in Google Analytics. 




Example Code in Adobe Launch to Send Activity Information to the Datalayer


document.addEventListener(, function (e) {
    var tokens = e.detail.responseTokens;

    if (isEmpty(tokens)) {
        console.log("No active Adobe Target activity.");
    } else {
        var uniqueTokens = distinct(tokens);
        uniqueTokens.forEach(function (token) {
                'event': 'adobeTargetMetaData',
                'CampaignName': token[""],
                'CampaignId': token[""],
                'RecipeName': token[""],
                'RecipeId': token[""],
                'OfferId': token[""],
                'OfferName': token[""],
                'MboxName': e.detail.mbox

    function isEmpty(val) {
        return (val === undefined || val == null || val.length <= 0) ? true : false;

    function key(obj) {
        return Object.keys(obj)
            .map(function (k) {
                return k + "" + obj[k];

    function distinct(arr) {
        var result = arr.reduce(function (acc, e) {
            acc[key(e)] = e;
            return acc;
        }, {});

        return Object.keys(result)
            .map(function (k) {
                return result[k];