Marketing

Google Merchant Center for an Indian store: getting products approved and keeping them approved

Merchant Center disapprovals name a feed field, but the cause is usually on the landing page. What each check compares, why GST-inclusive pricing and INR trip Indian stores, which image and identifier mistakes fail on the first crawl, and how to build the feed from the catalog export you already have.

By Rehan Idrisi · · 7 min read

Part of: SEO for Ecommerce, Marketing

Merchant Center approves an item by comparing three things: the feed you sent, the landing page it crawls, and its own policies. When an item is disapproved, the diagnostic names a field. The field is rarely where the problem lives. A price mismatch is a landing page problem. A GTIN mismatch is a supplier data problem. A missing shipping cost is an account settings problem that disapproves every item at once.

We have set up feeds for Indian stores on Shopify, on WooCommerce and on custom catalogs, and the same short list of causes comes up each time. Here they are in the order they tend to fail, then how to build the feed from an export so the fixes stay fixed.

A GTIN is checked against GS1, then against your brand

The gtin field accepts 8, 12, 13 or 14 digits with a valid check digit. Google verifies the check digit first, so one mistyped digit is a straight rejection. It then looks at the prefix. Ranges reserved for in-store use and coupons cannot identify a product globally and are refused. Finally it compares the brand you sent against the company GS1 registered for that prefix. Your supplier's barcode, submitted with your own store name as the brand, comes back as a mismatch.

Products with no GTIN are fine if you say so. Set identifier_exists to no and supply brand and mpn where they exist. Inventing a number, or copying one from a similar product, is worse than sending nothing. Google groups listings by GTIN, and a borrowed code puts your product against somebody else's product page.

Indian catalogs often arrive with the barcode column holding whatever was scanned at inward: a 13-digit EAN on one row, a 12-digit UPC on the next, an internal code on the third, a leading zero dropped by a spreadsheet on the fourth. Normalise the column before it reaches the feed. The GTIN Converter validates check digits, rewrites a whole catalog into one format in bulk, and shows which rows are not barcodes at all.

The landing page price must match the feed, and in India that means GST-inclusive

For India, Google requires the price attribute to include GST. That is the opposite of the rule for the US and Canada, and it catches teams who copied a feed template built for a US client. Merchant Center then reads the price off your landing page, using schema.org structured data where it finds it, and disapproves the item when the two disagree.

The disagreement happens in predictable ways. A store with trade customers shows the ex-GST price and adds tax at checkout. A theme with a currency switcher serves the crawler dollars. A sale is live on the page while the feed still carries the MRP. An app generated structured data that rounds differently from the theme. Each is fixed on the page: show one tax-inclusive INR price, keep the structured data equal to the visible text, and send the MRP as price with the selling price as sale_price.

Currency goes in as the ISO code. INR, never the rupee symbol and never Rs. A spreadsheet that formatted the price column as currency fails every row.

id,title,price,sale_price,availability,gtin,brand,condition,link,image_link,item_group_id
SHRT-0042-NVY-M,Brandname Cotton Shirt Navy M,1499.00 INR,1199.00 INR,in_stock,8901234567895,Brandname,new,https://example.in/products/cotton-shirt?variant=42,https://example.in/cdn/shirt-navy.jpg,SHRT-0042

Where the source data holds ex-GST prices and a slab per product, compute the inclusive figure once, in the export pipeline, never by hand in the feed. The GST Calculator adds any standard slab to a base price and shows the CGST/SGST or IGST split.

Images with text, badges or watermarks fail on the first crawl

The image_link must show the product itself. No promotional overlay, no watermark, no logo across a corner, no free-shipping ribbon, no placeholder while the real photo is pending. Catalog teams add a bestseller badge for the store's own theme, and the same file ends up in the feed. Google's minimums are 100 by 100 pixels for most categories and 250 by 250 for apparel, with 800 by 800 recommended.

Keep a clean primary image per variant, and put the badges on the page around it instead of inside it. The Marketplace Image Checker reports dimensions, aspect ratio, file size and format for a batch of images against each channel's rules before upload.

Availability must agree with the page at the moment of the crawl

The availability attribute takes in_stock, out_of_stock, preorder or backorder. Google crawls the page and compares. A feed that refreshes nightly while stock changes hourly will show in_stock for an item whose page says sold out, and the item gets disapproved for the mismatch. Derive availability from the same stock source the page reads, and refresh the feed at the same cadence stock changes.

Pincode serviceability is the Indian version of this trap. A page that hides the add-to-cart button until a pincode is entered shows the crawler nothing it can read as available, because the crawler has no pincode. Render a default purchasable state and let the pincode check refine delivery time, not existence.

Shipping and returns are account settings, and missing ones disapprove everything

Merchant Center wants a shipping cost and a delivery time for India, set at account level or per item through the shipping attribute, and a returns policy it can point buyers to. Leave either unset and the diagnostics page fills with items that are otherwise perfect. Weight-based or pincode-based courier charges become a rate table, and a free-shipping threshold is a rate table with a zero row. Checkout may charge less than the feed says, never more. A COD handling charge is not a shipping cost, and a returns page that excludes COD orders has to match what the policy setting says.

Fix the landing page first. Every check compares the feed against the page, so a feed edit that the page contradicts is re-disapproved on the next crawl, and repeated failed reviews escalate to account-level warnings.

Build the feed from the export you already have

  1. Export the catalog from the store, one row per variant. Shopify's product CSV and WooCommerce's product export both do this.
  2. Map columns to Merchant Center attributes: variant SKU to id, barcode to gtin, vendor to brand, the variant URL (with its variant parameter) to link, the variant image to image_link, and the parent handle to item_group_id.
  3. Append INR to the price columns and confirm they are tax-inclusive. Put the MRP in price and the selling price in sale_price.
  4. Validate the file before it goes anywhere near Google. The Product CSV Validator flags duplicate SKUs, invalid barcodes, missing images and malformed prices in the export itself.
  5. Host the file at a URL and set Merchant Center to fetch it on a schedule. A one-off upload goes stale the day stock moves.
  6. Read the diagnostics after the first crawl, group the issues by cause, and fix each cause on the page or in the export pipeline.

Resubmit after the page is fixed, not before

A re-review request checks the live page. Requesting one while the fix sits in a staging theme or a queued deployment burns the request and adds a failed review to the account's history. Deploy, open the landing page as a logged-out visitor, confirm price and availability match the feed, and only then ask. Keep a short log of what was disapproved and what changed, because the next disapproval will look identical and the log tells you whether the same cause has come back.

Why are my products disapproved in Google Merchant Center?

Usually because the landing page disagrees with the feed. The page shows an ex-GST or non-INR price, says sold out while the feed says in stock, or carries a GTIN that belongs to another brand. Images with overlays and missing shipping or returns settings are the other common causes. Fix the page or the account setting, then request review.

Share this guideLinkedInXWhatsAppFacebook
All guides