the pipeline · for people who read the details before installing
What actually happens when FeedWarden scans.
No magic claims. This page walks the pipeline end to end: what gets fetched, how the two sides are matched, what each detector looks for, and what happens when something is wrong.
stage 01 · fetch
Both sides, every scan.
From Shopify: every variant with its price, compare-at price, stock, title, image, barcode, and URL, plus 30-day order revenue per variant. From Google: every Merchant Center item with its submitted attributes, item statuses, disapproval reasons, and the datasource that submitted it. Read-only on both sides.
stage 02 · match
A matching ladder, not a guess.
Feeds name products differently, so matching runs a ladder: the standard channel offer-id convention first, then exact SKU, then GTIN with zero-padding normalized, then the variant id embedded in the offer id. Ambiguous keys never match; a wrong pairing would poison every comparison downstream.
stage 03 · detect
Ten detectors over the matched catalog.
Missing products
Active Shopify variants with no matching Merchant Center item.
Ghost items
Products deleted in Shopify but still served to Google surfaces.
Field drift
Price, sale price, availability, title, image, GTIN, or URL disagreeing between Shopify and GMC.
Stale prices
A mismatch that persists past your sync window. Stale sale prices are a fast path to disapproval.
Source takeovers
The winning datasource for an offer changed between scans: the footprint of two feeds fighting over one product.
Count drops
The Merchant Center item count fell sharply since the last scan.
Empty feed reads
Merchant Center returns zero products while Shopify has an active catalog: a connection or account problem, caught as one incident instead of hundreds.
Status changes
Items disapproved or limited in GMC, held open as incidents until Google actually recovers them.
Page and crawl failures
Product pages that Google's crawler cannot reach or that contradict the feed.
Duplicate submissions
The same offer visible from more than one source in a single scan.
stage 04 · crawl
Live page checks on the riskiest offers.
For products with page-related disapprovals or suspicious drift, FeedWarden fetches the live product page the way a crawler does and verifies:
- HTTP status and full redirect chain, hop by hop
- robots.txt rules as Google's crawlers read them
- meta noindex tags
- canonical URL versus the served URL
- structured-data price and availability versus the feed
- image URL reachability
- access walls: password pages, login redirects, bot challenges
Requests are throttled to be polite to your storefront, and every redirect hop is re-validated before it is followed.
stage 05 · rank
Money first.
Every detection carries the 30-day revenue of the variants it touches, in your store currency. Detections group into incidents, incidents sort by revenue at risk, and incidents that touch your best sellers escalate in severity.
stage 06 · report
Incident, cause, owner, evidence.
Each incident gets a plain-English root cause (Shopify data, GMC ingestion, feed source conflict, page or crawl issue, structured data, policy, or stale sync), a recommended fix owner, specific fix guidance, and a downloadable evidence packet in Markdown or JSON. Incidents persist across scans and resolve only when the underlying state recovers.
See a finished incident
access & data
Exactly what it needs. Nothing else.
- Shopify scopes
read_products,read_orders. No write scopes, ever.- Google access
- Merchant Center content scope via your own Google sign-in. FeedWarden reads items, statuses, and datasources. It never writes to your feed.
- Data retention
- Catalog snapshots, incident history, and crawl results for your store. Kept 30 days (90 on Command), and deleted on uninstall.
- Scan cadence
- Scheduled scans by plan, plus catalog-change flags from Shopify webhooks, plus manual scans whenever you want one.
- Monitoring health
- FeedWarden reports on itself too. A failed scan shows a banner with the exact error, three consecutive failures trigger an alert, and Settings shows the delivery status of every alert channel.