Product Disapproval Alert Script

Are you currently overseeing your product management through Google Merchant Center (GMC)? At Acuto, we recognise the intricate challenges that come with keeping everything in check, especially when dealing with advertisements. But worry not, as we have the perfect solution: introducing the Product Disapproval Alert Script.

This free tool is designed to provide you with swift notifications whenever any of your GMC products face disapproval. Bid farewell to unexpected surprises and the unnecessary drain on resources!

Throughout this article, we will delve into the mechanics of this script, highlighting why it stands as a transformative asset for your GMC strategy and pinpointing the scenarios where its utilisation proves most advantageous. Let’s dive in.

Product Disapproval Alert Script:

// *** add relevant values inside the quotation marks below ***

// create new google sheet and paste the id inside the quotation marks
const SPREADSHEET_ID = "";

// Enclose email(s) in quotation marks. If necessary, add multiple emails separated by comma.
const EMAILS = "[email protected], [email protected]";

// add a list of any product IDs you always want to check for (in the same format as above)
const KEY_PRODUCTS = ["example1", "example2"];

// set time period to check recent active product performance

// set minimum click threshold (over the TIME_PERIOD) for products to be included in disapproval search
const MIN_CLICKS = 5;

// insert Google Merchant Center Account ID linked to shopping campaigns
const GMC_ACCOUNT_ID = "";

//insert ID of Google Ads Account housing shopping campaigns
const ADS_ACCOUNT_NAME = "";

// do not edit
  "Product ID",
  "Product Title",
  "Product Link",
  "Disapproval Reason",
  "Suggested Fix",
  "Docs Link",

function main() {
  const productsToCheck = getProductsList();
  const disapprovedList = getDisapprovalsList(productsToCheck, GMC_ACCOUNT_ID);
  console.log("Total product disapprovals: ", disapprovedList.length);
  if (!!disapprovedList.length) createReport(disapprovedList);

function prepSheet() {
  const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getActiveSheet();
  sheet.clear({ formatOnly: false, contentsOnly: true });
  const range = sheet.getRange(1, 1, 1, SHEET_COL_HEADERS.length);

function getProductsList() {
  // add custom key products to an array, with no performance metrics
  // (unable to filter by individual IDs in GAQL)
  const products = => ({
    id: keyProd,
    title: "",
    clicks: 0,

    console.log("no account details provided - skipping query.");
  } else {
    const recentActiveProducts =
      `SELECT segments.product_item_id, segments.product_title, metrics.clicks 
       FROM shopping_performance_view 
       WHERE metrics.clicks >= ${MIN_CLICKS} AND DURING ${TIME_PERIOD}`

    if (!recentActiveProducts?.rows) {
      console.log("no query results");
    } else {
      recentActiveProducts.forEach((recentProd) => {
          id: recentProd.segments.productItemId,
          name: recentProd.segments.productTitle,
          clicks: recentProd.metrics.clicks,
  console.log("product count: ", products.length);
  return products;

function getDisapprovalsList(productsList, gmcId) {
  let pageToken;
  const maxResults = 250;

  const disapprovedProducts = [];

  do {
    const productStatuses = ShoppingContent.Productstatuses.list(gmcId, {
      pageToken: pageToken,
      maxResults: maxResults,

    if (productStatuses.resources) {
      for (let i = 0; i < productStatuses.resources.length; i++) {
        const product = productStatuses.resources[i];
        const productId = product.productId.split(":").pop();

        if (productsList[productId] != null) {
          for (j = 0; j < product["destinationStatuses"].length; j++) {
            if (
              product["destinationStatuses"][j]["destination"] == "Shopping"
            ) {
              if (
                product["destinationStatuses"][j]["status"] == "disapproved"
              ) {
                let reason;
                let solution;
                let documentation;
                if (product["itemLevelIssues"] == undefined) {
                  reason = "Disapproval reason unknown";
                } else {
                  reason = product["itemLevelIssues"][0].description;
                  solution = product["itemLevelIssues"][0].detail;
                  documentation = product["itemLevelIssues"][0].documentation;
                  "- the product is disapproved, productId : " +
                    productId +
                    " reason: " +

    } else {
      console.log("No more products in account ", gmcId);
    pageToken = productStatuses.nextPageToken;
  } while (pageToken);

  console.log("disapproved product count: ", disapprovedProducts.length);
  return disapprovedProducts;

function createReport(results) {
  const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getActiveSheet();
  const lastRow = sheet.getLastRow();

  const range = sheet.getRange(
    lastRow + 1,
  range.sort([{ column: 4, ascending: false }]);

  const emailBody =
    "Number of Disapproved products: " +
    results.length +
    "\n" +
    "See details: " +


    to: EMAILS,
    subject: `[GOOGLE ADS ALERT] - ${results.length} Disapproved Products - ${ADS_ACCOUNT_NAME}`,
    htmlBody: emailBody,

What is the P​​roduct Disapproval Alert Script?:

The Product Disapproval Alert Script is an automation tool designed to keep a vigilant watch over your Google Merchant Center product listings. Its primary function is to promptly notify you when any of your products face disapproval.

This real-time alert system ensures you can take speedy action to rectify the issues causing disapprovals, safeguarding your advertising campaigns and sales performance.

The script also generates weekly product disapproval and warning reports, which provide valuable insights, allowing you to proactively and effectively manage your GMC account.

Why do Products Get Disapproved in Google Merchant Center? [H3]:

So why do products get disapproved of in the GMC? Let’s unpack:

Disapprovals can occur for a variety of reasons. Common factors include data inconsistencies between GMC and your website, policy changes set by Google, and product data that doesn’t follow Google’s guidelines. Understanding these reasons helps you address and prevent potential disapprovals effectively.

How Does the Product Disapproval Alert Script Work?

The Product Disapproval Alert Script operates as a kind of watchdog for your GMC product listings. It automatically scans all your listed products, whatever the volume, and monitors them against Google’s policies and guidelines.

Whenever the script detects a disapproved product, it instantly sends you an email alert, allowing you to take immediate action.

This automated monitoring system is particularly invaluable for agencies dealing with a substantial product inventory, as it eliminates the time-consuming manual oversight, saving your team time and effort on the menial, error-prone tasks so that you can focus on the good stuff!

Why Should You Use the Product Disapproval Alert Script?

The Product Disapproval Alert Script offers several benefits to merchants utilising GMC to showcase products and run ad campaigns.

Picture this scenario: you’re all set with your products listed, ads are running, and business is booming, but one of your products got disapproved on GMC, and you had no clue – that’s a waste of resources on ads for a redundant product.

The Product Disapproval Alert Script sends real-time alerts whenever GMC gives the rejects any of your products. No more sneaky disapprovals slipping through the cracks. With this script you can promptly address the issues, saving your ad budget and keeping your agency running at an optimum level.

Automating this process means 24/7 monitoring of your GMC listings. It’s the smart way to stay on top of your game, avoid costly blunders, and maximise the impact of your GMC strategy.

When to Use the Product Disapproval Alert Script

So when to use the Product Disapproval Alert Script? Here are some situations we thought of where this script proves indispensable:

  • High Volume of Products. For merchants with an extensive product inventory, manually monitoring each item becomes a mind numbing task. The script’s automated vigilance ensures no product slips through the cracks, guaranteeing compliance and preventing disapproval surprises.
  • Resource Optimisation. Advertisers invest significant resources in running ads for GMC products. If a product gets disapproved, ads for it become futile, resulting in wasted funds. The script’s real-time alerts safeguard against such inefficiencies.
  • Agency Management. Agencies handling multiple GMC accounts for diverse merchants find the script invaluable. It centralises monitoring, saving time and effort while maintaining product compliance for each client.
  • Proactive Approach. By using the script, merchants and agencies can proactively address disapprovals promptly. Timely corrections uphold GMC account health, ensuring uninterrupted ad campaigns and enhanced sales performance.

Custom Automation Scripts by Acuto

Here at Acuto our specialised services cater to agencies seeking a competitive edge in the dynamic digital marketing landscape. Imagine bidding farewell to repetitive, time-consuming tasks, and embracing the freedom to channel your efforts towards strategic endeavours.

Our team of experts crafts tailor-made automation scripts that effortlessly handle menial tasks, be it on Google Ads or any other platform. The result? A significant reduction in manual labour, liberating valuable time and resources. Say goodbye to the burden of mundane activities, and say hello to a streamlined workflow that supercharges your productivity.

With Acuto’s Custom Automation solutions at your service, you’ll witness the bottom-line benefits of time and cost savings. Our solutions empower your agency to allocate more time to devising result-driven strategies, strengthening client relationships, and scaling your business to new heights.

Sound appealing? Get in touch!

Key Takeaways

In summary, the Product Disapproval Alert Script is a valuable tool for GMC success and your wider campaign:

  • The Product Disapproval Alert Script alerts merchants when their products are disapproved on Google Merchant Center (GMC).
  • It prevents wasted resources on ads for non-compliant products and quickly fixes issues causing disapprovals, with weekly disapproval reports offering valuable insights into product listing health.
  • The script automates monitoring of all listed products and sends real-time alerts.
  • It is especially beneficial for high-volume merchants and agencies managing multiple GMC accounts.

Google Merchant Center Product Disapproval FAQ

#1. Why do products get disapproved of in Google Merchant Centre (GMC)?

Products may face disapproval due to data inconsistencies, policy changes, or non-compliance with Google’s guidelines. Maintaining accurate and up-to-date product information is crucial to avoid disapprovals.

#2. How do I appeal a disapproved product or ad?

To appeal a disapproval in GMC, log in to your account, locate the disapproved product, and follow the appeal process outlined by Google. Prompt action can restore your product to the GMC listings.

#3. What is preemptive item disapproval (PID) and when does it occur?

PID is a preventive measure implemented by Google’s algorithms to protect users and advertisers. It occurs when potential policy issues are detected with a product, leading to disapproval until the concerns are resolved.

#4. What is the difference between Google Merchant Center and Google Ads?

Google Merchant Center focuses on managing product listings, while Google Ads primarily deals with creating and managing advertising campaigns. Both platforms work together to optimise product promotions and sales.


Recent Posts
Recent Posts