What this audit checks
Authentication & access
- OAuth client-credentials valid (auth on /v2/auth/request-token)
- Token refresh succeeds within 1h window
- Authorization header is raw token (NOT Bearer-prefixed) - common mistake
- site_id correct (UK = 2000)
- /v2/account 403 expected - derive seller stats from listing/order payloads
Listing visibility
- Suspended listings (any > 0 = direct revenue blocker)
- Inactive listings >5% of total (catalogue rot)
- Stale listings >180d no update >10% (search de-prioritisation risk)
- Uncategorised listings (missing category_id = invisible to category browse)
- Zero-stock active listings (show on browse but can’t fulfil)
Order fulfilment SLA
- Pending dispatch >2x 30D average (backlog signal)
- Avg dispatch time >24h (slow ops)
- Late dispatches >5% of 30D orders (account-standing risk)
- Cancellation rate >3% (refund + rating impact)
- Single-courier dependency >85% (resilience risk)
Pricing & commission
- Commission % >12% of revenue (margin compression by category)
- Listings missing RRP >10% of catalogue (no Save% badge)
- Avg discount >25% vs RRP (margin erosion)
- Per-category commission outliers (categories where OnBuy fees outpace Amazon UK)
Brand & category coverage
- Category coverage <80% of brand-relevant tree
- Brand registry alignment with Amazon Brand Registry status
- Top-velocity Amazon UK brands missing from OnBuy listings
Cross-channel: leak vs Amazon UK + DTC (the killer area)
- Catalogue drift - same SKU, OnBuy vs Amazon UK price delta >15%
- Top-50 Amazon UK SKUs not listed on OnBuy (cheapest revenue lift)
- OnBuy price >10% below DTC list price (MAP violation risk)
- OnBuy orders via ShipBob: SLA compliance per-channel (isolates 3PL performance)
- Channel mix anomaly: OnBuy share dropping >25% WoW vs Amazon UK on top SKUs
Severity thresholds
| Signal | Warn | Critical |
|---|---|---|
suspended_listings_count | 1 | 5 |
inactive_listings_pct | 3 | 5 |
stale_listings_pct | 5 | 10 |
uncategorised_listings_count | 1 | 10 |
zero_stock_active_count | 1 | 10 |
pending_dispatch_multiplier | 1.5 | 2 |
avg_dispatch_hours | 18 | 24 |
late_dispatch_pct | 3 | 5 |
cancellation_rate_pct | 2 | 3 |
commission_pct_of_revenue | 10 | 12 |
missing_rrp_pct | 5 | 10 |
avg_discount_vs_rrp_pct | 20 | 25 |
category_coverage_pct | 85 | 80 |
catalogue_drift_count | 5 | 10 |
missing_on_onbuy_count | 3 | 5 |
map_violation_count | 1 | 5 |
Data sources
POST https://api.onbuy.com/v2/auth/request-token- Auth + token-refresh sanityGET https://api.onbuy.com/v2/listings?site_id=2000- Listing inventory + status + categorisationGET https://api.onbuy.com/v2/orders?site_id=2000- Order status, dispatch timing, fulfilment SLAGET https://api.onbuy.com/v2/brands?site_id=2000- Brand catalogue lookup for coverage checksGET https://api.onbuy.com/v2/categories?site_id=2000- Category tree (~4,300 entries) for categorisation checks