All Tools

Wholesale CAC Calculator

Find out how much your D2C ad cost per order, MER and margin are understated when wholesale orders sit in the same blended ad-spend pool as the orders your ads actually produced.

Your period

Use one period, a month is typical. Ad spend is split equally across every order in the pool, which is how blended allocation works in most profit tools, MerchantFlow's included. MerchantFlow runs that split per day; this calculator treats the whole period as one pool, so it matches exactly when your daily mix is steady and approximates it when it is not.

Advertising

Everything the ad platforms billed you in the period.

Storefront (D2C) orders

Orders that came through checkout because of your marketing.

Wholesale (B2B) orders

Draft orders, purchase orders, distributor orders. Anything advertising did not produce.

Optional

Add these to see CAC per new customer and per-order contribution margin.

The formula

How the distortion is calculated

Blended ad cost per order = Ad spend / (D2C orders + Wholesale orders); True ad cost per D2C order = Ad spend / D2C orders; Misallocated spend = Blended ad cost per order x Wholesale orders

Total ad spend appears in every line and never changes. The whole distortion is in the denominator: which orders are allowed to divide it.

Ad spend
What the ad platforms billed you for the period. Use the same period as the order counts.
D2C orders
Storefront orders that came through checkout. These are the orders advertising can take credit for.
Wholesale orders
Draft orders, purchase orders, distributor orders. Any order that was won by a conversation rather than a click.
Misallocated spend
The share of ad spend charged to wholesale orders under blended allocation. As a percentage of ad spend it equals wholesale orders divided by total orders.
MER
Revenue divided by ad spend. Shown twice: once with wholesale revenue in it, once on D2C revenue alone.
Contribution per order
Average order value minus product cost minus the ad cost that order is charged. Only calculated when you enter a product cost percentage.
  • Per-order understatement scales with wholesale's share of order count. Revenue-based flattery scales with wholesale's share of revenue. A store with a few very large wholesale orders sees the second effect almost without the first.
  • CAC per new customer is ad spend divided by new D2C customers, so it is unaffected. It is shown so you can see which of your metrics the distortion touches and which it does not.
  • Once separated, a wholesale order carries no ad spend at all. Its contribution margin rises by exactly the blended per-order figure it was previously charged.
  • This tool splits the period's spend as one pool. MerchantFlow makes the same split day by day, so wholesale orders that land on a day with no ad spend are charged nothing. When spend and order mix vary a lot from day to day, treat the figures here as an estimate of the direction and size of the error, not the exact amount.

Worked examples

Three worked examples

The same arithmetic in three situations. In each one, the total ad spend is identical before and after; only the figures a dashboard shows you change.

Example 1

Twenty draft orders a month

A store spending 12,000 on ads takes 400 storefront orders and 20 wholesale draft orders. Wholesale is small in count and large in revenue.

Inputs

Ad spend
12,000
D2C
400 orders, 36,000 revenue, 35% product cost
Wholesale
20 orders, 30,000 revenue, 55% product cost

Working

  1. Blended ad cost per order: 12,000 / 420 = 28.57
  2. True ad cost per D2C order: 12,000 / 400 = 30.00
  3. Misallocated spend: 28.57 x 20 = 571.43, which is 4.8% of ad spend
  4. D2C contribution per order: 90.00 - 31.50 - 28.57 = 29.93 blended, against 90.00 - 31.50 - 30.00 = 28.50 true
  5. MER: 66,000 / 12,000 = 5.50 with wholesale revenue in it, against 36,000 / 12,000 = 3.00 on D2C revenue alone

Ad cost per D2C order, blended vs true

28.57 vs 30.00

The per-order error is small, about 5%. The MER error is not: 5.50 against 3.00. Any MER target managed against the blended figure is being cleared by wholesale revenue that advertising had nothing to do with.

Example 2

Wholesale is a quarter of order volume

A brand with a busy trade channel: 9,000 of ad spend, 300 storefront orders and 100 wholesale orders in the same month.

Inputs

Ad spend
9,000
D2C
300 orders, 27,000 revenue, 40% product cost
Wholesale
100 orders, 40,000 revenue, 60% product cost

Working

  1. Blended ad cost per order: 9,000 / 400 = 22.50
  2. True ad cost per D2C order: 9,000 / 300 = 30.00
  3. Misallocated spend: 22.50 x 100 = 2,250, a quarter of the budget
  4. D2C contribution per order: 90.00 - 36.00 - 22.50 = 31.50 blended, against 90.00 - 36.00 - 30.00 = 24.00 true
  5. Wholesale contribution per order: 400.00 - 240.00 - 22.50 = 137.50 blended, against 400.00 - 240.00 - 0 = 160.00 true

Ad spend charged to wholesale orders

2,250 of 9,000

Every storefront order looked 7.50 more profitable than it was, and every wholesale order looked 22.50 less profitable. Both channels were misreported, in opposite directions, by the same total.

Example 3

Four distributor orders that dwarf D2C revenue

A store with 1,000 storefront orders and four distributor orders. The four orders are 0.4% of order count and 36% of revenue.

Inputs

Ad spend
20,000
D2C
1,000 orders, 85,000 revenue, 38% product cost
Wholesale
4 orders, 48,000 revenue, 58% product cost

Working

  1. Blended ad cost per order: 20,000 / 1,004 = 19.92
  2. True ad cost per D2C order: 20,000 / 1,000 = 20.00, a difference of eight cents
  3. Misallocated spend: 19.92 x 4 = 79.68, or 0.4% of ad spend
  4. Ad cost as a share of revenue: 20,000 / 133,000 = 15.0% blended, against 20,000 / 85,000 = 23.5% on D2C revenue
  5. MER: 133,000 / 20,000 = 6.65 with wholesale revenue in it, against 85,000 / 20,000 = 4.25 on D2C revenue alone

MER, blended vs D2C only

6.65 vs 4.25

The per-order split is fine here. The revenue ratios are not: a store that believes it runs at 15% ad cost is actually running at 23.5% on the orders advertising produced. That is the difference between scaling spend and cutting it.

How it works

Why a wholesale order distorts numbers it never touched

Blended ad-spend allocation is simple: take the period's spend, divide it by the period's orders, charge each order its share. It is honest when every order came from the same funnel. It stops being honest the moment an order that advertising did not produce joins the pool.

  1. 1

    The wholesale order takes a share of spend

    A distributor's purchase order, agreed by email and paid by bank transfer, is charged the same per-order ad cost as a shopper who clicked an ad. That spend now sits on an order it had nothing to do with.

  2. 2

    Every D2C order is charged less than it cost

    Total spend is fixed, so whatever landed on wholesale came off the storefront orders. Each D2C order's ad cost is understated by the wholesale share of the order count, and each D2C margin is overstated by the same amount.

  3. 3

    Revenue-based ratios are flattered separately

    MER and ad cost as a share of revenue divide by total revenue. A handful of wholesale orders can be a third of revenue, so these ratios can be badly flattered even when the per-order split barely moves. The calculator shows both effects.

  4. 4

    Separation fixes both sides at once

    Take wholesale orders out of the allocation entirely: they carry no ad spend, and they leave the denominator D2C orders divide. The same spend now lands only on the orders that earned it, and the wholesale orders still count in revenue and profit.

In MerchantFlow

This is what wholesale detection does on your live orders

MerchantFlow classifies wholesale orders from the payment method or an order tag, keeps them out of ad-spend allocation on both sides, and leaves them in revenue, P&L and product margin. Deals that never touched your store can be entered by hand on Pro and Plus.

Read about B2B & Wholesale Orders

Common Questions

Wholesale orders and CAC: FAQ

Should wholesale orders be included in CAC?

Not in acquisition metrics. Customer acquisition cost measures what paid marketing costs you per customer it brought in. A wholesale buyer was won by a sales conversation, a trade show or a referral, not by an ad, so charging them a share of ad spend misstates both the wholesale margin and the D2C margin. Wholesale revenue still belongs in your P&L; it just should not sit in the ad-spend pool.

Why does the calculator say CAC per new customer is unchanged?

Because that figure divides ad spend by new D2C customers, and neither number changes when a wholesale order is reclassified. What changes are the per-order figures (ad cost per order, per-order margin) and the revenue-based ratios (MER, ad cost as a share of revenue). Those are the numbers most dashboards actually show you.

Is equal-per-order allocation realistic?

It is what blended attribution does in most profit tools, MerchantFlow's blended mode included: a day's spend divided across that day's eligible orders. Platform-attributed spend behaves differently, but the wholesale order would then be charged nothing and the same fix applies. The calculator models the blended case over the whole period at once because that is where the distortion hides; the product does it per day, so the two agree exactly only when your daily mix is steady.

My wholesale orders are a tiny fraction of order count. Does this matter?

Check the revenue side. Four distributor orders can be a third of your revenue for the month. The per-order split moves very little in that case, but MER and ad cost as a share of revenue can be off by a large margin, and any MER target you manage to is being measured against the flattered number.

How do I separate wholesale orders in Shopify?

Wholesale orders in Shopify are usually draft orders paid outside checkout. They report the payment method "manual", or the name of a manual payment method such as "Bank Deposit", and many stores tag them "wholesale" with a Shopify Flow. Either signal identifies them reliably, which is what MerchantFlow's automatic detection matches on.

What about a wholesale order placed through the normal checkout?

It syncs looking like any other order, so no rule can catch it. In MerchantFlow you open the order and mark it wholesale by hand; the day's allocations are then recomputed so the other orders' figures move too. Manual classification is never overridden by automatic detection.