top of page
Search
Writer's pictureAlfred Simon

Google Shopping Zombie SKU's - Step-by-step guide

Updated: Jun 23, 2023

Google's algorithm is super smart, and when used correctly, it delivers outstanding results.


We all know that, and we use it every day.


Since its launch, Shopping, Smart Shopping, and now Performance Max campaigns have been the focus campaign for eCommerce.


However, like every "perfect" system, it has some more minor and more prominent flaws. But, that is a discussion for another time.


Now let me help you solve one of the flaws.



No time for reading it? Watch the video tutorial!



 

Table of contents

 

Let's wake up your Zombie products.


All these highly sophisticated systems are tuned for performance. That's what Google wants us to believe.


Anyway, let's say we believe them.


The algorithm will test all your products from the feed, and when it finds the products with the best price and chance to sell, it will push them.


When I say it will push them, they will become the cash cows. Google wants to deliver a good performance, and as soon as it founds the "saint grails" in your feed, the algorithm will focus on those products.


Google Shopping algorithm

But you might ask: What happens to the rest of the products?


Well, that's an excellent question, and in this guide, I will explain that.


Often these products get forgotten and barely get any attention. The below-presented solution will create an automatic rotation in your system to give your products a new chance to shine.


An automated system to create a healthy rotation in your feed


The script and guide below will help you to export all your "zombie products" from your Google Ads account.


The script will check your products on a time frame set by you (let's say the last 30 days) and export all the products based on the criteria you set up (exp: impression < 10). These products' IDs will be exported to a Google Spreadsheet, which you can use as a Supplemental feed in your Google Merchant Center account.


Combine the supplemental feed with your main product feed, assign the sleeper SKUs to a custom_label, and voila, you have all your zombie products under a label.


After that, it's up to you how you want to use them.


Let's see how you have to set this up.


Step 1. Add the script to your Google Ads account


Firstly, you must add the script below to your Google Ads account.


The script:

// Copy the link of the new sheet and paste it below -
var SPREADSHEET_URL = "Paste your Google Spreadsheet link here";

// Enter your filters below, for multiple filters use AND clause. E.g. Impressions > 100 AND
// Currently default filter is Clicks < 1 i.e. Zero Clicks

var FILTERS = "Impressions < 10";

// Enter time duration below. Possibilities:
// TODAY | YESTERDAY | LAST_7_DAYS | LAST_WEEK | LAST_BUSINESS_WEEK |
// LAST_14_DAYS | LAST_30_DAYS | THIS_WEEK_SUN_TODAY |
// Currently default time duration is set to: LAST_30_DAYS
var TIME_DURATION = "LAST_30_DAYS";
var COUNT_LIMIT = 999999;

function main(){
  
  var products = getFilteredShoppingProducts();
  products.sort(function(a,b){return a[0] > b[0];});
  products = products.slice(0, COUNT_LIMIT);
  pushToSpreadsheet(products);
  
}

function getFilteredShoppingProducts(){
  var query = "SELECT OfferId FROM SHOPPING_PERFORMANCE_REPORT WHERE " + FILTERS + " DURING "+ TIME_DURATION;
  
  var products = [];
  var count = 0;
  var report = AdWordsApp.report(query);
  var rows = report.rows();
  while (rows.hasNext()){
    var row = rows.next();
    var offer_id = row['OfferId'].toString();
    products.push([offer_id]);
    count+= 1;
  }
  Logger.log(count);
  return products;
}

function pushToSpreadsheet(data){
var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var sheet = spreadsheet.getSheetByName('Custom_Label');
var lastRow = sheet.getMaxRows();
sheet.getRange('A2:A'+lastRow).clearContent();
var start_row=2;
var endRow=start_row+data.length-1;
var range = sheet.getRange('A'+start_row+':'+'A'+endRow);
if (data.length>0){range.setValues(data);}
return;
}

Go to Tools & Settings and under the Bulk Actions > Scripts.


Add a Google Ads script

Click on the "+" sign to add a new script.


Add a custom Google Ads Script

Copy the script from above to this editor.


Step 1.1. Create the Spreadsheet


To use the script, you will need a Google Spreadsheet. Just create an empty spreadsheet, and name it how you'd like it. I called my "Zombie SKU."


Important steps


On the A1 cell, enter: "Id"


Google Shopping Zombie SKU Spreadsheet

After that, change the sheet's name from "Sheet1" to "Custom_Label."


Setup supplemental feed spreadsheet

The final step is to copy the link to the spreadsheet.

Make sure that you select the option:


Anyone with the link is set to Editor.


Share Supplemental Spreadsheet

Step 1.2. Edit the script


Now that the spreadsheet is ready and you've got the link to it, it's time to edit the script itself.


Where it says, "Paste your Google Spreadsheet link here" paste the link there.


Edit the zombie SKU script

Edit the Google Ads zombie SKU script

Edit the date range and criteria to your preference.


I chose " Last 30 days" and "Impressions < 10". This criterion will export all the product IDs from the last 30 days with less than 10 impressions.


Set the criteria in the Google Ads Zombie SKU script

The rest of the script should be unchanged. Now it's time to run a preview and test it. Click on the Preview.


Note: Google might ask for some permissions to run a script. You have to accept these to be able to use the script.


Give Google permission to edit the script

Check the Logs tab to see if any products are found for this criteria.


Check script logs

If you did everything well, you should have some product IDs in your spreadsheet. If that's the case, save the changes and add a schedule to the script so it runs daily.


Product ID's in the Spreadsheet

This setup will automate the process and give a healthy rotation to your shopping feed.


Step 2. Create the supplemental feed


Since we have all the zombie product IDs in the spreadsheet is time to create the supplemental feed to start using these products.


Go to your Google Merchant Center Account. Then, under the Products tab, click on the Feeds and Add a supplemental feed.


Create a Google Merchant Center supplemental Feed

Add a feed name you'd like, select Google Spreadsheet, then click on Continue.


Create a Google Merchant Center supplemental Feed

Click on Select existing sheet, find and select the spreadsheet we created in the previous step.


Use Google Spreadsheet as GMC feed

Select your main product feed where you want to use the previously created supplemental feed, then click on Create feed.


combine GMC supplemental feed with main product feed

Fetch the data from the newly added supplemental feed.


Fetch data GMC

Step 2.1 Combine the supplemental feed with your main product feed.


After we have imported all the zombie SKUs from the sheet to the Google Merchant Center account, you can combine it with your main product feed.


Under the Products tab, select Feeds, then click on your main feed.


Add supplemental feed to main product feed

Click on Feed rules, then click on the blue "+" sign to add a new rule to the feed. Next, select one of your empty custom_labels.

Add GMC feed rule

Select cusomt_label for feed rule

After that, create the following ruling, see below:


Create custom feed rule

With this rule, you say if the Id in the Zombie SKU sheet has a value, set the label to “No Impressions Last 30 Days” if the ID has no value in the sheet, set the label to “Recording Impressions.” If all is set, click on Save as draft.


Apply the changes to the feed.


Apply GMC rule to the feed

Go to the Processing tab and click on the Re-process feed to have the new labels assigned to the products.


Re-process GMC product feed

Test and see if you get the correct labels attached to your products.


Check labels

Step 3. Create a new campaign


You've labeled all your zombie products, so it's time to wake them up.

The final step is to create a campaign and use this feed. The campaign aims to give a chance to the "sleeper SKUs."


When you create this campaign, use a lower ROAS target; the campaign won't have much volume, and its aim is not to generate much revenue. Instead, the focus here is to give a new chance to the products forgotten by the algorithm.


Google Shopping Zombie SKU structure

Performance Max or Regular Shopping campaign?


Now you probably have one final question.


Should you use this feed in a regular shopping campaign or run it instead through a Performance Max campaign?


Great question! It depends.


I would recommend running it as a regular shopping campaign and seeing how much volume it will generate. If it has a lot of traffic and a decent conversion volume, you can upgrade the campaign to PMax. You can use this campaign with the Margin Buckets Performance Max structure.


Most of the time, these campaigns don't have a ton of traffic, so I would stick to regular shopping campaigns.


Conclusion


Google's shopping algorithm focuses on performance. So as soon as it finds your cash cow products in your feed, it will focus solely on those products neglecting the rest.


But we want to give a chance for every product. So with this guide, you will have a campaign that will kickstart your sleeper shopping SKUs and get them back into the rotation.


Have a good one,


Alfred







11,013 views13 comments

Recent Posts

See All

13 Comments


Haresh Shahari
Haresh Shahari
Sep 21

Hi, when I try uploading this as a supplemental feed to Google Merchant Center (GMC), I receive an error. A Google rep informed me that the feed only contains item IDs, and more attributes are required for the feed to be processed.

Does anyone have experience with this or know how to format the feed correctly to avoid errors?

Like

Dan Perach
Dan Perach
Jan 31

By the way, I created the shopping ids report from the GMC reporting area, because that is the only way to get the aggregrate report across multiple child accounts, which is my case. the filtering feature for impressions is not active, so i first download the csv file, import to gsheets, then remove the ids with imp less than 10, as the source for the merge file.

Edited
Like

Dan Perach
Dan Perach
Jan 30

Hi Alfred,

If a zombie sku that had less than 10 impressions wakes up, then it will stop showing in the zombie campaign, ok. From your experience, will this alive sku then start serving in your non zombie campaign? i created the report in gmc reports section, which btw does not allow for filtering by impresisons. I have multiple standard shopping accounts in my MCC structure. Do you have MCC script version by any chance?

Edited
Like
Dan Perach
Dan Perach
Jan 31
Replying to

Hi Alfred,


The only purpose really for Zombie campaigns is to "wake up the zombies", correct?

So really no need for smart bidding or a big setup, is this the correct thinking?

Like

Allie Dazeley
Allie Dazeley
Nov 26, 2023

Hi Alfred, love your article. I have an issue however in that there are zombie skus but when I run the filter, which looks exactly like yours in both the video and transcript the zombie skus do not show with any custom label?

Like
Alfred Simon
Alfred Simon
Dec 03, 2023
Replying to

Hi Allie, Do you use by any chance upper case letters in your IDs? That can cause some issues. Otherwise feel free to send more info using the contact form.

Like

Alessandro Lorizzo
Alessandro Lorizzo
Nov 20, 2023

Hi Alfred very interesting script. In my business I would like to change the filtering option based on single sku spending. So I think I hate to change this row var FILTERS = "Impressions < 10";

with var FILTERS = "Cost < 5"; Is the string correct? Is it correct the name of the variable (I'm not a dev)? I would like to target products that are not spending adequately and that are cannibalized by others. Thanks


Like
bottom of page