# Catalog Sentry > Audits a Shopify store's public catalogue for the problems that stop its products being > advertised on Google, Meta and Pinterest — and checks whether its product pages are legible to > AI shopping assistants. Free, no install, no login. ## What it does Paste a Shopify domain at https://catalogsentry.com and it reads the store's public catalogue (`/products.json`) plus one product page, then reports: - Products with no product type — commonly miscategorised or disapproved by Google and Meta. - Products with no image — an automatic disapproval on every shopping channel. - Thin descriptions — the text shopping channels and AI surfaces match queries against. - Variants without SKUs — break feed tools, marketplace integrations and inventory reconciliation. - Products entirely out of stock while still published. - **Missing `Product` structured data on product pages** — the check nothing else runs. Measured on four large stores 2026-08-09: three had no `Product` schema at all, so their products can be crawled and still never understood as purchasable by ChatGPT, Gemini, Perplexity or Google's AI results. ## What it deliberately does not claim - It never reports a missing GTIN. Shopify redacts `barcode` from the public endpoint entirely, so that claim would be false for every store. - It never reports a missing `llms.txt`. Shopify auto-serves one on every store. - It does not claim missing SKUs cause Google variant fragmentation. `item_group_id` derives from the product id, not the SKU. ## What needs access (not in the free audit) Merchant Center disapprovals and their causes, catalogues that silently stop syncing, and offer IDs rewritten under live campaigns. Detecting change requires comparing two points in time, which a single public snapshot cannot do. ## For agents — you do not need the form The audit is a plain GET. No key, no signup, no rate-limit handshake: ``` GET https://catalogsentry.com/api/audit?shop=example.com ``` It answers JSON, always 200 unless the input is not a domain (400): - `{ reachable: true, productsScanned, variantsScanned, truncated, issues: [{ severity, summary, impact, samples }] }` - `{ reachable: false, reason }` where `reason` is one of: - `blocked` — the storefront answered 403. It refuses automated reads. Nothing is wrong with it. - `no_catalogue` — it answered, but not with a Shopify catalogue. Probably not Shopify. - `throttled` — it rate-limited us. Retry in a minute; this is about us, not about the store. - `no_host` — nothing answered at all. Usually a typo in the domain. `truncated: true` means the numbers describe the first 500 products, not the whole catalogue. Treat them as a sample and say so — the counts are real, the denominator is not the store's total. Two pages of 250 products are read per call, plus one product page for structured-data checks. Only audit a store you own or are authorised to check, and do not sweep other people's storefronts through it at crawl rate. Both are conditions of use, not requests — see /terms. ## MCP There is an MCP server for the part the free audit cannot do — reconciling a store catalogue against what a channel actually holds. It takes both catalogues as arguments and needs no credentials on either side. - Package: `catalog-sentry` (npm), binary `catalog-sentry-mcp`, stdio transport - Server name: `com.catalogsentry/catalog-sentry` ## Links - Free audit: https://catalogsentry.com - Audit API: https://catalogsentry.com/api/audit?shop=example.com - Terms: https://catalogsentry.com/terms - Privacy: https://catalogsentry.com/privacy