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.
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.
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-0042Where 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.
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.
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.
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.
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.
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.
Convert product codes between GTIN-8, GTIN-12 (UPC-A), GTIN-13 (EAN-13) and GTIN-14, validate check digits, and normalise a whole catalog in bulk.
Check product images against each marketplace's dimension, aspect ratio, file size and format rules before you upload them.
Check a product CSV for missing columns, broken variant handles, duplicate SKUs, invalid barcodes and bad prices before you import it.
Add or remove GST at any standard slab rate, split into CGST/SGST for intra-state supply or IGST for inter-state supply.