← Free feed check

What the free feed check looks at

Every check, its weight in the score, what our feeds rewrite, what we suggest and what we leave to you. Rendered from the same tables the check runs, so this list is the check.

The free feed check reads your feed or your Shopify store’s public product list, runs 29 checks on every product it read (12 on every variant, for a store address), opens a sample of your images to measure them and a sample of your product pages to compare prices, and scores the result out of 100. It shows, before and after, 9 kinds of change a FeedRobin feed makes and 4 the check suggests you make (fewer of each for a store address).

What it reads

A Google-format XML feed (RSS or Atom shape), a Heureka or Compari XML feed, or a CSV/TSV export, by URL, up to 100 MB; larger files are cut at the last whole product and the report says so. A Shopify store address is also accepted: the check then reads up to 25,000 products of the store’s public product list, and the report says when the store has more. From that list it takes no barcodes, MPN, identifier_exists, Google product category or condition, and for stock only whether each variant is available. It gives every variant its product’s id as group id and one currency for the whole store, when the store states one, and does not look for repeated ids. These 17 checks are left out of the report on a store address:

In a feed file, rows without an id, title, link or price are dropped. Rows sharing an id with an earlier row are counted as duplicates and dropped too; the report gives that count. Google’s product data specification is the reference for what each field must contain, and our attribute reference explains each field in plain English.

The 20 checks that score

The weight is the deduction when every product is affected; a defect on a tenth of the catalogue costs a tenth of it. “File only” marks checks that mean something about a raw file and cannot occur in the catalogue we serve, because the pipeline drops or normalises those rows on the way in.

CheckWeightSeverityMerchant Center
Products with no image Google and Meta list an image as required. Add a product photo in your store.−25CriticalMissing value [image_link]
Products with an id that is already used by another item · file only Google asks for a unique id for each product, and Meta ignores every item whose id appears more than once. Give every variant its own id — we keep only the first of each and never serve a duplicate.−20CriticalReused value [id]
Products with no usable price Google reports a price of 0 as invalid. Check the price of these products in your store.−20CriticalMissing value [price]
Products with no valid barcode (GTIN) Google states that products with a missing or incorrect GTIN may have limited visibility. Add barcodes in your store. A feed built in the FeedRobin app leaves out a barcode from your store or feed file that has the wrong length or check digit, is a placeholder such as all zeros, or falls in Google’s restricted or coupon ranges when read as 13 digits; the ranges are checked on 12- and 13-digit barcodes and on 14-digit ones that start with 0.−18CriticalLimited performance due to missing identifiers [gtin]
Products with no description Google and Meta list description as required, and Meta asks that it differ from the title. Write a sentence or two in your store; we clean the formatting for each channel.−12CriticalMissing value [description]
Products with nothing to identify them by For products without a GTIN, Google asks for the brand and the manufacturer's part number (MPN) instead. These have no GTIN and are missing the brand, the MPN or both.−10WarningLimited performance due to missing value [brand]
Products with no brand Add the brand to each product in your store, and check that the feed sends it in the brand attribute. Google requires brand for each product with a clearly associated brand or manufacturer.−8WarningLimited performance due to missing value [brand]
Products with a title over 150 characters Google cuts the title at 150 characters. Put brand, product and the key attribute first.−6WarningTitle truncated
Products with promotional text in the title A title with prices, "SALE", "free shipping" or ALL CAPS does not meet Google’s title requirements, and Google disapproves products that don’t follow them. Move the offer out of the title.−6WarningAdditional or promotional info
Products with an image smaller than 500×500 · not scored in the free check From 31 January 2027 Google requires product images of at least 500×500 pixels and recommends around 1500×1500. Google states it will optimize some smaller images; those show a warning in Merchant Center. To replace an image, upload a larger photo to the product in your store.−10WarningImage too small
Products with an image on http:// Check whether the image host serves these images over https.−6WarningInvalid image [image_link]
Products with a variant with no group id These share a product page with other items and have no item_group_id. Google requires item_group_id for variants in Shopping ads targeting Brazil, France, Germany, Japan, the UK or the US, and for all variants in free listings.−5WarningMissing value [item_group_id]
Products with a different currency from the rest of the feed If you sell in several currencies, each needs its own feed — we build one per channel and country.−5WarningMissing value [price]
Products with a product link on http:// Check whether these product pages open over https.−4WarningUnavailable desktop landing page
Products with a description under 50 characters Add a longer description to these products in your store.−4WarningMissing value [description]
Products with an id over 50 characters Google and Microsoft allow up to 50 characters in id. Use a shorter id that never changes, such as the variant id or the SKU. FeedRobin’s Google, Microsoft and Custom XML feeds do not cut the id to 50 characters.−4WarningProduct ID too long
Products with no availability · file only Google lists availability as required for all products, Meta and TikTok as required for each product, and OpenAI rejects a row without it. Add in_stock, out_of_stock, preorder or backorder to these products in your export. A feed FeedRobin builds from this file sends them as in stock. A file in Heureka's or Compari's format gives a delivery time instead (DELIVERY_DATE, DeliveryTime), which this check does not read as availability. DeliveryTime NO, Compari's value for a product that cannot be ordered, is read as out of stock and not counted here.−14CriticalMissing value [availability]
Products with an availability value no channel recognises · file only Google lists in_stock, out_of_stock, preorder and backorder; Meta lists in stock and out of stock. A translated word, a yes/no or a typo is not one of these values. A feed FeedRobin builds from this file translates the stock words, yes/no values and stock quantities it knows, and treats any other value as out of stock.−14CriticalInvalid value [availability]
Products with identifier_exists set to false and a GTIN · file only These products send a GTIN with a valid check digit and set identifier_exists to false. Google's identifier_exists page says that products with identifier_exists incorrectly set to false, where there is evidence that a product identifier exists, “will receive a warning.” Remove identifier_exists from these products, or set it to true.−5WarningIncorrect value [identifier_exists]
Products that are out of stock They are marked out of stock in the feed. Meta does not show out-of-stock products in ads. No action needed.−7Informational—

The 10 checks that are reported but never scored

These cost nothing in the score.

Products that have a price with three digits after its only separator The other values in the price and sale price fields of this file do not settle whether the separator in these is the decimal or the thousands one, so these are read as decimals: a feed FeedRobin builds from this file sends 1.249 as 1.25. Google rounds past two digits after the decimal point, and Heureka.sk does not allow the dot as a thousands separator. If 1.249 means 1249, write all of them with no thousands separator, such as 1249.00.Warning—
Products that have a price read with its separator as thousands These have three digits after a dot or comma, such as 1.234, and other prices in the same file show that separator is not the decimal one (1.234,56 or 89,90). So 1.234 is read as 1234.00.Informational—
Products that have no recognised size or no recognised colour, and look like clothing For apparel in Shopping ads targeting Brazil, France, Germany, Japan, the UK or the US, and for all apparel in free listings, Google requires colour and, for clothing and shoes, size. If these products are not apparel, this does not apply: it doesn't count against the score either way.WarningMissing value [color] / [size] / [gender] / [age_group]
Products with “used” or “refurbished” in the title but condition new With automatic item updates off, Google disapproves a product whose condition disagrees with its other attributes. Set condition to used or refurbished on these. If they are new, ignore this: it doesn't count against the score.WarningCondition mismatch detected: condition [condition]
Products with no condition, or one other than new, used or refurbished Meta and TikTok list condition as required for each product, with the values new, refurbished and used; Google requires it for used and refurbished products. Add one of the three to these products in your export. A feed FeedRobin builds from this file sends them as new; the Heureka, Compari and idealo feeds carry no condition. It doesn't count against the score.Warning—
Products with the spaced "in stock" spelling Meta lists the spaced form. Google's current spec lists in_stock with an underscore.WarningInvalid value [availability]
Products with preorder or backorder availability and no availability_date Google's availability page requires availability_date for products set to preorder or backorder, and the expected shipping date on the product page. Add availability_date to these products in your export, in the form YYYY-MM-DDThh:mm±hhmm, or in Google Merchant Center with a supplemental data source (Advanced data source management add-on). It doesn't count against the score.Warning—
Products with no Google product category Without it, Google assigns a category itself. Pick the closest value from Google's product taxonomy and set it in your export. Or map your own categories to Google's once, on the Categories page, and every product in them gets it. A feed is valid without it, so this doesn't count against the score.WarningInvalid value [google_product_category]
Products with a category that is not in Google's taxonomy Google accepts only the numeric id or the full path from the root. Anything else is reported as “Invalid value (Google product category)”; Google assigns a category itself. No effect on the score.WarningInvalid value [google_product_category]
Products with identifier_exists set to false These products send no GTIN and set identifier_exists to false. Google lists custom and handmade goods, vintage products, antiques and books published before 1970 among products that might not have unique product identifiers. It does not count against the score.InformationalIncorrect value [identifier_exists]

Beyond the file: images and product pages

Two things a feed cannot tell you, so the check goes and looks. It downloads the first few kilobytes of up to 20 images spread across the feed and reads their pixel size from the file header, because Google requires at least 500×500 from 31 January 2027; see Google’s image_link specification. And it opens up to 8 product pages, reads the price from their structured data or visible markup, and compares it with the feed’s, because the price specification asks that the landing page price matches the price in the product data; see the price mismatch guide. Both are samples, and the report says how many it looked at. Neither number is extrapolated into a total.

What the feeds rewrite, and what the check suggests

The report shows up to two examples of each change, before and after, taken from your own rows. Nothing here invents data: every value shown is made from one that is already in the feed. A FeedRobin feed makes these:

These the check suggests. A FeedRobin feed does not make them:

What stays a person’s job, and why

The check reports these and does not rewrite them. The reason is given for each.

The same checks, one value at a time

Three of the checks are also available as small tools that run in your browser, for a single value: the GTIN check digit validator, the title length and policy checker and the availability value translator.

What it does not check

Anything Google decides by looking at pixels or at your website as a whole: promotional overlays and generic images, landing page availability and functionality, policy questions such as misrepresentation, tax and shipping settings, and whether your Merchant Center account is verified. The Merchant Center error library covers those issues and says on each page whether the check can see it.

Questions merchants ask

Does the check read my whole feed?

Up to 100 MB of it. A larger file is cut at the last whole product and the report says how many products it covers. Connecting a Shopify store reads every active product; a store connected by its feed URL syncs a file of up to 100 MB that downloads within 2 minutes.

Why does my Shopify store URL give a report without barcode checks?

Pasting a store address reads the store's public product list. The check takes no barcodes, MPN, identifier_exists, Google product category or condition from it, and for stock only whether each variant is available. The report on a store address leaves out 17 checks, listed on this page under “What it reads”. Paste a feed URL for the full set, or connect the store and the barcode and category checks run too.

How is the score calculated?

Each check has a weight; the deduction is the weight times the share of products affected, summed across checks. 100 minus that is the score, floored at 5. 85 and above is Good, 60 to 84 is Fair, below 60 Needs work. Checks with weight 0 are reported and never scored.

Is the check the same one a paid account gets?

Mostly. In the app, each feed's quality report (Health, on the feed's page) runs the same checks on the feed's products after its country and rules, as of the last sync. It leaves out the checks for missing availability and missing condition, and the two checks on a price's separator; outside the Google and Custom XML feeds, the check for a missing availability date; outside the Google, Microsoft and Custom XML feeds, the check for an id over 50 characters; and outside the Google, Microsoft, OpenAI and Custom XML feeds, the check for a title over 150 characters. Only the free check opens a sample of product pages to compare prices and a sample of images to measure them, and only the free check shows, before and after, up to two examples of each rewrite and suggestion listed on this page under “What the feeds rewrite, and what the check suggests”. It runs on the feed URL or Shopify store address you paste, once, or every week if you start a watch.

Do you keep my feed?

The file is read, scored and shown to you, not stored. The finished report, with the sample of products it shows, stays in the server’s memory for up to 30 minutes; emailing it or starting a watch on the feed while it is there does not fetch the URL again. We keep an anonymous usage record of each check you run (the feed’s domain name, whether it could be read and, if not, why, the score, the number of products and how many failed each check, and how you found the tool), and we receive a copy of the report by email, with the feed’s full URL. If you start a watch, we keep the email address you typed, the feed’s full URL and the result of its last check. If you ask for the report by email, we keep the address you typed, with the feed’s domain name, the score, whether you agreed to hear from us again and, if you did, the issue the first follow-up email is about.

Sources

Not sure what's wrong with your feed? Paste your feed URL and FeedRobin checks every product for missing barcodes, images, descriptions and more — free, no account needed.