Skip to content

Wholesale orders in DTC numbers: how to separate them

Split them at the source: Shopify can label B2B orders in its reports, and GA4 needs a custom dimension because its data filters do not cover order types. Then recompute MER and order value on DTC orders only.

By , Founder & CEOPublished 5 min read

Run the numbers for your store: the free blended ROAS (MER) calculator.

Wholesale orders should not share a denominator with DTC orders, and Shopify can label them: its reports have an "Is B2B order" dimension and filter for any sales-related metric. Google's documentation lists no order-type filter for GA4, whose data filters cover only developer traffic, internal traffic and web hostname, so splitting order types there takes a custom dimension. For illustration: 1,000 DTC orders at €60 and 20 wholesale orders at €1,500 give a blended average order value of about €88 and, on €15,000 of ad spend, a blended MER of 6.0, against €60 and 4.0 for the DTC orders alone.

Why do wholesale orders distort DTC numbers?

Because they are a different kind of order by design. Shopify's B2B documentation says you can set pricing, currency, products, payment and shipping methods for each B2B customer, so order value and margin are not comparable with a first order from an ad. Ratios built on revenue or orders move with them: blended MER, average order value, cost per order. No public measurement says by how much for a typical store, so the sum above is an illustration and your own report gives the real share.

Two GA4 effects make it worse. Google classifies a visit from a typed URL, or from a link in an offline document such as a PDF, as (direct) / (none), so a wholesale buyer who reorders from a bookmark or a price list lands in Direct, a bucket of unknown origin. And an order a sales rep keys in as a draft order involves no visitor completing a checkout, while Shopify's checkout_completed event logs when a visitor completes a purchase. Whether those orders reach GA4 depends on your setup, so measure it before you blame tracking for the gap between Shopify and GA4.

How do you split wholesale from DTC in Shopify?

  1. Flag the orders. If wholesale buyers are set up as companies in Shopify B2B, their orders carry the "Is B2B order" label. If you mark them with customer tags or order tags instead, Shopify's reports accept Customer tag and Order tag as dimensions.
  2. Build the split. In Analytics, Reports, New exploration, choose the metric Net sales and the dimensions Is B2B order and Month. Shopify's B2B reports page gives the steps and a ShopifyQL version.
  3. Recompute on DTC orders only. Filter Is B2B order to No, then work out MER (DTC net sales divided by total ad spend) and average order value. Shopify defines average order value as gross sales minus discounts, divided by orders, so use the same definition on both sides.

Pass: the flagged wholesale total matches what your sales team says they sold last month. Fail: it is lower, so some wholesale orders are unflagged and your DTC numbers still contain them. Fix the tagging first.

How do you split them in GA4?

  1. Add a parameter to the purchase event, for example customer_type, and register it as an event-scoped custom dimension in Admin under Custom definitions. How you add the parameter depends on how your store sends GA4 events. Google says you can report on a new custom dimension after 24-48 hours. A standard GA4 property allows 50 event-scoped custom dimensions, and a 360 property 125.
  2. If wholesale buyers order on their own domain, a web hostname data filter can include or exclude it. Shopify says you can use one store for both B2B and D2C sales or create a separate B2B-only store, and a separate store keeps the two apart at the source. Google says that once you apply a data filter the effect on the data is permanent, so check the filter before you activate it.
  3. Reconcile one closed month. List the Shopify orders flagged B2B, match them to GA4 transactions using whatever your setup sends as the transaction ID (check one order first), and read the channel group each landed in.

Pass: you know how many wholesale orders GA4 holds and where they landed. Fail: you cannot tell, so the channel reads for that month mix two kinds of buyer. Compare channels on DTC orders only until you can.

Blended MER against platform ROAS and new-customer CAC against blended CAC are the two ratios to recompute first once the split is in.

Sources, 30 September 2026: Creating reports for B2B sales, Shopify B2B and Creating B2B orders using draft orders (Shopify Help Center, 2026); Analytics data points (fields) reference (Shopify Help Center, 2026); checkout_completed (Shopify developer documentation, 2026); Data filters, About custom dimensions and metrics and Understand (direct) / (none) traffic (Google Analytics Help, 2026).

Frequently asked questions

  • How do I exclude wholesale orders from my Shopify reports?
    Filter Is B2B order to No in Shopify Analytics. If wholesale buyers are set up as companies in Shopify B2B, their orders carry that label; if you use customer tags or order tags instead, group or filter by Customer tag or Order tag.
  • Can I filter wholesale orders out of GA4?
    Not with a data filter by order type: Google lists developer traffic, internal traffic and web hostname only. Send a parameter such as customer_type on the purchase event and register it as a custom dimension, or filter a separate hostname. Data filters are permanent, so test first.
  • Why do my Shopify orders and GA4 purchases not match?
    Wholesale orders keyed in by staff as draft orders involve no visitor completing a checkout, so they may not reach GA4. Split them out before you measure tracking loss.

Go deeper: Causal attribution, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.