1. Load your feed
2. What this feed would fail on
Feed-level
| Severity | Code | Message |
|---|
Per item
| Item | Severity | Code | Message |
|---|
Prefer a CLI, or want this as a CI gate before you sync the feed?
Same logic, zero dependencies, one file — run it right before your feed generator uploads to Merchant Center or Commerce Manager, or on a schedule against the file your CMS/Shopify/WooCommerce export produces:
node cli.mjs check feed.csv # human-readable, exit 1 if any error is found node cli.mjs check feed.csv --json node cli.mjs check feed.csv --max-warnings 0 # also fail the build on warnings
Get cli.mjs — Node 18+, nothing to install. It reads only the local file you name: no network call, ever.
What this checks — and what it cannot
| Documented disapproval reason | Checked here as |
|---|
Sources and the exact spec limits used: why products get disapproved in Google Merchant Center, and what a feed checker can and can't see. Also worth a pass: Structured Data Drift Check, which catches your product pages' own JSON-LD drifting from what Google's Merchant Center feed rules expect it to match. Building or routing feeds to many channels day to day? See this checker vs. DataFeedWatch. Wondering whether scanning the feed yourself is enough? See this checker vs. eyeballing the feed in a spreadsheet.
Common questions
Does this guarantee my products will be approved?
No. It checks feed data-specification conformance — required fields, formats, GTIN checksums, enum values — which is one documented category of disapproval reason. It cannot see your Merchant Center or Commerce Manager account, your website's trust signals, or Shopping policy review, so it cannot detect misrepresentation, prohibited-product, or landing-page-mismatch disapprovals. Read the full scope on the docs page before relying on a clean report.
Is my product feed uploaded anywhere?
No. The browser page parses a pasted or locally loaded file entirely in your own browser and never sends it anywhere. The CLI reads only a local file — no network call, ever.
What feed formats does it accept?
CSV or TSV with a header row (Google's text feed format, or an export from Shopify, WooCommerce, or BigCommerce), or a JSON array of item objects (or {items:[...]}), the shape Meta's Catalog API and many feed tools already use. Column names are matched by common aliases (id/sku/item_id, image_link/image_url, and so on).
How is the GTIN checked?
With the real GS1 check-digit algorithm used for UPC-A, EAN-13, and GTIN-8/12/14 — the same arithmetic barcode scanners use to reject a mistyped code. A GTIN that is the right length but fails the checksum is very likely a typo, not a real product identifier.