Budget Eater Script

Script to evaluate your long tail and identify non-converters

Budget Eater Script illustration

Ready to learn more about your long tail and non-converters?

The “Budget Eater” script assesses your long tail and identifies non-converters (last 30 days). Just add the script to your Google Ads account to get results. The code won’t change anything in your Google Ads campaigns: it just analyzes your existing data and provides you with an automatic evaluation of costs and conversions.

You can find a detailed description and learn how to use this script in our blog: Google Shopping and the Long Tail

Download script and start optimizing

No commitments & no hidden costs — Just a great script

Access and read our
privacy policy.

Success image

Thank you!

You can get the script code below

Arrow down icon
/**
 * Budget Eater Script         . * ・ 。゚☆━੧[ ✪ ᗜ ✪ ]⊃
 *
 * Overview: You can use this script to evaluate your Long Tail and your
 * non-converters from the last 30 days. The script will give you an impression
 * of the correlations between costs, conversions, and the Long Tail within
 * your account.
 *
 * Author: smec Team [smarter-ecommerce.com]
 *
 * Version: 1.0
 * Changelog:
 * - version 1.0
 *  - Released initial version.
 * Updated: 27-04-2018
 *
 * Twitter: @smec
 * Email: [email protected]
 * (c) Smarter Ecommerce GmbH. All rights reserved.
 * License: MIT
 */

/* ============================== Preferences =============================== */

// Sets the number of conversions threshold for evaluating the Long Tail.
var LONG_TAIL_CONVERSIONS_THRESHOLD = 3;

var TIME_RANGE = "LAST_30_DAYS";

/* =============================== Execution ================================ */

function main() {
  // Select cost and conversions for all products during the last 30 days.
  var report = AdWordsApp.report(
      "SELECT OfferId, Cost, Conversions, ConversionValue, Impressions " +
      "FROM SHOPPING_PERFORMANCE_REPORT " +
      "DURING "+ TIME_RANGE);

  var result = {
      nonConverters: { count: 0, cost: 0 },
      longtail: { count: 0, cost: 0, conversions: 0, conversionValue: 0 },
      converters: { count: 0, cost: 0, conversions: 0, conversionValue: 0 }
  };

  // Iterate through all rows and categorize each product by the number of its conversions.
  var rows = report.rows();

  while (rows.hasNext()) {
    var row = rows.next();
    var conversions = parseFloat(row['Conversions'], 10);
    var cost = parseFloat(row['Cost'], 10);
    var conversionValue = parseFloat(row['ConversionValue'], 10);

    if (conversions < 1) {
        result.nonConverters.count += 1;
        result.nonConverters.cost += cost;
    } else if (conversions < LONG_TAIL_CONVERSIONS_THRESHOLD) {
        result.longtail.count += 1;
        result.longtail.conversions += conversions;
        result.longtail.cost += cost;
        result.longtail.conversionValue += conversionValue;
    } else {
        result.converters.count += 1;
        result.converters.cost += cost;
        result.converters.conversions += conversions;
        result.converters.conversionValue += conversionValue;
    }
  }

  var totalCost = result.nonConverters.cost + result.longtail.cost + result.converters.cost;
  var totalConversions = result.longtail.conversions + result.converters.conversions;
  var totalConversionValue = result.longtail.conversionValue + result.converters.conversionValue;

  // In this part, the calculated result numbers are printed:
  Logger.log("Shopping Ads (last 30 days)");
  Logger.log("---------------------------\n");
  Logger.log("Number of products without conversions: " + result.nonConverters.count);
  Logger.log("Number of products in Long Tail: " + result.longtail.count);
  Logger.log("Number of products having at least 3 conversions: " + result.converters.count + "\n");
  Logger.log("Total cost: " + round(totalCost));
  Logger.log("Cost for Non-Converters: " + round(result.nonConverters.cost) +
      " (" + round(percentage(result.nonConverters.cost, totalCost)) + "% from total cost)\n");
  Logger.log("Total conversion value: " + round(totalConversionValue));
  Logger.log("ROAS for Long Tail: " + round(result.longtail.conversionValue / result.longtail.cost) + "\n");
  Logger.log("Total conversions: " + round(totalConversions));
  Logger.log("Conversions from Long Tail: " + round(result.longtail.conversions) +
      " (" + round(percentage(result.longtail.conversions, totalConversions)) + "% from total conversions)");
}

/**
 * A helper function which rounds the given number to 2 decimals.
 */
function round(number) {
  return Math.round(number * 100) / 100;
}

/**
 * A helper function which returns the percentage of a value for the given total value.
 */
function percentage(value, total) {
  return value / total * 100;
}

The code was successfully copied to your Clipboard.

Popular Google Ads Scripts

Martin Röttgerding

“Automation can take your PPC efforts to the next level – if you’re doing it right.”

Martin Röttgerding, Head of SEA – Bloofusion Germany

Maximize your Google Shopping performance with Whoop!

Get in touch to learn more

Logo of Great Day for PPC Automation by smec
smec Headquarters at Tabakfabrik, Linz
Join industry leaders as they share new developments in paid search automation
Watch Livestream