Skip to main content
Card class: Cross-ChannelCategory: Marketplace

At a glance

Average percentage gap between the merchant’s OnBuy price and their DTC (Shopify, BigCommerce, Adobe Commerce) list price for the same SKU. Read together with onbuy_xc_catalogue_drift (OnBuy vs Amazon) to spot when OnBuy is being treated as a discount channel that cannibalises DTC margin.
What it countsAVG((onbuy.price - dtc.list_price) / dtc.list_price) across SKUs listed on both. Result is a signed percentage; negative means OnBuy is cheaper, positive means OnBuy is more expensive.
Direction expectationMost healthy merchants land at -3% to +5% on average (OnBuy slightly cheaper or roughly at parity with DTC). Below -10% is the alert.
Source dataOnBuy GET /v2/listings price field joined to the merchant’s connected DTC platform (shopify.product.variant.price, bigcommerce.products.price, or adobe_commerce.product.price).
Match key precedence(1) Barcode (EAN/UPC), (2) seller-SKU, (3) manual cross-reference where the merchant has set it.
Includes promo prices?DTC side uses list_price (not the active discount price), to avoid flagging temporary sales. The OnBuy side uses the live storefront price.
CurrencyGBP only on both sides. Non-GBP DTC listings are filtered out.
Refunds / cancellationsNot relevant. This is a price-comparison card; no order-level data feeds it.
Time window30D. Used as a stability filter, the gap must hold for at least 7 consecutive days to count toward the average; transient DTC promo discounts are excluded.
Alert triggerOnBuy >10% below DTC list. The alert fires on the average across all matched SKUs.
SentimentNegative (OnBuy cheaper) is mildly concerning above 10% gap; rising negative trend over 90 days is the structural warning.
Rolesowner, finance, marketing.
Only whenhas_commerce_sibling = true (Shopify, BigCommerce, or Adobe Commerce connected).

Calculation

Calculated automatically from your OnBuy data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A small UK kitchen-and-tableware seller, snapshot taken 27 Apr 26. The seller has 95 SKUs on OnBuy and 220 on Shopify (DTC). 88 SKUs match across both. Sample of the matched-SKU price comparison:
SKUOnBuy priceShopify list priceGap
KT-2104 (oak chopping board)£18.99£24.99-24.0%
KT-2118 (linen tea-towel set)£14.50£19.99-27.5%
KT-2202 (wooden serving platter)£29.99£39.99-25.0%
KT-2450 (cast-iron skillet)£42.00£52.00-19.2%
KT-3201 (ceramic mug, navy)£8.99£11.99-25.0%
KT-3504 (storage tin)£12.99£14.50-10.4%
KT-3601 (wooden spoon)£6.99£6.990.0%
(… 81 more rows …)
Matched SKUs                          88
Avg gap (OnBuy vs Shopify list)    -14.8%
SKUs with gap > 10% (OnBuy cheaper) 67 of 88
What it means for this seller. The average is -14.8%, comfortably above the -10% alert threshold. Two thirds of OnBuy listings sit more than 10% below DTC list. The merchant has structurally turned OnBuy into a discount channel, not a parallel one. The downstream effects are quantifiable.
EffectMechanismEstimated impact
DTC cannibalisationBrand-loyal customers who would have bought direct (full margin) instead buy via OnBuy at -15% (lower margin after fees).10 to 20% of DTC-attributable sales rerouted to OnBuy
Margin compressionOnBuy’s net margin (after 7% commission, 9p fee, packaging) lands at ~£8 to £12 per order vs DTC’s ~£15 to £22.Lost margin per cannibalised order: £5 to £12
Brand perceptionRepeat DTC customers see the brand as “always cheaper on OnBuy”; they pre-search OnBuy on every visit.Long-tail DTC AOV erosion of 5 to 10% over 12 months
Amazon Buy Box riskIf the OnBuy listing is also cheaper than Amazon by >15%, it can trigger Buy Box suspension on Amazon for the same SKU.See onbuy_xc_catalogue_drift
The action. Lift OnBuy prices on the 67 sub-DTC SKUs by 10 to 15% to bring the average gap into the -3% to +3% band (rough parity). Expected outcomes: (1) OnBuy unit volume drops 10 to 15%, (2) per-order OnBuy margin rises by ~£2, (3) DTC reclaim of 5 to 10% of the cannibalised volume at full margin. The maths typically nets out to roughly the same OnBuy revenue with materially higher blended margin, plus reduced Amazon Buy Box exposure. This is one of the highest-ROI single-action recommendations the AI OS makes.

Sibling cards merchants should reference together

This card is the DTC-vs-marketplace pricing-discipline read. The natural pairings:
CardWhy it matters next to DTC price gapWhat the combination tells you
Catalogue Drift vs Amazon UKThe marketplace twin.If OnBuy is cheaper than DTC AND cheaper than Amazon, the merchant has positioned OnBuy as the lowest-price channel; the cumulative risk (DTC cannibalisation + Amazon Buy Box loss) compounds.
Avg Discount vs RRPThe OnBuy-internal view.If OnBuy avg discount is also high vs RRP, the price gap is the merchant’s deliberate channel-level discount, not just relative cheapness.
OnBuy Total RevenueSizes the channel.Lets you weigh the lost DTC margin against the OnBuy revenue it generates.
OnBuy Commission % of RevenueThe fee context.Some merchants discount OnBuy to “pass commission savings to the buyer”; that logic only works to ~7%, not 15%.
Shopify Total RevenueThe DTC channel.A flat or declining DTC revenue line alongside high OnBuy gap suggests cannibalisation; growing DTC despite the gap suggests the channels reach different audiences.
Shopify AOVDTC basket size.DTC AOV erosion over time correlates strongly with persistent OnBuy price-gap; it is the leading indicator that brand-loyal customers are switching channels.
OnBuy Share of UK RevenueThe portfolio view.Rising OnBuy share + widening DTC gap = cannibalisation in motion; rising OnBuy share + narrow gap = healthy channel growth.

Reconciling against the vendor’s own dashboard

Where to look in OnBuy’s own dashboard: OnBuy does not provide a DTC comparison view; the data lives in the merchant’s own DTC platform. The closest manual workflow is:
OnBuy Seller Console (https://seller.onbuy.com) -> Listings -> All Listings (export CSV with prices) Shopify Admin -> Products -> Export (or BigCommerce / Adobe equivalent) Compare in Excel using EAN or SKU as the join key.
Most merchants only run this comparison after a brand or distributor flags a MAP violation, by which time the cannibalisation has already happened. Why our number may legitimately differ from a manual comparison:
ReasonDirectionWhy
DTC promo pricesOurs larger gapWe compare to list_price, ignoring active DTC promotions. A merchant doing a 20% Shopify storewide sale will see “the OnBuy gap looks fine” in their own dashboard but the structural gap (post-promo) is what we measure.
Stability filterOurs lowerWe require a 7-day price-stability window; manual snapshots include flash-sale moments.
Match key precedenceEitherManual SKU-based comparisons miss SKUs where the merchant uses different SKU codes per channel; our EAN-first matcher catches more.
Variant rollupMarginalShopify variants and OnBuy listings should be 1:1 matched; in apparel categories with size and colour combinations this is occasionally off by a few SKUs.
CurrencyOurs stricterWe filter strictly to GBP DTC. A Shopify store with an EUR or USD storefront on the same backend will see those products excluded from the average.
Bundle productsExcluded both sidesBundles (a single SKU containing multiple sub-items) are excluded from the average because the price comparison is meaningless without unbundling.
Internal identity: onbuy_xc_dtc_price_gap = AVG((onbuy.price - dtc.list_price) / dtc.list_price) for matched SKUs The drill-down view shows the per-SKU breakdown ranked by absolute gap; the top of that list is where action concentrates.

Known limitations / merchant FAQs

Should OnBuy be cheaper than my own DTC site? Slightly, yes; the rough rule is OnBuy at -3% to -7% vs DTC list. The reasoning: OnBuy buyers are more price-sensitive than direct buyers, and OnBuy commission (5 to 9%) is lower than DTC effective acquisition cost (often 15 to 25% of price for ad-funded brands), so a small OnBuy discount makes economic sense without cannibalising. The alert fires at -10%, which is the band where cannibalisation typically begins to outweigh the marketplace-native discount logic. Why is the alert on the average, not the worst SKU? Because the action is portfolio-level. A single SKU at -25% might be a deliberate clearance move; the average rising past -10% across the catalogue is a signal that the merchant has structurally repositioned OnBuy as a discount channel. The drill-down view ranks SKUs by absolute gap so the worst offenders are still actionable individually. My OnBuy is more expensive than DTC. Is that bad? No, that is unusually disciplined and usually correlates with low cannibalisation risk. The downside is that OnBuy revenue tops out lower than it could; OnBuy buyers will simply not buy at the higher price. Practical band: between 0% (parity) and +5% (slightly more expensive on OnBuy) is a defensible position for premium brands that do not want OnBuy to undercut DTC perception. My DTC site has frequent promo discounts. Does that affect this card? We compare to DTC list_price, not the active promo price, specifically to insulate this card from short-term promotions. The 7-day stability filter further smooths out brief sales. If a merchant runs a permanent “always 20% off” coupon, they should update the list price to reflect the true selling price and let our card recalibrate; otherwise the card will under-state the real gap. Does this account for shipping? No. Both sides use list price excluding shipping. OnBuy buyers pay shipping at checkout (separate from order.amount’s headline number); DTC merchants typically charge shipping or have a free-shipping threshold. The card compares advertised list prices because that is what buyers see and compare. A more sophisticated “delivered cost” view would account for shipping but is not how merchants or shoppers think about it. My OnBuy gap dropped from -18% to -8%. What probably happened? Three usual causes, in order of likelihood. (1) The merchant ran a manual repricing on OnBuy (most common, especially after this card flagged the issue). (2) DTC list prices dropped (a Shopify storewide price reduction without OnBuy following). (3) Match-set changed (new SKUs added to OnBuy with different price profile). Open the drill-down to see whether the gap-rank order is similar (cause 1) or has reshuffled (cause 3). Can I exclude SKUs that are deliberately cheaper on OnBuy (e.g. clearance lines)? Yes; mark them as “OnBuy-clearance” in the Vortex Mind catalogue settings and they are excluded from the average. The exclusion persists until removed. Use this for end-of-line, distressed inventory, and seasonal closeouts that the merchant deliberately routes through OnBuy at lower margin to clear stock. Does this card flag DTC subscription pricing differently from one-time purchases? DTC subscription products typically expose two prices: the one-time price (closer to OnBuy) and the subscribe-and-save price (often 10 to 15% lower). We compare to the one-time price; the subscribe price would distort the comparison since OnBuy does not offer subscription pricing. How does this interact with Amazon’s Fair Pricing crawler? Amazon’s crawler watches OnBuy independently of DTC, so this card and onbuy_xc_catalogue_drift work together. The dangerous combination is OnBuy >10% below DTC AND OnBuy >15% below Amazon. That is when the merchant gets MAP-policed by Amazon and cannibalises DTC simultaneously, the worst-case Sunday-night discovery a merchant can wake up to on Monday.

Tracked live in Vortex IQ Nerve Centre

OnBuy vs DTC Price Gap is one of hundreds of KPI pulses Vortex IQ tracks across OnBuy and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.