Monitor and enforce product listing consistency across Shopify (D2C), Etsy, and Amazon FBA channels. Detect drift in pricing, descriptions, inventory, and images. Produce daily parity reports and route corrections through appropriate approval workflows. Phase 1 — all corrections require human approval.
Ensure that customers see consistent, accurate product information regardless of which channel they shop on. Detect and resolve drift between channels before it causes customer confusion, margin erosion, or overselling.
Shopify is the source of truth. Etsy and Amazon listings should reflect Shopify data, adjusted for channel-specific optimization (titles, tags, fee-adjusted pricing) but consistent on core product facts (description accuracy, inventory availability, images).
Parity IS:
agents/shared/channel-config/SKILL.mdParity is NOT:
The cross-channel parity check runs as a daily cron job. The scan follows this sequence:
For each active product in Shopify:
Query Supabase products table for:
- shopify_product_id
- etsy_listing_id (if listed on Etsy)
- amazon_asin (if listed on Amazon)
- current Shopify price
- current inventory (from inventory_extended)
Build cross-reference map: {SKU -> {shopify, etsy, amazon}}
For each product with listings on 2+ channels, check:
Expected Etsy price = Shopify price * etsy_markup_factor (from channel-config)
Expected Amazon price = Shopify price * amazon_markup_factor (from channel-config)
IF actual_etsy_price differs from expected by >5%:
FLAG as price_drift
severity = "warning" if <10%, "critical" if >=10%
IF actual_amazon_price differs from expected by >5%:
FLAG as price_drift
severity = "warning" if <10%, "critical" if >=10%
available_to_sell = total_on_hand - fba_allocated - in_transit_reserved - safety_stock
IF etsy_listed_quantity > available_to_sell:
FLAG as oversell_risk, severity = "critical"
IF amazon_listed_quantity > (available_to_sell - etsy_reserved):
FLAG as oversell_risk, severity = "critical"
IF any channel shows "in stock" but available_to_sell = 0:
FLAG as phantom_stock, severity = "critical"
IF any channel shows "out of stock" but available_to_sell > 0:
FLAG as missed_sales, severity = "warning"
For each product, extract core facts from Shopify description:
- Material
- Dimensions/size
- Origin/sourcing
- What's included (mallet, cushion, etc.)
Compare against Etsy and Amazon descriptions:
IF core fact is missing from a channel listing:
FLAG as content_drift, severity = "warning"
IF core fact contradicts between channels (e.g., different dimensions):
FLAG as content_conflict, severity = "critical"
IF Shopify primary image updated more recently than Etsy/Amazon:
FLAG as image_stale, severity = "low"
IF Etsy listing has fewer than 5 images:
FLAG as insufficient_photos, severity = "warning"
1. Is the drift in INVENTORY?
→ Inventory sync failures are time-sensitive (overselling risk)
→ Phase 1: FLAG as critical, draft correction, queue for human approval
→ Phase 2 (graduated): Auto-fix inventory sync within 15 minutes
→ ALWAYS log the correction in skill_invocations
2. Is the drift in PRICING?
→ Price drift <5%: Log only, include in daily report
→ Price drift 5-10%: WARNING — draft correction, queue for ceo approval
→ Price drift >10%: CRITICAL — draft correction, queue for ceo approval with alert
→ NEVER auto-correct pricing, even in Phase 2
3. Is the drift in DESCRIPTIONS?
→ Missing core fact: Draft updated description, queue for approval
→ Contradicting facts: CRITICAL — flag for immediate review
→ Style/formatting differences: ACCEPTABLE (channels have different content needs)
→ NEVER auto-correct descriptions in Phase 1
4. Is the drift in IMAGES?
→ Stale images: Low priority — include in weekly report
→ Missing images: Warning — flag for content team
{
"report_date": "YYYY-MM-DD",
"scan_summary": {
"products_scanned": 0,
"products_with_multi_channel": 0,
"products_in_parity": 0,
"products_with_drift": 0
},
"drift_items": [
{
"sku": "TS-BOWL-HH-7IN",
"product_name": "Hand-Hammered Singing Bowl 7 inch",
"channels_affected": ["shopify", "etsy"],
"drift_type": "price_drift | inventory_drift | content_drift | image_stale",
"severity": "critical | warning | low",
"details": {
"dimension": "price",
"shopify_value": "149.00",
"etsy_value": "149.00",
"expected_etsy_value": "166.88",
"drift_pct": 12.0
},
"recommended_action": "Update Etsy price to $166.88 (12% markup per channel-config)",
"auto_fixable": false,
"requires_approval_from": "ceo"
}
],
"corrections_applied": [],
"corrections_pending_approval": []
}
{
"correction_id": "parity-YYYYMMDD-001",
"sku": "TS-BOWL-HH-7IN",
"channel": "etsy",
"field": "price",
"current_value": "149.00",
"proposed_value": "166.88",
"rationale": "Etsy price should be Shopify base ($149) * 1.12 markup = $166.88 per channel pricing rules",
"severity": "critical",
"requires_approval": true,
"approval_target": "ceo"
}
All corrections require human approval before execution:
Escalation thresholds (trigger immediate alerts, not just daily report):
After demonstrating reliable performance (target: 90+ days, 200+ corrections, <2% error rate):
agents/shared/channel-config/SKILL.md (fee structures, markup rules, SKU conventions), agents/shared/product-knowledge/SKILL.md (product facts for validation), agents/shared/escalation-matrix/SKILL.md (approval routing)products table, inventory_extended table, Shopify API, Etsy API, Amazon SP-APIagents/ecommerce/skills/etsy-content-optimization/SKILL.md, operations agents (inventory sync)