Skip to main content
Nerve Centre KPIs · Audit Profile · Sentiment Settings Medusa is a headless commerce backend where data is fragmented across the Medusa modules, the storefront framework, the payment provider, the search service, and the CDN. This audit answers four questions for engineering-led teams: are we losing sales to out-of-stock SKUs, has refund rate spiked, are orders stuck unfulfilled, and is the catalogue healthy enough to convert? Cross-references commerce / ad / marketplace / website-performance siblings to compute revenue-at-risk and auto-pause spend when goods can’t ship.

What this audit checks

Authentication & access

  • Admin API token still valid (auth on /admin/users/me)
  • Backend reachable - self-hosted / Medusa Cloud base URL responds
  • Required modules enabled (orders, products, inventory, customers) - headless installs can disable modules
  • Publishable key sales-channel scope matches the merchant’s expectation

Stock & inventory health (the highest-leverage area)

  • Variants with inventory_quantity <= 0 and manage_inventory true - actively losing sales NOW
  • Variants below reorder point (low-stock reorder-window trigger)
  • Stock-out burst - >5 variants transitioned to OOS in last 1h (sync break or flash-sale stockout)
  • Backorder enabled on OOS variants without clear customer messaging

Refunds & returns

  • Refund rate > 5% over 30d (returns-health headline)
  • Refund-rate spike > 2σ vs 30d baseline (product defect / fraud / fulfilment failure)
  • Refund value up > 25% vs prior period (cash impact of returns)
  • Per-SKU refund concentration - one product driving the spike

Fulfilment & order flow

  • Unfulfilled orders > 2× 30d average (backlog = customer-promise risk)
  • Orders stuck in awaiting / not_paid > 24h (payment-provider issue or dropoff)
  • Cancellation rate > 3% over 30d
  • Region-specific order drop > 50% vsP (region-specific checkout/payment/storefront outage)

Catalogue quality

  • Products missing description (suppresses conversion + SEO)
  • Products missing thumbnail / image
  • Variants missing SKU (breaks marketplace + ad parity joins)
  • Variants missing price in an active region’s currency

Cross-channel: revenue at risk

  • Cross-channel: OOS SKU appears in active google_ads campaign - $ wasted (sibling = google_ads.product_ad active on medusa.variant inventory_quantity<=0)
  • Cross-channel: OOS SKU appears in active amazon_ads campaign - $ wasted
  • Cross-channel: SKU OOS or price-divergent on Medusa vs marketplace listing (sibling = amazon/ebay.marketplace_listing active)
  • Cross-channel: slow Core Web Vitals on top revenue pages driving cart loss (sibling = website_performance.crux_page LCP p75 > 2.5s)
  • Cross-channel: high-value customer unengaged in email tool (sibling = klaviyo/mailchimp last_open_at < 90d_ago)

Severity thresholds

SignalWarnCritical
out_of_stock_count15
refund_rate_pct25
cancellation_rate_pct13
unfulfilled_count1050
awaiting_payment_aged_count510
region_order_drop_pct3050
repeat_rate_pct2010
missing_desc_pct520
oos_with_active_spend_count15

Data sources

  • GET {backend_url}/admin/users/me - Auth probe + admin identity
  • GET {backend_url}/admin/orders - Order status, payment/fulfilment state, refunds, region/currency split
  • GET {backend_url}/admin/products - Catalogue size + description/image gaps
  • GET {backend_url}/admin/product-variants - Per-variant SKU + inventory_quantity (the OOS join key)
  • GET {backend_url}/admin/inventory-items - Inventory module levels for low-stock / reorder checks
  • GET {backend_url}/admin/returns - Return rate + reasons + processing time
  • GET {backend_url}/admin/customers - Customer base, repeat rate, email-engagement join key
  • GET {backend_url}/admin/regions - Region + currency model for multi-currency revenue split