Free tool
Product feed validator
This validator reads a CSV, TSV or XML product feed and checks it against one channel's requirements: which attributes are missing, which values break a format rule, and which ids are duplicated. It parses the file in your browser.
Paste a feed or choose a file, pick the channel you are submitting to, and the report lists what is missing and what is malformed, grouped by attribute rather than by row so a problem affecting a thousand products reads as one finding.
Runs entirely in your browser. Nothing you paste is uploaded or stored.
Validate a feed
- Format
- Products
- Errors
- Warnings
Nothing to report against the attributes documented here. That is not a guarantee of approval: channels check things a file cannot show, including whether your landing page agrees with the feed.
Errors
These stop items being accepted.
Warnings
Attributes this channel requires in some cases, and which are absent here.
Frequently asked questions
What does this validator check?
Whether the attributes the channel requires are present, whether values match their format rules for prices, URLs, availability, condition and GTINs, and whether any id appears twice. The requirements come from this knowledge base, so they match the attribute pages exactly.
Does a clean report mean my feed will be approved?
No. A file cannot show whether your landing page agrees with the feed, whether your images can be fetched, or whether a product breaches policy. It means the file itself is well formed against the attributes documented here.
Which formats can it read?
Comma-delimited text, tab-delimited text, and XML in either RSS 2.0 or Atom 1.0. The format is detected automatically, and namespaced elements such as g:id are read correctly.
How large a file can I check?
Up to 10 MB of text, which is roughly forty thousand products. The parsing happens on your own machine rather than a server, so the limit is there to keep the page responsive. A few hundred rows show the same problems as the whole catalogue.
Can I check a compressed or Parquet feed?
Not directly, because this reads plain text. Expand a .gz or .zip first and check the file inside, which is the file the channel reads too. Parquet is binary and has no text form to check here.
Is my feed uploaded anywhere?
No. The file is read and parsed in your browser, so it never leaves your machine. That is why you can paste a real catalogue into it.
Why does it report a byte order mark?
Because a BOM at the start of a file becomes part of the first column name, so a channel reads the first attribute as something other than id. It is invisible in an editor, which is why it is worth calling out.
Attributes this relates to
- id The id attribute is the unique, permanent identifier a sales channel uses to recognise one item across every feed update. In a Shopify feed it must identify a single variant rather than a product, and once a channel has seen an id it should never be reused for a different item.
- price The price attribute is the item's full price before any discount, submitted as a number followed by an ISO 4217 currency code. It must match what a shopper sees on the landing page in that market, including whether tax is included, which is why multi-market Shopify stores so often trip the price mismatch disapproval.
- availability The availability attribute tells a channel whether an item can be bought right now, using a fixed vocabulary rather than a stock count. On Shopify it cannot be read from inventory quantity alone, because a variant that does not track inventory or that allows overselling is purchasable at zero quantity.
- gtin The gtin attribute is the globally unique barcode number a manufacturer assigns to a product, covering UPC, EAN, JAN and ISBN formats. Channels use it to match an item against the same product sold elsewhere, and on Shopify it comes from the variant's barcode field, which is optional in the admin and therefore frequently empty.
Errors this helps you avoid
- Duplicate product id A duplicate id error means two or more rows in a feed claim the same identifier, so the channel cannot tell which one describes the item and keeps only the last it processed. On Shopify it usually means the feed was built per product rather than per variant, or that a SKU used as the id is blank or reused across variants.
- Invalid value: GTIN The "Invalid value: GTIN" error means the feed supplied a value in the gtin attribute that is not a structurally valid Global Trade Item Number. Unlike a missing GTIN this is usually a disapproval rather than a warning, because a wrong identifier matches the item to the wrong product rather than to none.
- Missing value: GTIN The "Missing value: GTIN" issue means a channel believes a product has a manufacturer-assigned barcode but the feed did not supply one. On Shopify it almost always traces back to the variant barcode field, which is optional in the admin and therefore left empty across large parts of most catalogues.
Related concepts
Primary sources
Channel specifications change. These are the official documents this page is based on.