How to price wholesale products at cost plus a markup
Cost plus markup in Process Wholesale sets the price a wholesale customer (B2B customer) pays for each eligible item to the item's cost plus a markup percentage you choose: with a cost of 10.00 and a 20% markup, the customer pays 12.00. Process Wholesale reads the cost from the Cost per item field of each variant in Shopify. Create it in the Process Wholesale app under Discounts > Cost-Plus Discounts > Create new Cost-Plus Discount. It applies at Shopify checkout to logged-in customers tagged B2B who carry its discount tag, and it needs the Professional plan.
At a glance
- Plan: Professional. Up to 100 cost plus markup discounts.
- Where: Process Wholesale > Discounts > Cost-Plus Discounts
- Applies to: Logged-in customers tagged
B2Bwho also carry the discount tag - Price: Cost per item × (1 + markup ÷ 100), per unit. Never above the regular price.
- Products without a cost: get no cost plus markup discount
- Applied by: the Shopify automatic discount B2B Cost Plus Markup Discount
Before you start#
- The store is on the Professional plan. On other plans the Cost-Plus Discounts tab shows Upgrade to Professional instead of the create button.
- Every product the discount will cover has a Cost per item in Shopify admin. Process Wholesale checks this when you save.
Steps to create a cost plus markup discount#
- In Shopify admin, open the Process Wholesale app, select Discounts, then the Cost-Plus Discounts tab.
- Select Create new Cost-Plus Discount.
- In Discount tag name, enter the name of the discount, which is also the customer tag that grants it, for example
costplus25. The field starts with a suggested name such asnewcostplusmarkup615. Use lower-case letters and numbers only, and do not includeb2b. - In Markup Percentage, enter the markup ("This will be applied to the cost of the product to determine the final price."). The field starts at 0, takes up to 2 decimals and has no upper limit.
- In Applies to, choose All products, Select individual products (then Select product), Select collections (then Select collection) or Select individual variants (then Select variant).
- Select Save in the save bar. Process Wholesale shows "We're checking to ensure all of the added products have a unit cost set. Please wait a moment" while it checks the costs.
- If every checked variant has a cost, Process Wholesale shows "Discount created". If any checked variant has no cost, the save stops with "Some of the selected products have no unit cost set" and a link to each of those variants in Shopify admin. Add the cost in Shopify, then save again.
- For the first cost plus markup discount in your store, a window "First Cost Plus Markup Discount created" explains that "The first cost plus discount created takes a few moments to take effect due to data sync. Please wait a few minutes before checking." Select Ok, I understand.
- Give the discount tag to customers from the Customers page, by auto-assign on approval, or with Bulk assign discount. See How to assign discounts to wholesale customers.
Validation messages on the cost plus markup form#
| Message | Cause |
|---|---|
| Discount tag name is required. Please enter a discount tag name. | Discount tag name is empty |
| A tier discount with the tag name "x" already exists. Please use a different tag name. | Another cost plus markup discount already uses the name (the message says "tier discount") |
| Markup percent value must be a positive number. | Markup Percentage is not a valid number |
| Selected items are missing. Please select at least one product for individual product discount. | Select individual products with nothing selected (the same message names collection or variant for the other options) |
| Some of the selected products have no unit cost set | A checked variant has no Cost per item |
| Error checking product units costs, please try again later | The cost check could not run; try again |
Where the cost comes from and how it stays in sync#
Process Wholesale uses the Cost per item of each variant in Shopify, in your store currency.
- First discount: when you create the first cost plus markup discount, Process Wholesale copies the cost of every variant in your store. This takes a few minutes.
- Cost changes: when you change a variant's Cost per item in Shopify, Process Wholesale picks up the new cost automatically, and a background sync about once an hour catches up any changes it missed.
- No cost: a variant with no Cost per item gets no cost plus markup discount. The customer pays the regular price for it, unless another wholesale discount applies.
What your customers see#
- On product pages: with the Product Wholesale block, a logged-in customer with a tag that contains
b2band the discount tag sees one row: quantity "Any", the discount and the wholesale price. For a 20.00 product with a cost of 8.00 and a 50% markup, the row reads "Any | $8.00 | $12.00". The theme's own price stays the regular price. - In Quick Buy: customers tagged
B2Bsee the cost plus price in the Quick Buy form, for example 12.00 for a cost of 8.00 and a 50% markup. A variant with no cost shows the regular price. - On the storefront, cost plus markup comes first. When a customer has a cost plus markup discount that covers the product, the Product Wholesale block and Quick Buy show the cost plus price instead of a price list, tier or flat price.
- At checkout: each eligible item gets a discount labeled with
PW :and the discount tag, for examplePW : costplus25.
How cost plus markup is calculated at checkout#
Process Wholesale applies cost plus markup only when the store is on Professional, the customer is logged in (or the order is a draft order with a customer), has the tag B2B in any capitalization, and has the discount tag.
- For each item, Process Wholesale picks the customer's highest-priority cost plus markup discount that covers it (1 is the highest priority).
- Target price = cost × (1 + markup ÷ 100), converted to the customer's currency.
- Discount per unit = the item's price − the target price. When that is 0 or less, the item gets no discount, so cost plus markup never raises a price.
Example. A product sells for 20.00 and its Cost per item is 10.00. With a 20% markup the target price is 10.00 × 1.20 = 12.00, so each unit gets 8.00 off and costs 12.00. Ten units cost 120.00 instead of 200.00.
Example in another currency. The same product, and the customer pays in a currency whose exchange rate is 1.5. The price in that currency is 20.00 and the target price is 12.00 × 1.5 = 18.00, so each unit gets 2.00 off.
Example with no discount. A product sells for 12.00 with a cost of 10.00 and a 20% markup. The target price is 12.00, the same as the price, so there is no discount.
Priority. The Cost-Plus Discounts list has the columns Priority, Customer Tag, Markup, Products, Collections and Manage. Use the arrows to change the order when a customer carries more than one cost plus markup discount.
How cost plus markup combines with other wholesale discounts#
Cost plus markup is applied by its own automatic discount. Under Settings > Discount settings, the card Cost Plus Markup Discount combinations (Professional) sets what it combines with: Product Discounts, Order Discounts and Shipping Discounts, all unchecked by default. The app explains the setting: "If you want normal B2B discounts (flat/tier) to be applied to the same order as a cost plus markup discount, Product discounts must be checked for the main discount combinations, and Order discounts must be checked for cost plus markup discount combinations". See Which wholesale discount applies: priority and stacking rules.
Limits and things to know#
- Professional only. Cost plus markup is not applied at checkout on any other plan, including Enterprise.
- 100 discounts. Professional allows up to 100 cost plus markup discounts; at that number the button on the Cost-Plus Discounts tab reads Discount limit reached. The create form also counts your flat, tier and price list discounts: when all four types together reach 100, the form shows "Professional plans are limited to 100 discounts. Redirecting to discounts." and returns to the Discounts page.
- The cost check covers up to 200 variants. With All products, Process Wholesale checks the first 200 variants in your store. Variants beyond that are not checked when you save, and any of them without a cost get no discount at checkout.
- Markup is not capped. Markup Percentage has no maximum. A markup that brings the price to the regular price or above gives no discount.
- Tag names cannot be changed after saving, and a tag name should not be reused by a discount of another type: a customer who carries the tag gets both discounts.
- Deleting is immediate. Delete has no confirmation step and removes the tag from every customer tagged
B2B. See Editing and deleting wholesale discounts.
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
| "Some of the selected products have no unit cost set" | A covered variant has no Cost per item | Select each linked variant, add its cost in Shopify, and save again. |
| A product gets no cost plus markup discount | It has no cost, cost plus markup is at or above its price, or a higher-priority discount covers it | Check the variant's Cost per item and the markup. |
| The discount uses an old cost | The cost was cleared in Shopify rather than changed | Enter the correct cost in Shopify. |
| The first discount does not apply right away | The first cost copy takes a few minutes | Wait a few minutes and check again. |
| Flat or tier discounts disappear when cost plus markup applies | The combination settings do not allow both | Follow the in-app banner under Settings > Discount settings. |
| The tab shows Upgrade to Professional | The store is not on Professional | Upgrade from Plan in the app. |
Frequently asked questions#
Where does Process Wholesale get the product cost from?#
From the Cost per item field of each variant in Shopify, in your store currency. Process Wholesale copies it when you create your first cost plus markup discount and keeps it up to date when you change it.
What happens to a product with no cost per item?#
It gets no cost plus markup discount, and the customer pays the regular price unless another wholesale discount applies. Saving a cost plus markup discount stops with "Some of the selected products have no unit cost set" when a checked variant has no cost.
Can cost plus markup raise a price above the regular price?#
No. When cost plus markup is at or above the item's price, the item gets no discount and keeps its regular price.
Is the markup a margin?#
No. The markup is added to the cost: a 25% markup on a cost of 40.00 gives 50.00.
Does cost plus markup work on the Enterprise plan?#
No. Cost plus markup needs the Professional plan. Current plan prices are shown on the Shopify plan page that opens from Plan in the app.