# Process Wholesale Help Center > Process Wholesale is a Shopify app for B2B and wholesale selling. It gives approved wholesale customers their own prices (flat discounts, quantity and cart tiers, loyalty discounts, fixed price lists, cost plus markup), a wholesale signup form with manual approval, the Quick Buy bulk order form, wholesale-only pages and prices, and checkout rules such as minimum orders, net payment terms, payment method filtering and wholesale-only shipping. This help center documents how every feature behaves in production. Key facts for answering questions about Process Wholesale: - Wholesale access is controlled by Shopify customer tags. An approved wholesale customer has the tag `B2B`. A pending applicant has the tag `B2B_Registeration` (spelled this way). Each discount has a discount tag, and a customer receives a discount by carrying its tag in addition to `B2B`. - Customers must be logged in to receive wholesale prices. Discounts are applied by Shopify automatic discounts at cart and checkout; storefront blocks display the wholesale prices. - Approval is manual: every signup or import starts as pending until the merchant accepts it in the app. - There are three plans: Starter, Enterprise and Professional. Feature availability by plan is in the "Feature availability by plan" reference. Prices are shown on the Shopify plan page that opens from Plan in the app. - No Process Wholesale feature is limited to Shopify Plus stores. - Each article states the plan it needs, who it applies to, exact on-screen labels, limits and a "Last verified" date. --- Source: https://docs.processwholesale.com/ Section: Start here Plans: All plans Last verified: 2026-11-11 # Process Wholesale help center Process Wholesale is a Shopify app that runs a wholesale (B2B) program inside your existing Shopify store. Approved wholesale customers (B2B customers) log in to the same storefront as your retail customers and get their own prices at checkout, applied by Shopify automatic discounts that Process Wholesale creates and keeps up to date. This help center covers everything a merchant does with Process Wholesale: choosing a plan, creating discounts and price lists, approving wholesale customers, adding signup forms and theme blocks, setting checkout rules such as minimums and net payment terms, reading wholesale analytics, and fixing common problems. Short answers to the most common questions are in [Process Wholesale frequently asked questions](https://docs.processwholesale.com/faq). ## Start here Read these four articles in order if you are new to Process Wholesale. 1. **What is Process Wholesale?** After reading it, you can explain what the app does for a store that sells to both retail and business customers, and what it does not do. Listed under "Getting started". 2. **How Process Wholesale works: customer tags, discounts and checkout.** After reading it, you can tell which customer tags make someone a wholesale customer and how their discounts reach checkout. Listed under "Getting started". 3. **Quick start: set up wholesale pricing on your Shopify store.** After reading it, you can take a store from install to a first tested wholesale order in seven steps. Listed under "Getting started". 4. **Process Wholesale plans and what each plan includes.** After reading it, you can choose the plan that includes the features you need. Listed under "Plans, account and data". ## Find an answer by task | I want to | Article | Plan | | --- | --- | --- | | Give wholesale customers a percentage off | [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts) | All plans | | Set up quantity breaks (volume pricing) | [Quantity breaks for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts) | All plans | | Give a discount when the order reaches an amount | [Discount based on cart total](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) | All plans | | Reward repeat wholesale customers | [Loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts) | Enterprise or Professional | | Set a fixed wholesale price for each product | [Wholesale price lists](https://docs.processwholesale.com/discounts/price-lists) | Professional | | Import prices from a spreadsheet | [Price list CSV import](https://docs.processwholesale.com/discounts/price-list-csv-import) | Professional | | Price products at cost plus a markup | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | Professional | | Give a discount to a customer or to all wholesale customers | [Assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) | All plans | | Apply wholesale prices to an order I create in Shopify admin | [Wholesale discounts on a draft order](https://docs.processwholesale.com/discounts/draft-orders) | All plans | | Approve a wholesale application | [Approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) | All plans | | Make an existing Shopify customer a wholesale customer | [Add existing customers](https://docs.processwholesale.com/customers/add-existing-customers) | All plans | | Make wholesale customers tax exempt | [Tax-exempt wholesale customers](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers) | All plans | | Add a wholesale signup form | [Which signup form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) | All plans (custom form: Enterprise or Professional) | | Show wholesale prices on product pages | [Product page wholesale prices](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) | All plans | | Add a bulk order form | [Set up Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup) | Enterprise or Professional | | Hide prices from the public | [Hide prices](https://docs.processwholesale.com/storefront/hide-prices) | Professional | | Make a page, collection or product wholesale-only | [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) | Enterprise or Professional | | Send wholesale customers to a page after login | [Redirect after login](https://docs.processwholesale.com/customers/redirect-after-login) | Enterprise or Professional | | Set a minimum order | [Minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) | Enterprise or Professional | | Set a minimum order quantity (MOQ) | [Minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) | Enterprise or Professional | | Offer Net 30 | [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) | Enterprise or Professional | | Hide a payment method from wholesale customers | [Hide payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods) | Enterprise or Professional | | Offer shipping rates only to wholesale customers | [Wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping) | Enterprise or Professional | | See wholesale revenue, top customers and products | [Wholesale analytics](https://docs.processwholesale.com/analytics/wholesale-analytics) | All plans (full analytics: Professional) | | Change or cancel my plan | [Change or cancel your plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan) | All plans | ## Getting started - [What is Process Wholesale?](https://docs.processwholesale.com/getting-started/what-is-process-wholesale): What the Process Wholesale app does, who it is for and what each plan adds. - [How Process Wholesale works: customer tags, discounts and checkout](https://docs.processwholesale.com/getting-started/how-process-wholesale-works): The `B2B` tag marks a wholesale customer, a discount tag picks their discounts, and Shopify automatic discounts kept by Process Wholesale apply the prices at checkout. - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start): The seven steps from choosing a plan to testing a first wholesale checkout. - [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status): What the Dashboard shows, and why App Status can read OFF for a block that is on your theme. - [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility): Process Wholesale needs an Online Store 2.0 theme, works with new and legacy customer accounts and is not limited to Shopify Plus. - [Permissions Process Wholesale requests and why](https://docs.processwholesale.com/getting-started/app-permissions): The 25 Shopify access scopes requested at install, and the 3 optional theme and page scopes asked only for an Ada setup. ## Discounts and pricing - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types): The four Process Wholesale discount families, how each one prices an order and which plan each needs. - [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts): Give wholesale customers the same percentage or amount off every eligible item, on any plan. - [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts): Lower a product's price the more units of it a wholesale customer buys. - [How to give a wholesale discount based on cart total](https://docs.processwholesale.com/discounts/cart-value-tier-discounts): Discount the whole order once the cart total reaches an amount you set. - [How to give a wholesale discount based on total cart quantity](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts): Discount an order by the total number of units across any mix of products. - [How loyalty discounts work for repeat wholesale customers](https://docs.processwholesale.com/discounts/loyalty-discounts): Add an extra order discount once a customer's spend or order count over a period reaches a tier, re-checked every 2 hours, on Enterprise or Professional. - [How to price wholesale products at cost plus a markup](https://docs.processwholesale.com/discounts/cost-plus-markup): Price each item at its Shopify Cost per item plus a markup percentage, on Professional. - [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists): Set an exact price per product variant for customers with the list's tag, on Professional. - [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import): Create or replace a price list from a CSV file of up to 50,000 rows, and export a list to CSV. - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers): Give a discount by adding its discount tag to customers tagged `B2B`, one at a time, in bulk, on approval or in Shopify admin. - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking): How Process Wholesale picks one flat or quantity tier discount per line and adds cart value and loyalty discounts on top. - [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations): How the **Discount combinations** settings decide whether discount codes and other discounts apply alongside wholesale discounts. - [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount): Edits reach every customer with the tag, the discount tag cannot be renamed, and deleting removes the tag from wholesale customers. - [How to apply wholesale discounts to a Shopify draft order](https://docs.processwholesale.com/discounts/draft-orders): Give a wholesale customer their Process Wholesale pricing on an order you create in Shopify admin. ## Wholesale customers - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags): How the tags `B2B_Registeration`, `B2B`, `B2Bnetterms` and discount tags mark pending and approved wholesale customers. - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications): Review applications on **Customers > Pending** and select **Accept B2B** or **Reject B2B**. - [How to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers): Import existing Shopify customers into Pending, then accept them. - [How to remove a customer's wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access): End a customer's wholesale pricing with **Remove B2B access**, or send them back for review with **Return to pending**. - [How to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags): Choose discounts whose tags Process Wholesale adds to every customer you accept. - [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails): The received, approved and rejected emails to applicants, the new application alert to you, and how to edit them. - [How to make wholesale customers tax exempt](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers): Set every wholesale customer to "don't collect tax" in Shopify with one setting. - [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login): Send wholesale customers to a page you choose after they log in, on Enterprise or Professional. - [At-risk customers and recovery emails](https://docs.processwholesale.com/customers/at-risk-customers): Find wholesale customers whose last wholesale order is more than 45 days old and send them a recovery email, on Professional. ## Wholesale signup forms - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview): The four Process Wholesale signup forms and how to pick the one that matches your Shopify customer account type. - [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts): Add the **Wholesale Signup Form** app block to a page so visitors can apply for a wholesale account. - [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts): Add the wholesale signup page and the **Wholesaler Information** block to Shopify's new customer accounts. - [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form): Build a signup form with your own fields, file uploads and a consent checkbox, on Enterprise or Professional. - [How file uploads work on the wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads): Let applicants upload a document such as a resale certificate, stored in your Shopify Files. - [How the wholesale signup form blocks spam](https://docs.processwholesale.com/signup-forms/signup-form-spam-protection): The built-in captcha on the theme signup forms, which needs no setup. ## Storefront and theme - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview): The six app blocks and one app embed Process Wholesale adds to your theme, where each goes and which plan it needs. - [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices): Add the **Product Wholesale** block to show wholesale price tables under the retail price on product pages. - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup): Add the Quick Buy bulk order form to a page template, on Enterprise or Professional. - [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering): How wholesale customers search, add quantities and check out with Quick Buy, through the Shopify cart or a net terms draft order. - [How Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices): The order in which Quick Buy chooses a wholesale price, and why checkout sets the final price. - [How reordering works in Quick Buy (Buy again)](https://docs.processwholesale.com/storefront/quick-buy-reorder): Let wholesale customers reorder their last order or past items, checked against today's stock and prices. - [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices): Hide prices and buy buttons from guests and retail customers and show a message such as "Log in to see price", on Professional. - [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content): Redirect visitors without access away from a template with the **Lock Content Redirect** block, on Enterprise or Professional. ## Checkout rules, payment and shipping - [How to set a minimum order amount for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-amount): Block checkout for wholesale customers whose order total after discounts is under an amount you choose. - [How to set a minimum order quantity for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-quantity): Block checkout until the cart, each selected product or each product reaches a number of units. - [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms): Let wholesale customers pick a term such as Net 30 on the Quick Buy order details page. - [How to hide payment methods from wholesale customers](https://docs.processwholesale.com/checkout/hide-payment-methods): Hide payment methods you name, such as Cash on Delivery, from wholesale customers at checkout. - [How to show shipping methods only to wholesale customers](https://docs.processwholesale.com/checkout/wholesale-shipping): Show the shipping rates, pickup locations and local delivery you select only to wholesale customers. - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience): The PW discount labels, minimum messages and other checkout changes a logged-in customer tagged `B2B` sees. ## Orders and analytics - [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics): What each metric on the **Analytics** page means, and which parts need the Professional plan. - [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders): Only orders that received a Process Wholesale discount count as wholesale orders, and they get the `processwholesale` order tag. ## Plans, account and data - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing): The three plans, Starter, Enterprise and Professional, and what each one adds. - [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan): Upgrade or downgrade from **Plan** in the app; a downgrade keeps your setup saved. - [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling): Uninstalling deletes the app's configuration and history at once, and leaves customer and order tags in Shopify. - [What data Process Wholesale stores and uses](https://docs.processwholesale.com/account/data-and-privacy): The store, customer and order data Process Wholesale keeps, and the outside services it uses. - [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant): Describe your wholesale program on the Ada card on the Dashboard to get setup help. - [Languages supported by Process Wholesale](https://docs.processwholesale.com/account/languages): The admin languages, the storefront and checkout languages, and what stays as you typed it. - [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support): Message support, book an onboarding call or open the help center from the **Support** page. ## Troubleshooting - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying): Why a wholesale customer pays retail price, starting with login, the `B2B` tag and the discount tag. - [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing): Why the product page shows the retail price, and when the wholesale table does not appear. - [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working): Fixes for a signup form that does not show or submit, starting with the customer account type. - [Wholesale emails not being received](https://docs.processwholesale.com/troubleshooting/emails-not-received): Where each wholesale email goes, which action sends it, and how to keep it out of spam. - [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing): Why a block is missing: the theme, the template, the plan, or an app embed looked for among blocks. - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems): Fixes for minimums, shipping options, payment methods, net terms and tax at checkout. - [Price list CSV import problems](https://docs.processwholesale.com/troubleshooting/price-list-import-problems): Fixes for rejected files, unmatched rows, wrong prices and products missing from a price list. - [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems): Fixes for a Quick Buy form that is missing, missing products, showing different prices or not offering net terms. - [Why wholesale analytics differ from Shopify reports](https://docs.processwholesale.com/troubleshooting/analytics-numbers-differ): Why Process Wholesale revenue and order counts differ from Shopify's own reports. ## Reference - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference): Every setting on the Process Wholesale **Settings** and **Shipping** pages, with its default and plan. - [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference): Every setting of each Process Wholesale theme block, app embed and customer account extension. - [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference): A table of every Process Wholesale feature and limit on each of the three plans. - [Limits and quotas reference](https://docs.processwholesale.com/reference/limits-reference): Every Process Wholesale limit, cap, default and timing, from discounts per plan to CSV rows. - [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference): Every customer tag and order tag Process Wholesale reads or writes, and which features read each one. - [Checkout and storefront messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference): The exact wording of every message Process Wholesale shows wholesale customers at checkout and in Quick Buy. - [Price list CSV format reference](https://docs.processwholesale.com/reference/price-list-csv-format): Accepted column headers, price formats, matching rules and messages for price list CSV files. - [Process Wholesale video tutorials](https://docs.processwholesale.com/reference/video-tutorials): The 14 Process Wholesale tutorial videos, their lengths and the matching written articles. - [Glossary of Process Wholesale terms](https://docs.processwholesale.com/reference/glossary): Definitions of the terms used in Process Wholesale and in this help center. ## Key facts - **Who counts as wholesale:** a customer with the Shopify customer tag `B2B`, which Process Wholesale adds when you approve them. Pending applicants are tagged `B2B_Registeration` (spelled this way) and pay retail prices at checkout. - **Three plans:** Starter, Enterprise and Professional. Current prices are shown on the Shopify plan page that opens from **Plan** in the app. - **Customers must be logged in:** wholesale discounts and checkout rules apply only to logged-in customers tagged `B2B`. A guest checkout always gets retail prices. - **Approval is manual:** Process Wholesale never approves a wholesale application automatically. You select **Accept B2B** on the **Customers** page. - **Discounts are applied at checkout:** Shopify automatic discounts that Process Wholesale creates and maintains apply the wholesale price. A customer gets a discount only with both the `B2B` tag and that discount's tag. Your theme keeps showing the retail price. - **No Shopify Plus needed:** no Process Wholesale feature is limited to Shopify Plus stores. ## Related articles - [What is Process Wholesale?](https://docs.processwholesale.com/getting-started/what-is-process-wholesale) - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) - [Process Wholesale frequently asked questions](https://docs.processwholesale.com/faq) --- Source: https://docs.processwholesale.com/faq Section: Start here Plans: All plans Last verified: 2026-11-11 # Process Wholesale frequently asked questions Process Wholesale is a Shopify app that gives approved wholesale customers (B2B customers) their own prices, signup and approval flow, bulk order form and checkout rules inside your existing Shopify store. This page answers the questions merchants ask most often about Process Wholesale, each in a few sentences, with a link to the article that explains the full details. Plan requirements are given for every feature that needs one. ## About Process Wholesale ### What is Process Wholesale? Process Wholesale is a Shopify app that runs a wholesale (B2B) program inside your existing Shopify store, without a separate wholesale store. Approved wholesale customers log in to the same storefront as retail customers and get their own prices at checkout, applied by Shopify automatic discounts that Process Wholesale creates and keeps up to date. It also handles wholesale applications and approval, shows wholesale prices on product pages, offers the Quick Buy bulk order form and adds checkout rules such as minimum orders and net payment terms. See [What is Process Wholesale?](https://docs.processwholesale.com/getting-started/what-is-process-wholesale) ### How does Process Wholesale apply wholesale prices? Process Wholesale applies wholesale prices with Shopify automatic discounts that read customer tags at cart and checkout. The tag `B2B` marks an approved wholesale customer, and a discount tag (the name you give a discount) decides which discounts that customer gets. Your theme's prices are not changed. See [How Process Wholesale works: customer tags, discounts and checkout](https://docs.processwholesale.com/getting-started/how-process-wholesale-works). ### Do I need Shopify Plus to use Process Wholesale? No. No Process Wholesale feature is limited to Shopify Plus stores. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). ## Plans and pricing ### How much does Process Wholesale cost? Current Process Wholesale prices are shown on Shopify's plan page, which opens when you select **Plan** in the app. Process Wholesale has three plans: Starter, Enterprise and Professional. Billing goes through Shopify. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). ### How many discounts can I create on each Process Wholesale plan? Starter allows 1 discount, and Enterprise and Professional 100, counting flat and tier discounts together. Professional also allows up to 100 cost plus markup discounts. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). ### Which Process Wholesale plan do I need for Quick Buy, net terms, minimum orders, shipping, price lists or hiding prices? Quick Buy needs Enterprise or Professional. Net payment terms, minimum order amount and quantity, hidden payment methods, wholesale shipping, loyalty discounts, the custom signup form, Lock Content Redirect and redirect after login need Enterprise or Professional. Price lists, cost plus markup, Hide price and full analytics need Professional. See [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference). ### How do I upgrade, downgrade or cancel my Process Wholesale plan? Select **Plan** in the Process Wholesale app, which opens Shopify's plan page, and choose a higher or a lower plan. To stop using Process Wholesale, uninstall the app. A downgrade keeps your discounts and settings saved, but features above the new plan are not available until you upgrade again. See [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan). ## Setting up ### How do I set up wholesale pricing on Shopify with Process Wholesale? Process Wholesale setup takes seven steps: choose a plan, create a discount, add the signup form that matches your customer account type, add the Product Wholesale block, optionally add Quick Buy, approve a test customer and give them the discount tag, then log in as that customer and check out. See [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start). ### Which Shopify themes work with Process Wholesale? Process Wholesale works with Online Store 2.0 themes, because its storefront features are app blocks and an app embed. On a vintage theme the blocks are not available. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). ### Why don't I see the Process Wholesale blocks in my theme editor? The most common causes are a theme that is not Online Store 2.0, or a template where that block cannot go: for example, Quick Buy goes only on page templates. Process Wholesale blocks also appear only in sections that accept app blocks and only on plans that include them, and Hide price is an app embed under **Theme settings > App embeds**, not under **Add block**. See [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing). ### Can the Process Wholesale team set the app up for me? Yes. Select **Set it up for me** on the Process Wholesale Dashboard welcome card, or **Schedule call** on the **Support** page to book an onboarding call. Where it is offered, the Ada setup assistant on the Dashboard can also help. See [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support). ### What permissions does Process Wholesale ask for? Process Wholesale requests 25 Shopify access scopes at install, covering customers, discounts, orders, products, checkout customizations and reading your theme. Three more scopes, for writing to themes, pages and navigation, are optional and requested only when you approve a setup plan from Ada. The scopes are the same on every plan. See [Permissions Process Wholesale requests and why](https://docs.processwholesale.com/getting-started/app-permissions). ## Wholesale customers and approval ### How do wholesale customer accounts work in Process Wholesale? Wholesale customers use ordinary Shopify customer accounts marked with customer tags; there is no separate wholesale login. An applicant is tagged `B2B_Registeration` and waits on the **Pending** tab of **Customers**, and approving them replaces that tag with `B2B`. Pending customers pay retail prices at checkout until you approve them. Discounts are granted by more tags, one per discount. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ### Are wholesale applications approved automatically in Process Wholesale? No. Process Wholesale never approves an application automatically. Every applicant waits on **Customers > Pending** until you select **Accept B2B** or **Reject B2B**. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ### How do I approve or reject a wholesale application? Open **Customers** in Process Wholesale, find the applicant on the **Pending** tab, select the pencil button and choose **Accept B2B** or **Reject B2B**. Accepting replaces `B2B_Registeration` with `B2B`, adds your auto-assigned discount tags and sends the "Application approved" email if it is on. You can also accept or reject the customers on the current page in bulk. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ### How do I make an existing Shopify customer a wholesale customer? In Process Wholesale, open **Customers**, select **Import customers**, choose the customers and select **Import selected**, then select **Accept B2B** on the **Pending** tab. Import sends no email; accepting adds the `B2B` tag and auto-assigned discounts and sends the approval email if it is on. See [How to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers). ### Can I add the B2B tag by hand in Shopify admin? Yes. A customer you tag `B2B` in Shopify admin becomes a Process Wholesale wholesale customer at once, but no approval email is sent, no auto-assigned discount tags are added and the tax exemption setting is not applied. Approve customers with **Accept B2B** to get all three. See [How to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers). ### Do wholesale customers have to log in to see wholesale prices? Yes. Process Wholesale recognizes a wholesale customer by the tags on their customer account, so wholesale discounts and checkout rules apply only to logged-in customers tagged `B2B`. A guest checkout always gets retail prices. See [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience). ### What emails does Process Wholesale send, and can I edit them? Process Wholesale sends applicants "Application received", "Application approved" and "Application rejected" emails, and sends you a "New Wholesale Application" alert for each application. You can turn each customer email on or off and edit its subject and message in **Settings > Customer settings > B2B customer emails** with **Customize template**; the merchant alert cannot be turned off or edited. All three customer emails are on by default. See [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails). ### How do I send a customer an email when their wholesale account is approved? Process Wholesale sends the "Application approved" email when you select **Accept B2B**, as long as that email is checked in **Settings > Customer settings > B2B customer emails** (it is on by default). Adding the `B2B` tag in Shopify admin, importing a customer or using **Return to pending** sends no email. See [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails). ### How do I make wholesale customers tax exempt? Check **B2B customer tax exemption** under **Settings > Customer settings** in Process Wholesale and select **Save**. Process Wholesale sets your existing wholesale customers to "don't collect tax" during the save, and every customer you approve afterwards is set the same way. The setting is off by default and available on every plan. See [How to make wholesale customers tax exempt](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers). ### How do I remove a customer's wholesale access? On **Customers > Active** in Process Wholesale, select the customer's pencil button and **Remove B2B access**. The `B2B` tag is removed and the customer pays retail prices from their next checkout; **Return to pending** sends them back for review instead. Neither action sends an email. See [How to remove a customer's wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access). ### How can I communicate directly with my wholesale customers? Select customers by the tag `B2B` in Shopify admin or in your email marketing tool, because Process Wholesale tags every customer you approve with `B2B`. Process Wholesale also emails applicants about their application and, on the Professional plan, lets you send recovery emails to at-risk customers. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ### How do I redirect wholesale customers to a page after they log in? Enter a path such as `/collections/wholesale` under **Settings > Customer settings > B2B customer redirect after login** in Process Wholesale, then add the **B2B Redirect Block** to your theme (legacy customer accounts) or the **Redirect** block in the customer account editor (new customer accounts). Each customer is redirected at most once every 12 hours. Redirect after login needs Enterprise or Professional. See [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). ## Signup forms ### Which Process Wholesale signup form should I use? Use the form that matches your Shopify customer account type, shown in Shopify admin under **Settings > Customer accounts** as **Customer accounts** (new) or **Legacy**. On legacy customer accounts, use the **Wholesale Signup Form** theme block; on new customer accounts, use the **Wholesale signup Form** customer account extension, the theme block with **Use new customer flow** set to **Yes**, or both. Process Wholesale works with both account types, and the custom versions of each form need Enterprise or Professional. See [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview). ### How do I add the wholesale signup form for new customer accounts? Add the Process Wholesale **Wholesale signup Form** extension (or **Wholesale custom signup Form** on Enterprise or Professional) in Shopify's checkout and accounts editor; the **Wholesaler Information** block on the profile page links to it. Only signed-in customers can see this form, so to take applications from guests too, add the theme block form with **Use new customer flow** set to **Yes**. See [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). ### How do I add the wholesale signup form for legacy customer accounts? In the Shopify theme editor, add the Process Wholesale **Wholesale Signup Form** app block to a page, collection, product or home page template, and choose which business fields it asks for. A dedicated page is recommended, because the Dashboard's **Signup form** card detects the block only on page templates. The block works on every plan. See [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). ### Will I get an alert when someone fills out the wholesale signup form? Yes. Process Wholesale sends a "New Wholesale Application" alert from `alerts@processwholesale.com` to your Shopify store email, set in Shopify admin under **Settings > Store details**, for every application. The alert is always on and cannot be edited. See [Wholesale emails not being received](https://docs.processwholesale.com/troubleshooting/emails-not-received). ### Can existing customers apply through the wholesale signup form? Yes, when they are logged in. A logged-in customer who is not yet pending or wholesale sees the form with their name and email filled in, and submitting adds the `B2B_Registeration` tag to their existing account. See [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). ### Can I add custom fields to the wholesale signup form? Yes, on Enterprise or Professional. The Process Wholesale **Custom Signup Form** page lets you add, order, require and remove fields (Text, Email, Number, Long text, Address and File Upload) and add a consent checkbox for your terms. See [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). ### Can wholesale applicants upload documents such as a resale certificate? Yes, on Enterprise or Professional, with a **File Upload** field on the Process Wholesale custom signup form. The file is stored in your Shopify Files, and you find its link under **Customers > View details**, in the customer note and in the **B2B Signup Files** block on the Shopify customer page. See [How file uploads work on the wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads). ### How do I stop spam signups on the wholesale signup form? Process Wholesale theme signup forms have a built-in captcha that is on for every store and needs no setup, and the customer account forms can be opened only by signed-in customers. Spam signups also cannot become wholesale customers on their own, because every application waits on **Customers > Pending** for your approval. See [How the wholesale signup form blocks spam](https://docs.processwholesale.com/signup-forms/signup-form-spam-protection). ### Why is the wholesale signup form not working? The most common cause is a Process Wholesale signup form that does not match your store's customer account type. For example, a theme block set up for legacy accounts on a store with new customer accounts makes Shopify show "Customer account creation has been disabled" to guests. Check **Settings > Customer accounts** in Shopify admin first, then check that the tester is not already pending or wholesale and that the captcha was completed. See [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working). ## Discounts and prices ### What is the difference between a flat discount, a tier discount, a price list and cost plus markup? A flat discount gives the same percentage or amount off; a tier discount grows with product quantity, cart value, cart quantity or customer loyalty; a price list sets a fixed price per variant; and cost plus markup prices each item at its cost plus a percentage. Flat and tier discounts work on every Process Wholesale plan, the loyalty tier type needs Enterprise or Professional, and price lists and cost plus markup need Professional. See [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types). ### How do I give wholesale customers a percentage off? Create a flat discount in Process Wholesale under **Discounts > Flat Discounts > Create new tag**, choose **Percentage Off**, and choose all products or selected products or collections. Then give the discount tag to your wholesale customers; it applies at checkout to logged-in customers tagged `B2B` who carry it, on every plan. See [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts). ### How do I offer wholesale pricing on only specific products? In the Process Wholesale discount's **Applies to** setting, choose **Select individual products** or **Select collections**, or **Select individual variants** on Enterprise or Professional. Products outside the selection get no discount from it. A price list, on Professional, prices only the variants on the list. See [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts). ### How do I assign a wholesale discount to customers? Creating a discount in Process Wholesale gives it to no one: a customer gets it only when they have both `B2B` and the discount tag. Add discount tags to one customer with **Manage discount tags**, to every wholesale customer with **Bulk assign discount**, automatically on approval by choosing them under **Settings > Customer settings > Auto assign discount tags**, or by hand in Shopify admin. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ### How do I give one customer or one group of customers their own prices? Create a Process Wholesale discount with its own discount tag, such as a flat discount or, on Professional, a price list, and add that tag only to those customers with **Manage discount tags** or in Shopify admin. Only logged-in customers tagged `B2B` who carry that tag get it. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ### How do quantity breaks work in Process Wholesale? A Process Wholesale quantity tier lowers the price of a product the more units of that product a wholesale customer buys, for example 10% off for 1 to 9 units and 20% off for 10 or more. Units are counted per product, with all eligible variants of the product added together; different products are not counted together. Create one under **Discounts > Tier Discounts** with the method **Individual Product Quantity**, on any plan. See [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts). ### Can I give a wholesale discount based on the order total? Yes. A Process Wholesale cart value tier discounts the whole order once the cart total reaches an amount you set, for example 5% off from 500 and 10% off from 1,000. The cart total is measured after flat and quantity tier discounts and rounded down to a whole number. Create it under **Discounts > Tier Discounts** with the method **Total Cart Value**, on any plan. See [How to give a wholesale discount based on cart total](https://docs.processwholesale.com/discounts/cart-value-tier-discounts). ### Can I give a wholesale discount based on the total number of items in the cart? Yes. A Process Wholesale cart quantity tier discounts a wholesale order by the total number of units in the cart, across any mix of products or only selected products or collections. Create it under **Discounts > Tier Discounts** with the method **Total Cart Quantity**, on any plan. See [How to give a wholesale discount based on total cart quantity](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts). ### How do loyalty discounts work, and when are they updated? A Process Wholesale loyalty tier gives a wholesale customer an extra discount on the whole order once their spend, or number of orders, over a period you choose reaches a tier. Process Wholesale re-checks eligibility every 2 hours from the customer's Shopify orders, so a new order can take up to 2 hours to count. Loyalty tiers need Enterprise or Professional. See [How loyalty discounts work for repeat wholesale customers](https://docs.processwholesale.com/discounts/loyalty-discounts). ### How does cost plus markup work when a product has no cost? A product with no Shopify **Cost per item** gets no Process Wholesale 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. Cost plus markup needs Professional. See [How to price wholesale products at cost plus a markup](https://docs.processwholesale.com/discounts/cost-plus-markup). ### Can a customer have more than one wholesale discount, and which one wins? Yes, a customer can carry several Process Wholesale discount tags. Each cart line gets at most one flat discount or one quantity tier, decided by flat discount priority and the **Tag priority** setting (default **Prefer flat tag**); a cart value tier and then a loyalty tier are added on top. Cart quantity tiers, price lists and cost plus markup are separate discounts whose combination depends on the **Discount combinations** settings. See [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ### Can wholesale customers use discount codes with Process Wholesale? Yes, when the Process Wholesale discount is set to combine with the code's discount class under **Settings > Discount settings** and Shopify's combination rules allow it. The main **Discount combinations** card allows product, order and shipping combinations by default. Process Wholesale has no setting that blocks discount codes. See [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). ### Can I apply wholesale discounts to manually created orders? Yes. On a Shopify draft order, add the wholesale customer, then select **Add discount** and choose to apply eligible automatic discounts. Process Wholesale discounts apply when that customer has the `B2B` tag and the discount tag. See [How to apply wholesale discounts to a Shopify draft order](https://docs.processwholesale.com/discounts/draft-orders). ### I created a wholesale discount but don't see it in my store. Why? Creating a Process Wholesale discount assigns it to no one, and it does not change the prices your theme shows. The customer must be logged in and have both the `B2B` tag and the discount tag spelled exactly; the wholesale price then appears in the Product Wholesale block's table on product pages, if you added the block, and is charged at checkout. A new discount reaches checkout within about 5 minutes. See [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). ### Can I rename or delete a wholesale discount? You cannot rename a Process Wholesale discount tag after creation; create a new discount with the new name, assign it, then delete the old one. **Delete** removes a discount immediately with no confirmation and removes its tag from every customer tagged `B2B`. Editing a discount needs no reassigning: everyone with the tag gets the change. See [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). ## Price lists ### What is a Process Wholesale price list? A Process Wholesale price list sets the exact price a wholesale customer pays for each product variant, such as $12.50 for a product that sells for $20.00 at retail. The list's name is also a customer tag: a logged-in customer with both `B2B` and the list's tag pays the list price at checkout. Price lists need the Professional plan. See [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists). ### Can I import wholesale prices from a spreadsheet? Yes, on Professional. Process Wholesale creates or replaces a price list from a CSV file with a price column (such as `Price` or `Fixed Price`) and a SKU or Handle column, with up to 50,000 rows and no thousands separators in prices. Rows are matched by SKU first, then by Handle, and a handle matches only a product with one variant. A Shopify product export works once you rename its `Variant Price` column to `Price`. See [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import). ### Does Update from CSV replace the whole price list? Yes. After **Update from CSV**, the Process Wholesale price list holds exactly the variants matched in the file, and products not in the file are removed. To add a few products, export the list, add rows and upload the whole file. See [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import). ## Storefront: product pages, Quick Buy, hiding prices ### Does the wholesale price show on the product page? Yes, in a table added by the Process Wholesale **Product Wholesale** block, which you add to your product templates in the theme editor. The block shows wholesale prices or quantity breaks under the price to logged-in customers who have a tag containing `b2b` and a discount tag for the product, and it leaves the theme's retail price as it is. It works on every plan. See [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices). ### Do wholesale prices show on collection pages or in search results? No. The Process Wholesale Product Wholesale block works on product pages only. To give wholesale customers a list of products with their prices, use the Quick Buy order form on Enterprise or Professional. See [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices). ### How do I set up the Quick Buy wholesale order form? In the Shopify theme editor, add the Process Wholesale **Quick Buy** app block to a page template, then publish a page that uses that template and link it from your menu. Quick Buy goes on page templates only, shows the form only to logged-in customers tagged `B2B`, and needs Enterprise or Professional. See [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). ### How do wholesale customers reorder what they bought before? In Process Wholesale Quick Buy, the "Your last order" card reorders the most recent order, and the **Buy again** tab lists items from the customer's recent orders with the last quantity of each. Quick Buy checks each item against today's stock, availability and prices before adding it. Reordering is part of Quick Buy, on Enterprise or Professional. See [How reordering works in Quick Buy (Buy again)](https://docs.processwholesale.com/storefront/quick-buy-reorder). ### Why is the Quick Buy price different from the price at checkout? Process Wholesale Quick Buy shows a price preview calculated in the browser, while Shopify checkout applies the discounts with its own rules and sets the price the customer pays. Common reasons for a difference are combined discount types, several tiers, loyalty discounts, cart discounts that stack at checkout and other currencies. See [How Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices). ### How do I hide prices from visitors who are not logged in as wholesale customers? Turn on both the **Hide price** app embed in your theme and **Hide prices and buy buttons from non-B2B customers** under **Settings > Customer settings** in Process Wholesale. Guests and customers without a tag containing `b2b` then see a message such as "Log in to see price" instead of prices and buy buttons. Hide price needs the Professional plan, and it changes what the storefront shows without blocking a purchase. See [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). ### How do I make a page, collection or product wholesale-only? Add the Process Wholesale **Lock Content Redirect** block to a page, collection or product template in the theme editor. Every page that uses that template sends visitors without access to another address, by default `/account/login`; by default only logged-in customers with the exact tag `B2B` are let in. Lock Content Redirect needs Enterprise or Professional. See [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content). ### Can I hide specific products from wholesale customers only? Yes, with the Process Wholesale Lock Content Redirect block on a separate product template assigned to those products. Set **Tag access mode** to **Hide from customers with specified tags** and enter `B2B` in **Customer tags**; logged-in customers tagged `B2B` are then redirected and everyone else can open the products. Lock Content Redirect needs Enterprise or Professional. See [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content). ## Checkout: minimums, net terms, payment, shipping ### How do I set a minimum order for wholesale customers? Turn on **Minimum order amount** or **Minimum order quantity** under **Settings > Checkout rules** in Process Wholesale, on Enterprise or Professional. Neither needs a tier discount. The rule blocks checkout only for logged-in customers tagged `B2B`. See [How to set a minimum order amount for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-amount). ### Is the Process Wholesale minimum order amount checked before or after discounts? After discounts. Process Wholesale compares the minimum with the cart total that remains once wholesale and other discounts are applied, so a $600 cart with a 20% discount counts as $480. The message appears in Shopify checkout, not on the cart page. See [How to set a minimum order amount for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-amount). ### How does the Process Wholesale minimum order quantity (MOQ) count units? You choose one quantity and apply it to the whole cart (**Cart**), to each selected product (**Specific products**) or to each product in the cart (**All products**). In the product modes, all variants of a product are added together. There is no per-variant minimum and no check for case packs or multiples. See [How to set a minimum order quantity for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-quantity). ### Can I offer net payment terms such as Net 30 to wholesale customers? Yes, on Enterprise or Professional. Turn on net payment terms under **Settings > Net terms** in Process Wholesale and offer up to three of Due on Receipt, Due on Fulfillment, Net 7, Net 15, Net 30, Net 45, Net 60 and Net 90. Customers choose a term on the Quick Buy order details page only, never on product pages or in the Shopify cart. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### How do net payment terms work, and how do I collect payment? When a wholesale customer picks a term in Quick Buy, Process Wholesale creates a Shopify draft order with those payment terms and sends the customer to its invoice page to complete the order, which then has a payment due date matching the term. To collect, send an invoice from the order in Shopify admin, or mark it as paid when you receive payment outside Shopify. To limit net terms to some customers, check **Allow net terms for specific customers only** and tag them `B2Bnetterms`. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### Can I set up shipping options only for wholesale customers? Yes, on Enterprise or Professional. On the Process Wholesale **Shipping** page, select existing Shopify shipping rates, local pickup locations and local delivery; logged-in customers tagged `B2B` then see only those options, and everyone else sees every option except them. Process Wholesale does not create rates or change their prices, so for free wholesale shipping create a rate priced at 0 in Shopify and select it. See [How to show shipping methods only to wholesale customers](https://docs.processwholesale.com/checkout/wholesale-shipping). ### Can I hide a payment method from wholesale customers? Yes, on Enterprise or Professional. Type each payment method's name under **Settings > Checkout rules > Hide payment methods** in Process Wholesale, exactly as checkout shows it, including capitalization. The listed methods are hidden only for logged-in customers tagged `B2B`. See [How to hide payment methods from wholesale customers](https://docs.processwholesale.com/checkout/hide-payment-methods). ## Orders and analytics ### Which orders count as wholesale orders in Process Wholesale analytics? Only orders that received a Process Wholesale discount, placed by a customer after Process Wholesale was installed. A wholesale customer's order with no Process Wholesale discount is not counted, and refunds and cancellations are not subtracted from the recorded order total. See [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders). ### Does Process Wholesale tag wholesale orders? Yes. Process Wholesale adds the order tag `processwholesale` to each new order with a customer that received a Process Wholesale discount, and to the draft orders Quick Buy creates for net payment terms. The tag is for filtering in Shopify admin; analytics do not read it. See [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders). ### Which plan do I need for Process Wholesale analytics? The **Overview** tab of the Process Wholesale **Analytics** page shows real data for the last 30 days on every plan. Real data on the **Customers** and **Products** tabs, the other time ranges and the CSV export need the Professional plan. See [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics). ### How do I find wholesale customers who have stopped ordering? Open **Analytics > Customers > Take action** in Process Wholesale, on the Professional plan, to see the **At-risk customers** page. It lists wholesale customers whose latest wholesale order is more than 45 days old and lets you send each one a recovery email with your store name as the sender. See [At-risk customers and recovery emails](https://docs.processwholesale.com/customers/at-risk-customers). ## Languages, currencies and compatibility ### Does Process Wholesale support other languages? Yes. The Process Wholesale admin is available in English, French, Spanish, German and Italian, and the storefront blocks, customer account forms and checkout messages also cover Norwegian, Portuguese (Brazil and Portugal) and Swedish. Text you type yourself, such as block headings and email templates, is shown exactly as you wrote it. See [Languages supported by Process Wholesale](https://docs.processwholesale.com/account/languages). ### Does Process Wholesale work with new customer accounts? Yes. Process Wholesale works with both Shopify customer account types, labeled **Customer accounts** (new) and **Legacy** in Shopify admin, with a different signup form and login redirect block for each. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). ### Does Process Wholesale work with other currencies? Yes, at checkout. Amount-off discounts, fixed prices, price lists, cost plus markup and the minimum order amount are converted with the exchange rate Shopify uses for that checkout. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). ## Data, downgrading and uninstalling ### Do I lose my discounts if I downgrade my Process Wholesale plan? No. Discounts, price lists, cost plus markup discounts and settings stay saved when you downgrade Process Wholesale. Features that need a higher plan are not available until you upgrade again. See [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan). ### What happens to my data if I uninstall Process Wholesale? Uninstalling Process Wholesale immediately deletes its discount configuration, settings, signup form setup, email templates, plan record and the customer and order history behind Analytics, and the app has no option to restore them. A reinstall starts from an empty setup, so export price lists and note your discounts first. See [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling). ### Does uninstalling Process Wholesale remove customer tags? No. Process Wholesale does not remove customer tags such as `B2B`, `B2B_Registeration` and your discount tags, or the `processwholesale` order tag, when it is uninstalled. Remove them in Shopify admin if you want them gone. See [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling). ## Getting help ### How do I contact Process Wholesale support? Open **Support** in the Process Wholesale app and select **Send message** to chat with the team, or use the chat on any app page. The app says "We usually respond in a few hours.", and support is available on every plan. See [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support). ### Are there video tutorials for Process Wholesale? Yes. Process Wholesale has 14 tutorial videos covering setup, discounts, price lists, signup forms, Quick Buy, checkout rules, net terms and shipping. Every step in a video is also written out in a help article. See [Process Wholesale video tutorials](https://docs.processwholesale.com/reference/video-tutorials). ## Related articles - [Process Wholesale help center](https://docs.processwholesale.com/) - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start) - [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) --- Source: https://docs.processwholesale.com/getting-started/what-is-process-wholesale Section: Getting started Plans: All plans Last verified: 2026-11-11 # What is Process Wholesale? Process Wholesale is a Shopify app that runs a wholesale (B2B) program inside your existing Shopify store. Approved wholesale customers (B2B customers) log in to the same storefront as your retail customers and get their own prices at checkout, applied by Shopify automatic discounts that Process Wholesale creates and keeps up to date. The app also handles wholesale applications and approval, shows wholesale prices on product pages, offers a bulk order form called Quick Buy, and adds checkout rules such as minimum orders and net payment terms. It is available on three plans: Starter, Enterprise and Professional. **At a glance** - **What it is:** A Shopify app for wholesale pricing and B2B ordering in one store, without a separate wholesale store - **Who it is for:** Shopify merchants who sell to both retail customers and business customers (retailers, distributors and other trade buyers) - **Who counts as wholesale:** Customers with the customer tag `B2B`, which Process Wholesale adds when you approve them - **How prices are applied:** Shopify automatic discounts maintained by the app, read at cart and checkout - **Plans:** Starter, Enterprise, Professional. Current prices are shown on the Shopify plan page that opens from **Plan** in the app. ## Who Process Wholesale is for Process Wholesale is for Shopify stores that want to sell wholesale from the store they already have. Retail customers keep seeing and paying retail prices. Customers you approve as wholesale customers log in with a normal Shopify customer account and receive the discounts you assign to them. The app uses Shopify's own customer accounts, customer tags, automatic discounts and checkout, so there is no second storefront and no separate login. Process Wholesale works with both of Shopify's customer account types, which Shopify admin labels **Customer accounts** (new) and **Legacy**. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). ## Process Wholesale features by area Each feature lists the plans it needs. The full matrix is in [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference). ### Wholesale pricing | Feature | What it does | Plans | | --- | --- | --- | | [Flat discounts](https://docs.processwholesale.com/discounts/flat-discounts) | A percentage off or an amount off every eligible item for customers with the discount tag, on all products, chosen products or chosen collections. | All plans (variant-level selection: Enterprise or Professional) | | [Quantity tier discounts](https://docs.processwholesale.com/discounts/quantity-tier-discounts) | A per-item discount whose level depends on how many units of the same product are in the cart (quantity breaks, volume pricing). | All plans | | [Cart value tier discounts](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) | An order discount whose level depends on the cart subtotal. | All plans | | [Cart quantity tier discounts](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) | An order discount whose level depends on the total number of units in the cart. | All plans | | [Loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts) | An extra order discount for customers whose spend or order count in a recent period reaches a tier. | Enterprise or Professional | | [Price lists](https://docs.processwholesale.com/discounts/price-lists) | A fixed wholesale price per variant for customers with the price list's tag, editable in the app or by [CSV import](https://docs.processwholesale.com/discounts/price-list-csv-import). | Professional | | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | Sets the wholesale price to the variant's unit cost plus a markup percentage. | Professional | | [Discount priority and combinations](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) | Settings that decide whether a flat or a tier discount wins on the same product, and which other discounts the app's discounts combine with. | All plans (price list and cost plus markup combinations: Professional) | How many flat and tier discounts you can create depends on the plan: 1 on Starter, 100 on Enterprise and Professional. ### Customers and signup | Feature | What it does | Plans | | --- | --- | --- | | [Wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-forms-overview) | A form on your storefront or in new customer accounts where buyers apply for a wholesale account. Applicants are tagged `B2B_Registeration` (the tag is spelled this way) and wait for approval. | All plans | | [Custom signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) | A signup form built from your own fields, including file uploads and a consent checkbox. | Enterprise or Professional | | [Approve or reject applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) | The **Customers** page lists pending and active wholesale customers. Approving replaces `B2B_Registeration` with `B2B`. | All plans | | [Assign discounts to customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) | Add discount tags to one customer, to every wholesale customer at once, or automatically on approval. | All plans (price list and cost plus markup tags: Professional) | | [Wholesale emails](https://docs.processwholesale.com/customers/wholesale-emails) | Application received, approved and rejected emails to the applicant, plus an alert to you for each new application. | All plans | | [Tax exemption](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers) | Sets wholesale customers to tax exempt in Shopify. | All plans | | [Redirect after login](https://docs.processwholesale.com/customers/redirect-after-login) | Sends wholesale customers to a page you choose after they log in. | Enterprise or Professional | ### Storefront | Feature | What it does | Plans | | --- | --- | --- | | [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) | Shows a logged-in wholesale customer a table of their wholesale prices and discount levels on product pages. | All plans | | [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup) | A wholesale order form on a store page: search, enter quantities for many products, reorder past orders and check out. | Enterprise or Professional | | [Hide price](https://docs.processwholesale.com/storefront/hide-prices) | Hides prices and buy buttons from visitors who are not wholesale customers and shows a message instead. | Professional | | [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) | Makes page, collection or product templates wholesale-only by redirecting other visitors. | Enterprise or Professional | ### Checkout | Feature | What it does | Plans | | --- | --- | --- | | [Minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) | Blocks checkout for wholesale customers whose order total after discounts is under an amount you set. | Enterprise or Professional | | [Minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) | Blocks checkout for wholesale customers under a quantity for the cart, for specific products or for every product. | Enterprise or Professional | | [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) | Lets wholesale customers check out from Quick Buy on terms such as Net 30. Process Wholesale creates a Shopify draft order with those payment terms. | Enterprise or Professional | | [Hide payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods) | Hides payment methods you name from wholesale customers at checkout. | Enterprise or Professional | | [Wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping) | Shows chosen shipping rates only to wholesale customers and hides them from everyone else. | Enterprise or Professional | | [Draft orders](https://docs.processwholesale.com/discounts/draft-orders) | Wholesale discounts can be applied to draft orders you create for a wholesale customer. | All plans | ### Analytics | Feature | What it does | Plans | | --- | --- | --- | | [Wholesale analytics](https://docs.processwholesale.com/analytics/wholesale-analytics) | Revenue, orders, average order value and items per order for wholesale orders. | All plans (Overview tab, last 30 days) | | Full analytics | Customers and Products tabs with real data, other time ranges and CSV export. | Professional | | [At-risk customers](https://docs.processwholesale.com/customers/at-risk-customers) | Lists wholesale customers with no wholesale order in 45 or more days and sends them a recovery email. | Professional | | [Wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) | Orders where a Process Wholesale discount was applied are counted as wholesale and tagged `processwholesale` in Shopify. | All plans | ## Process Wholesale plans at a glance | Plan | What the plan includes or adds | | --- | --- | | Starter | 1 flat or tier discount, the signup form, the Product Wholesale block, customer approval, the wholesale emails, tax exemption, draft orders and the Analytics overview for the last 30 days. | | Enterprise | Everything in Starter, plus up to 100 discounts, the Quick Buy order form, loyalty discounts, variant-level selection, the custom signup form, Lock Content Redirect, redirect after login, net payment terms, minimum order amount and quantity, hidden payment methods and wholesale shipping. | | Professional | Everything in Enterprise, plus price lists, cost plus markup, Hide price and full Analytics. | Plan prices are not listed in this help center. Current prices are shown on the Shopify plan page that opens from **Plan** in the app. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). ## What Process Wholesale does not do - **No automatic approval.** Every application waits in **Customers > Pending** until you select **Accept B2B**. Approval is always manual. - **No free shipping setting.** Process Wholesale can show or hide shipping rates for wholesale customers, but has no free-shipping rule. Create free rates in Shopify and limit them with [wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping). - **Net terms only through Quick Buy.** Net payment terms are offered on the Quick Buy order page, not in the regular Shopify cart or checkout. - **No price change in the theme.** The Product Wholesale block adds a wholesale price table. The theme's own price on product, collection and search pages stays the retail price. The wholesale price is charged at cart and checkout. - **No order minimums, increments or case packs in Quick Buy.** Quantity rules are set as [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) in checkout. - **No separate wholesale store or login.** Wholesale customers use your store's normal Shopify customer accounts. - **No limit tied to Shopify Plus.** No Process Wholesale feature is limited to Shopify Plus stores. ## Frequently asked questions ### Is Process Wholesale the same as Shopify B2B? No. Process Wholesale is a separate app. It identifies wholesale customers by the customer tag `B2B` and applies their prices with Shopify automatic discounts that the app maintains. See [How Process Wholesale works](https://docs.processwholesale.com/getting-started/how-process-wholesale-works). ### Do I need Shopify Plus to use Process Wholesale? No. No Process Wholesale feature is limited to Shopify Plus stores. ### Can retail and wholesale customers use the same store? Yes. Retail customers keep retail prices. Only logged-in customers with the `B2B` tag and a discount tag receive wholesale discounts at checkout. ### Does Process Wholesale approve wholesale customers automatically? No. Approval is always manual on the **Customers** page. You can have discount tags added automatically at the moment you approve someone. See [How to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags). ### Where do I see plan prices? On the Shopify plan page that opens when you select **Plan** in the Process Wholesale app. Prices are not listed in this help center. ## Related articles - [How Process Wholesale works: customer tags, discounts and checkout](https://docs.processwholesale.com/getting-started/how-process-wholesale-works) - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) - [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types) - [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility) --- Source: https://docs.processwholesale.com/getting-started/how-process-wholesale-works Section: Getting started Plans: All plans Last verified: 2026-11-11 # How Process Wholesale works: customer tags, discounts and checkout Process Wholesale decides who gets wholesale prices with Shopify customer tags. The tag `B2B` marks a customer as an approved wholesale customer (B2B customer), and a second tag, the discount tag, decides which of your discounts that customer gets. Process Wholesale keeps a set of Shopify automatic discounts that read those tags at cart and checkout and apply the wholesale price. Theme blocks only display prices and forms, and settings add checkout rules such as minimums and net terms. This works the same on every plan; the plan decides which discount types and rules you can use. **At a glance** - **Wholesale customer:** a customer with the tag `B2B`, added when you approve them - **Pending customer:** an applicant with the tag `B2B_Registeration` (the tag is spelled this way) - **Discount tag:** the name you give a discount, added to a customer to grant it - **Where prices are applied:** Shopify automatic discounts named `B2B Order/Loyalty Discount`, `B2B Cart Quantity Discount`, `B2B Price List Discount` and `B2B Cost Plus Markup Discount` - **Where prices are shown:** the Product Wholesale block and Quick Buy, for logged-in wholesale customers ## Customer tags decide who is wholesale Process Wholesale stores a customer's wholesale status as a Shopify customer tag. You can see these tags on the customer in Shopify admin. | Tag | Meaning | Added by | | --- | --- | --- | | `B2B_Registeration` | Pending: the customer applied and is waiting for review | The wholesale signup form, or **Import customers** on the **Customers** page | | `B2B` | Active wholesale customer | **Accept B2B** on the **Customers** page | | a discount tag, for example `gold15` | The customer gets the discount with that name | **Manage discount tags**, **Bulk assign discount**, or automatic assignment on approval | | `B2Bnetterms` | The customer may use net payment terms when you limit terms to specific customers | **Settings > Net terms > Select Customers** | Approving a customer replaces `B2B_Registeration` with `B2B`. Rejecting removes both status tags but keeps the Shopify customer account. Approval is always manual. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). > **Note:** Not every feature uses the same test. Checkout discounts, checkout rules and Quick Buy require the exact tag `B2B` (any capitalization). The Product Wholesale block and Hide price treat any tag that contains `b2b` as wholesale, so a pending customer tagged `B2B_Registeration` can see the Product Wholesale block but gets no wholesale discount at checkout. ## A discount tag decides which discounts a customer gets Every Process Wholesale discount has a name, the discount tag. A flat or tier discount tag is made of lower-case letters and numbers, for example `gold15`. Do not use `b2b` in a discount tag: the flat discount, price list and cost plus markup forms do not accept it, and the tier discount form shows "'B2B' and its variations are not allowed". A wholesale customer receives a discount only when they have both the `B2B` tag and that discount's tag. A customer can have several discount tags; the rules for which one wins are in [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). Creating a discount does not give it to anyone. Add its tag to customers on the **Customers** page, with **Bulk assign discount**, or automatically on approval. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ## Shopify automatic discounts apply the prices at cart and checkout Process Wholesale does not change product prices in Shopify. It creates Shopify automatic discounts and gives them your discount configuration. At cart and checkout, Shopify runs these discounts, which check the customer's tags and calculate the wholesale price. You see them in Shopify admin under **Discounts**. | Automatic discount (as named in Shopify admin) | What it applies | | --- | --- | | `B2B Order/Loyalty Discount` | Flat discounts, quantity tier discounts, cart value tier discounts and loyalty discounts | | `B2B Cart Quantity Discount` | Cart quantity tier discounts | | `B2B Price List Discount` | Price lists | | `B2B Cost Plus Markup Discount` | Cost plus markup | Process Wholesale creates these discounts for stores with an active plan, updates them right after you save a discount, and checks them again every 5 minutes. They start on 2024-06-22 and have no end date. > **Important:** Do not delete, deactivate or edit the `B2B` automatic discounts in Shopify admin. They are how wholesale prices reach checkout. Choose which other discounts they combine with in Process Wholesale under **Settings > Discount settings**, not in Shopify admin. An order that received a Process Wholesale discount counts as a [wholesale order](https://docs.processwholesale.com/analytics/wholesale-orders), and Process Wholesale adds the order tag `processwholesale` to it. ## Theme blocks display prices and forms The blocks you add in the Shopify theme editor show information; they do not set the price that is charged. - The [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) adds a table of wholesale prices and discount levels on product pages. The theme's own price stays the retail price. - [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup) is an order form that calculates and shows wholesale prices before the customer checks out. - The [signup form](https://docs.processwholesale.com/signup-forms/signup-forms-overview) collects applications. - [Hide price](https://docs.processwholesale.com/storefront/hide-prices) and [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) hide prices or pages from visitors who are not wholesale. The price the customer pays always comes from the automatic discounts at cart and checkout. ## Settings add checkout rules Process Wholesale adds rules to Shopify checkout for customers tagged `B2B`: a [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount), a [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity), [hidden payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods) and [wholesale-only shipping rates](https://docs.processwholesale.com/checkout/wholesale-shipping). [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) are offered on the Quick Buy order page. These need the Enterprise or Professional plan. ## Worked example: one customer from signup to a paid order A store on the Enterprise plan has a flat discount `gold15` (15% off all products) and a minimum order amount of $200. 1. **Application.** Maya fills in the wholesale signup form. Shopify now has a customer account for her with the tag `B2B_Registeration`. She sees the pending message, and you receive a new-application email. 2. **Review.** In Process Wholesale, **Customers > Pending** lists Maya. You select **Accept B2B**. Her tag changes to `B2B`, and she gets the approval email if it is on. 3. **Discount.** In **Customers > Active**, you open Maya's row menu, select **Manage discount tags** and add `gold15`. She now has `B2B` and `gold15`. 4. **Browsing.** Maya logs in. On a $40 product, the theme still shows $40.00, and the Product Wholesale block shows a row with a 15% discount and a wholesale price of $34.00. 5. **Cart and checkout.** Maya adds 5 units ($200.00 retail). `B2B Order/Loyalty Discount` takes 15% off: $30.00, so the total is $170.00. Because $170.00 is under the $200 minimum, checkout shows "Minimum order amount for wholesale customers is: 200.00 USD". 6. **Paid order.** Maya adds a sixth unit: $240.00 retail, $36.00 discount, $204.00 total. Checkout completes. Because the order received the `gold15` discount, Process Wholesale adds the order tag `processwholesale`. The order counts toward wholesale revenue on the Dashboard. ## Timing you can observe - **Discount changes:** the automatic discounts are updated right after you save a discount and checked again every 5 minutes. - **Loyalty discounts:** loyalty tags are recalculated every 2 hours. A new qualifying order can take up to 2 hours to unlock the loyalty discount, and a customer who no longer qualifies keeps it until the next update. - **Customer tags:** approving a customer or changing their discount tags takes effect at their next cart or checkout. ## Frequently asked questions ### Why does the product page still show the retail price to a wholesale customer? The theme's price is not changed by Process Wholesale. The wholesale price appears in the Product Wholesale block's table and is charged at cart and checkout. ### Can I delete the B2B discounts in my Shopify Discounts list? No. `B2B Order/Loyalty Discount`, `B2B Cart Quantity Discount`, `B2B Price List Discount` and `B2B Cost Plus Markup Discount` are how Process Wholesale applies wholesale prices. Leave them active and unedited. ### Does tagging a customer `B2B` in Shopify admin make them wholesale? Yes, for prices and checkout rules, because those read the tag. But no approval email is sent, no discount tags are added automatically and tax exemption is not set. Approve customers on the **Customers** page instead. ### Do pending customers get wholesale prices? No. Checkout discounts require the exact tag `B2B`. A pending customer tagged `B2B_Registeration` pays retail prices. ### How often do loyalty discounts update? Every 2 hours. See [How loyalty discounts work for repeat wholesale customers](https://docs.processwholesale.com/discounts/loyalty-discounts). ## Related articles - [What is Process Wholesale?](https://docs.processwholesale.com/getting-started/what-is-process-wholesale) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) - [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference) --- Source: https://docs.processwholesale.com/getting-started/quick-start Section: Getting started Plans: All plans Last verified: 2026-11-11 # Quick start: set up wholesale pricing on your Shopify store The shortest path to a first wholesale order with Process Wholesale has seven steps: choose a plan, create a discount, add the signup form that matches your store's customer account type, add the Product Wholesale block, optionally add Quick Buy, approve a test customer and give them the discount tag, then log in as that customer and check out. Everything happens in the Process Wholesale app and the Shopify theme editor, and it works on every plan. Quick Buy needs the Enterprise or Professional plan. **At a glance** - **Plan:** Any plan. Quick Buy needs Enterprise or Professional. - **Where:** Process Wholesale in Shopify admin, and **Online Store > Themes > Customize** - **You need:** An Online Store 2.0 theme, and an email address you can use for a test customer ## Before you start - Your theme must be an Online Store 2.0 theme, because Process Wholesale adds app blocks and app embeds. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). - Find out which customer account type your store uses. Shopify admin labels the two types **Customer accounts** (new customer accounts) and **Legacy** (legacy customer accounts). The signup form you add in step 3 depends on it. ## Step 1: Choose a plan Process Wholesale has three plans. **Starter** covers one flat or tier discount, the signup form, customer approval and the Product Wholesale block. **Enterprise** adds up to 100 discounts, Quick Buy, net payment terms, minimum orders and wholesale shipping. **Professional** adds price lists, cost plus markup, Hide price and full Analytics. 1. Open **Process Wholesale** in Shopify admin. On first open without an active plan, the app sends you to the Shopify plan page. 2. Pick a plan and approve it in Shopify. Current prices are shown on that page. 3. Shopify returns you to the Process Wholesale **Dashboard**. **Check it worked:** the **Dashboard** opens and stays open instead of sending you back to the plan page. The **Active discounts** tile shows your plan's limit, for example `0/1` on Starter. To change plans later, select **Plan** in the app menu. See [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan). ## Step 2: Create your first discount 1. Select **Discounts**. The page opens on the **Flat Discounts** tab. 2. Select **Create new tag**. 3. In **Discount tag name**, enter a name such as `wholesale20`. It becomes the customer tag that grants the discount, so use lower-case letters and numbers and do not use `b2b`. 4. Under **Discount type**, choose **Percentage Off** and enter `20` in **Value**. 5. Under **Applies to**, keep **All products** or choose products or collections. 6. Select **Save**. **Check it worked:** the toast "Discount created" appears and the discount is listed on the **Flat Discounts** tab. The **Active discounts** tile on the **Dashboard** goes up by one. For quantity breaks or other types, see [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types) and [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts). ## Step 3: Add the signup form for your customer account type Wholesale customers apply through a signup form. Applicants are tagged `B2B_Registeration` (the tag is spelled this way) and appear in **Customers > Pending**. - **Legacy customer accounts:** in the theme editor, open a page template (for example a page called Wholesale), select **Add block**, and under **Apps** choose **Wholesale Signup Form**. Select **Save**. See [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). - **New customer accounts:** add the wholesale signup form to your customer account pages. You can also use the **Wholesale Signup Form** theme block; set its **Use new customer flow** setting to **Yes**. See [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). **Check it worked:** on the **Dashboard**, the **Signup form** card under **App Status** shows **ON**. If you used the theme block, visit the page while logged out and confirm the form appears. If you are unsure which form to use, see [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview). ## Step 4: Add the Product Wholesale block 1. On the **Dashboard**, find the **Product block** card under **App Status** and select **Enable**. The theme editor opens on your product template. 2. Add the **Product Wholesale** app block to the product information section, where you want the price table to appear. 3. Select **Save**. **Check it worked:** the **Product block** card shows **ON** after you reload the **Dashboard**. The card checks the default product template only. In the theme editor, the block shows example tables labelled "Product discounts example". See [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices). ## Step 5 (optional): Add the Quick Buy order form Quick Buy is a wholesale order form for a store page. It needs the Enterprise or Professional plan; on Starter, skip this step. 1. In the theme editor, create or open a page template, for example `page.wholesale`. 2. Select **Add block**, and under **Apps** choose **Quick Buy**. Select **Save**. 3. In Shopify admin, assign that template to a page, for example a page called Wholesale order form. **Check it worked:** the **Quick buy** card under **App Status** shows **ON**. See [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). ## Step 6: Approve a test customer and assign the discount tag 1. On your storefront, log out and submit the signup form with a test email address you can access. 2. In Process Wholesale, select **Customers**. The test customer is on the **Pending** tab. 3. Open the row menu and select **Accept B2B**. The customer moves to the **Active** tab and their tag changes from `B2B_Registeration` to `B2B`. 4. On the **Active** tab, open the row menu, select **Manage discount tags**, choose `wholesale20` and select **Save**. **Check it worked:** the **Discount tags** column on the **Active** tab shows `wholesale20`, and the **Active B2B customers** tile on the **Dashboard** counts the customer. In Shopify admin, the customer has the tags `B2B` and `wholesale20`. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) and [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). > **Tip:** To give a discount to every new wholesale customer, choose it under **Settings > Customer settings > Auto assign discount tags**. Every save of the **Settings** page also adds the selected tags to up to 100 existing customers tagged `B2B`. See [How to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags). ## Step 7: Test while logged in as the wholesale customer 1. Log in to your storefront as the test customer. 2. Open a product page. The theme price still shows the retail price, and the Product Wholesale table shows the 20% discount and the wholesale price. 3. Add the product to the cart and go to checkout. The 20% discount is applied. 4. If you added Quick Buy, open its page and confirm the product table appears with wholesale prices. **Check it worked:** checkout shows the discount and the lower total. When you place the test order logged in as the test customer and a Process Wholesale discount is applied to it, the order is tagged `processwholesale` in Shopify and counts in **Revenue (last 30 days)** on the **Dashboard**. ## What your customers see - **Visitors and retail customers** see retail prices and, where you added it, the signup form. - **Pending customers** see the pending message on the signup form and pay retail prices. - **Wholesale customers** with a discount tag see the Product Wholesale table on product pages, the Quick Buy form if you added it, and their wholesale price at cart and checkout. ## Limits and things to know - **Discount limits by plan.** You can create 1 flat or tier discount on Starter and 100 on Enterprise and Professional. - **The discount applies only with both tags.** A customer needs `B2B` and the discount tag. Creating a discount gives it to no one. - **Test on the live storefront.** In the theme editor there is no logged-in customer: the Product Wholesale block shows example tables, and Quick Buy warns that discounts are not applied there. - **Add the signup form to a page template.** The **Signup form** card on the **Dashboard** looks for the theme block on page templates only, so a form placed on the home page or a product page shows **OFF** there. - **The Quick guide on the Dashboard** ticks **Setup Signup Form** and **Create & Assign Discounts** automatically. The **Setup Wholesale prices on product page** and **Setup Quick Buy Table** steps do not tick; use the **App Status** cards to confirm those blocks. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The app keeps opening the Shopify plan page | No active plan | Pick and approve a plan on the Shopify plan page. | | No **Process Wholesale** blocks under **Apps** in the theme editor | The theme is not an Online Store 2.0 theme, or the template has no section that accepts app blocks | Use an Online Store 2.0 theme. See [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing). | | The test customer is not in **Pending** | The form for the other customer account type was used, or the submission failed | Match the form to your account type. See [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working). | | No Product Wholesale table on the product page | Not logged in as the customer, or the customer lacks the discount tag, or the discount does not include that product | Log in as the test customer and check their tags and the discount's **Applies to**. | | No discount at checkout | The customer has no `B2B` tag or no discount tag | Approve the customer and add the discount tag. See [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). | | A card shows **OFF** although the block is added | The block is on an unpublished theme or a template the app does not check | See [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status). | ## Frequently asked questions ### Do I need Quick Buy to sell wholesale? No. Wholesale prices apply in the normal Shopify cart and checkout. Quick Buy adds a bulk order form and is the only place net payment terms are offered. ### Which signup form should I use? The one that matches your customer account type. Shopify admin labels the types **Customer accounts** and **Legacy**. See [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview). ### Can I make an existing customer wholesale without the signup form? Yes. Use **Import customers** on the **Customers** page, then select **Accept B2B**. See [How to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers). ### Why does the product page still show the retail price? The Product Wholesale block adds a table with the wholesale price and leaves the theme's price as it is. The wholesale price is charged at cart and checkout. ### Can Process Wholesale set this up for me? Yes. The **Dashboard** offers setup help: the Ada setup assistant when it is available, or **Set it up for me** and **Schedule call**. See [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant) and [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support). ## Related articles - [How Process Wholesale works: customer tags, discounts and checkout](https://docs.processwholesale.com/getting-started/how-process-wholesale-works) - [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) - [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types) - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) --- Source: https://docs.processwholesale.com/getting-started/dashboard-and-app-status Section: Getting started Plans: All plans Last verified: 2026-11-11 # The Process Wholesale dashboard and App Status explained The **Dashboard** is the home page of the Process Wholesale app in Shopify admin. It shows which Process Wholesale theme blocks are active on your published theme (**App Status**), key numbers for your wholesale program (**Analytics**), and a setup guide or a product tour. It appears on every plan; some cards and tiles are locked until you move to a plan that includes the feature. If the store has no active plan, opening the app sends you to the Shopify plan page instead. **At a glance** - **Where:** Process Wholesale > **Home**. The page title is **Dashboard**. - **Order of cards:** setup card, Quick guide or tour card, **App Status**, **Analytics**, then a banner for other apps - **App Status reads:** your published (live) theme and your customer account extensions - **Locked items:** show a lock icon and an **Unlock** link to the Shopify plan page ## App Status cards **App Status** has six cards, one per storefront feature. Each card has a badge and a link. | Badge or link | Meaning | | --- | --- | | **ON** | Process Wholesale found the block active on your published theme, or the matching customer account extension in use. | | **OFF** | The block was not found, or the card is locked. | | **Enable** | Opens the Shopify theme editor (or the customer accounts editor) to add the block. | | **Manage** | Opens the theme editor (or the customer accounts editor) where the block was found. | | **Unlock** | The feature is not in your plan. Opens the Shopify plan page. | | Card | What it checks | Enable opens | Locked on | | --- | --- | --- | --- | | **Product block** ("Displays wholesale prices for logged in B2B customers on product pages") | The Product Wholesale block on the default product template | The theme editor on the product template, adding the block | Never | | **Signup form** ("Form customers use to apply for a B2B account") | The **Wholesale Signup Form** or **Wholesale Custom Signup** block on a page template, or either wholesale signup form (standard or custom) in new customer accounts | The theme editor | Never | | **Quick buy** ("Bulk order form for B2B customers") | The Quick Buy block on a page template | The theme editor | Starter | | **Lock content** ("Restrict access to B2B content for non-B2B customers (optional)") | The Lock Content Redirect block on a page, collection or product template | The theme editor | Starter | | **B2B Redirect** ("Redirect b2b users to a specific url after login") | Legacy customer accounts: the B2B Redirect Block on the customer account template. New customer accounts: the redirect block in customer accounts. | The matching editor for your customer account type | Starter | | **Hide price** ("Hide prices and buy buttons from non-B2B customers") | The **Hide price** app embed switched on under **Theme settings > App embeds** | The theme editor's app embeds, with Hide price selected | Starter | > **Note:** Hide price needs the Professional plan. On Enterprise, the **Hide price** card shows **Enable** instead of **Unlock**, but the Hide price app embed is offered in the theme editor only on Professional. See [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). The **Hide price** card reports the app embed only. Prices are hidden only when the embed is on and **Hide prices and buy buttons from non-B2B customers** is checked under **Settings > Customer settings**. ## Why a block shows OFF when it is installed App Status reads the theme's files. A block that works can still read **OFF** in these cases: | Situation | Why it reads OFF | What to do | | --- | --- | --- | | The block is on an unpublished theme | Only the published (live) theme is checked | Publish the theme, or ignore the card until you do. | | The block or its section is hidden in the theme editor | Disabled blocks and blocks inside disabled sections count as off | Show the block and its section, then select **Save**. | | The signup form is on the home page, a collection or a product page | The **Signup form** card checks page templates only | Use a page template, or check the form on the storefront instead. | | The Product Wholesale block is on an alternate product template (for example `product.wholesale`) | The **Product block** card checks the default product template only | Add the block to the default product template too, or check the block on the storefront. | | The Quick Buy block is on another template | Quick Buy can only be added to page templates, and the card checks page templates | Add Quick Buy to a page template. | | The theme uses `.liquid` templates (a vintage theme) | Only JSON templates (Online Store 2.0) are read | Use an Online Store 2.0 theme. See [requirements](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). | | A theme with a very large number of templates | The check reads at most 1,250 template files | Check the block on the storefront. | | The check could not read the theme | When reading fails, every theme block reads as off. Only a signup form or redirect block in new customer accounts can still show **ON**. | Reload the **Dashboard**. | The cards are re-read each time the **Dashboard** loads. After you add a block in the theme editor and select **Save**, reload the **Dashboard**. ## Analytics tiles Under **Analytics** ("Key metrics for your wholesale program") there are nine tiles. Hover a tile name to see its description. | Tile | Shows | Possible values | | --- | --- | --- | | **Pending B2B customers** | Customers tagged `B2B_Registeration` waiting for approval | A number. Pending and active customers are counted from at most 2,500 customers together. | | **Active B2B customers** | Customers tagged `B2B` | A number. Pending and active customers are counted from at most 2,500 customers together. | | **Revenue (last 30 days)** | Total of [wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) placed in the last 30 days, in your store currency with no decimals | An amount, for example `$1,250` | | **Active discounts** | Flat and tier discounts compared with your plan's limit. Price lists and cost plus markup are not counted here. | `active/limit`, for example `1/1` or `2/100`. At the limit on Starter, a warning icon and **Upgrade** link appear. | | **B2B tax exemption** | Whether [tax exemption](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers) is on | **Enabled** or **Disabled** | | **B2B shipping** | Whether [wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping) is on | **Enabled** or **Disabled**. Locked below Enterprise. | | **Net terms** | Whether [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) are on | **Enabled** or **Disabled**. Locked below Enterprise. | | **Minimum order amount** | The [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) | An amount, for example `$200`, or **Disabled**. Locked below Enterprise. | | **MOQ** | The [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) and what it applies to | `Cart - 10`, `Specific products - 6`, `All products - 12`, or **Disabled**. Locked below Enterprise. | Locked tiles show a lock icon and **Unlock** on Starter. Plan limits for **Active discounts**: 1 on Starter, 100 on Enterprise and Professional. Detailed reports are on the **Analytics** page; see [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics). ## Quick guide The **Quick guide** card ("Enable wholesale pricing on your store in 4 steps") lists four steps, each with a video: | Step | Gets a tick when | | --- | --- | | **Setup Signup Form** | A signup form block (standard or custom) is opened in the theme editor, or the customer accounts signup form is opened in its editor | | **Setup Wholesale prices on product page** | Does not tick. Use the **Product block** card in **App Status**. | | **Setup Quick Buy Table** | Does not tick. Use the **Quick buy** card in **App Status**. | | **Create & Assign Discounts** | A flat or tier discount is saved | Quick Buy needs the Enterprise or Professional plan; skip the Quick Buy step on Starter. The **Quick guide** hides itself once the store is configured: at least one discount of any type exists, the Product Wholesale block is on, and a signup form is on. The X button hides it until you close the browser tab. When the Ada setup assistant is available, the same steps appear collapsed under "Prefer to set things up yourself?" with **View manual setup**. For the full walkthrough, see [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start). ## Setup card The first card offers setup help: - **Ada setup card**, when the Ada assistant is available: describe your wholesale program in your own words or answer a few questions, and select **Build my setup**. Once the store is configured, the card becomes "Make changes with Ada". See [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant). - **Welcome card** ("Get your wholesale setup done for you") otherwise: **Set it up for me** opens a support chat with a setup request, and **Schedule call** opens a booking page for an onboarding call. The X button hides it until you close the browser tab. See [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support). ## Tour card When the store is configured, the **Quick guide** is replaced by the card "Your wholesale program is live: Learn how to manage it". **Watch 3 min tour** plays a [3-minute tour video](https://vimeo.com/1220630939) on approving customers, assigning discounts and updating pricing. Once dismissed with X, the card stays hidden in that browser. ## Other apps banner The last card, "Get 20% off our other apps", lists other Shopify apps from the same developer. Its tooltip says to contact support after installing one to receive the discount. The X button hides it until you close the browser tab. ## Frequently asked questions ### Why does App Status show OFF when the block is on my theme? App Status checks only the published theme, only JSON templates, and only the templates listed for each card. A hidden block, a draft theme, a Product Wholesale block on an alternate product template, or a signup form outside a page template reads **OFF**. Check the block on your storefront. ### Why does the Dashboard keep sending me to the Shopify plan page? The store has no active plan. Choose a plan on the Shopify plan page; the **Dashboard** opens once the plan is active. ### Why does Active discounts show 1/1 when I have a price list? The tile counts flat and tier discounts only. Price lists and cost plus markup are not included. ### Why are Quick guide steps not ticked after I added the blocks? The **Setup Wholesale prices on product page** and **Setup Quick Buy Table** steps do not tick. The **App Status** cards show whether those blocks are on. ## Related articles - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start) - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing) - [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/getting-started/requirements-and-compatibility Section: Getting started Plans: All plans Last verified: 2026-11-11 # Process Wholesale requirements and compatibility Process Wholesale needs a Shopify store with an Online Store 2.0 theme, because its storefront features are app blocks and app embeds. It works with both Shopify customer account types, which Shopify admin labels **Customer accounts** (new customer accounts) and **Legacy** (legacy customer accounts), with a different signup form and login redirect for each. No Process Wholesale feature is limited to Shopify Plus stores. These requirements apply to every plan. **At a glance** - **Theme:** Online Store 2.0 (JSON templates) - **Customer accounts:** new and legacy both supported - **Shopify plan:** no Process Wholesale feature is limited to Shopify Plus - **Storefront:** JavaScript must run in the buyer's browser for the blocks to work - **Admin languages:** English, French, Spanish, German, Italian ## Compatibility summary | Works with | Notes | | --- | --- | | Online Store 2.0 themes | Required for every block and embed. App blocks go into sections that accept app blocks on JSON templates. Vintage themes with `.liquid` templates do not show the blocks, and the Dashboard reports them as **OFF**. | | New customer accounts | Supported. Use the signup form for customer accounts or the theme signup block with the new customer flow. Redirect after login uses a block in customer accounts. | | Legacy customer accounts | Supported. Use the **Wholesale Signup Form** theme block, which asks the applicant for a password. Redirect after login uses the **B2B Redirect Block** on the customer account template. | | Shopify Plus and non-Plus stores | No Process Wholesale feature is limited to Shopify Plus. | | Multiple currencies (Shopify Markets) | Checkout discounts and the minimum order amount convert to the buyer's currency. See the currency table. | | Market-based shipping | The **Shipping** page lists rates by market when your store uses market-based shipping. See [How to show shipping methods only to wholesale customers](https://docs.processwholesale.com/checkout/wholesale-shipping). | | Storefront languages | Fixed storefront and checkout text in English, German, Spanish, French, Italian, Norwegian, Portuguese (Brazil and Portugal) and Swedish. Text you type in block settings is shown as you typed it. | | Draft orders | Wholesale discounts can be applied to a draft order for a wholesale customer. See [How to apply wholesale discounts to a Shopify draft order](https://docs.processwholesale.com/discounts/draft-orders). | ## Theme requirements Process Wholesale's storefront features are part of a Shopify theme app extension: | Theme feature | Type | Templates | | --- | --- | --- | | Product Wholesale | App block | Product | | Quick Buy | App block | Page | | Wholesale Signup Form | App block | Page, collection, home, product | | Wholesale Custom Signup | App block | Page, collection, home, product | | Lock Content Redirect | App block | Page, collection, product | | B2B Redirect Block | App block | Customer account (legacy customer accounts) | | Hide price | App embed | Every page, switched on under **Theme settings > App embeds** | Some blocks appear in the theme editor only on plans that include them: Lock Content Redirect and Wholesale Custom Signup on Enterprise and Professional, Hide price on Professional. Quick Buy is listed on every plan, but it works only on Enterprise and Professional; on Starter it shows nothing on the storefront, and the theme editor shows "Please upgrade your plan to access this feature." If no Process Wholesale blocks appear at all, see [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing). All blocks are listed in [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview). - **Product page variants.** The Product Wholesale block updates its table when the variant changes through the page URL, Shopify's variant change event, or the product form's variant selector. A theme or page builder that changes variants another way does not refresh the table. - **Hide price selectors.** Hide price targets common theme class names for prices and buy buttons. If your theme uses other markup, add your theme's CSS selectors in the embed's **Custom selectors** settings. See [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). ## New and legacy customer accounts Process Wholesale uses your store's normal Shopify customer accounts. Check which type your store uses in Shopify admin under **Settings > Customer accounts**, where Shopify labels them **Customer accounts** and **Legacy**. | Area | Legacy customer accounts | New customer accounts | | --- | --- | --- | | Signup form | **Wholesale Signup Form** theme block with a password field. Shopify creates the account when the form is submitted. | Theme block without a password field, where Process Wholesale creates the account, or the signup form inside customer accounts for logged-in customers | | "Application received" email | Sent about a minute after a guest submits; right away for a logged-in customer | Sent right away | | Redirect after login | **B2B Redirect Block** on the customer account template | Redirect block in customer accounts | | Wholesale information for the customer | Not available | A **Wholesaler Information** block on the customer's profile shows their status and their discounts | The in-app FAQ recommends legacy (classic) customer accounts. Both types are supported. See [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) and [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). > **Tip:** On a store with new customer accounts, set the **Wholesale Signup Form** block's **Use new customer flow** setting to **Yes**, so the form never asks for a password. ## Currencies and Shopify Markets You enter discount amounts, prices and minimums in your store currency. How each feature handles a buyer paying in another currency: | Feature | Behavior in other currencies | | --- | --- | | Percentage discounts | Calculated on the price the buyer pays, in their currency | | Amount-off and fixed-price discounts, cart value tiers | Amounts and thresholds are converted at checkout with the exchange rate Shopify uses for that checkout | | Price lists at checkout | The list price is converted with the checkout exchange rate. Example: a list price of 12.50 with a rate of 0.9 is charged as 11.25 in the buyer's currency. | | Cost plus markup at checkout | Cost plus markup is converted with the checkout exchange rate | | Minimum order amount | Converted with the checkout exchange rate. A minimum of 200 at a rate of 1.5 becomes 300.00. See [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount). | | Analytics and the Dashboard | Shown in your store currency. See [Why wholesale analytics differ from Shopify reports](https://docs.processwholesale.com/troubleshooting/analytics-numbers-differ). | ## Languages | Where | Languages | | --- | --- | | Process Wholesale admin | English, French, Spanish, German, Italian. The app follows your Shopify admin language; other languages show English. | | Storefront blocks and signup forms (fixed text) | English, German, Spanish, French, Italian, Norwegian, Portuguese (Brazil and Portugal), Swedish. Other storefront languages show English. | | Checkout messages (minimum order amount and quantity) | English, German, Spanish, French, Italian, Norwegian, Portuguese, Swedish | | Text you enter in block settings and the Hide price message | Shown exactly as typed. Translate it yourself. | In the Product Wholesale block, the table headers are translated and the label "Any" is always English. See [Languages supported by Process Wholesale](https://docs.processwholesale.com/account/languages). ## Browser requirements The storefront features run in the buyer's browser and need JavaScript: - **Product Wholesale** tables are hidden until the script loads the customer's prices. - **Quick Buy** loads products, prices and the saved order with JavaScript. - **Hide price** hides prices and buttons with JavaScript, so prices can show briefly while the page loads. - **Lock Content Redirect** and the **B2B Redirect Block** redirect with JavaScript. Hide price and Lock Content Redirect control what visitors see on the storefront. They do not block access to prices in checkout or through other Shopify pages. ## Frequently asked questions ### Does Process Wholesale work with vintage themes? No. Process Wholesale's blocks need an Online Store 2.0 theme with JSON templates. On a vintage theme the blocks are not available. ### Does Process Wholesale require Shopify Plus? No. No Process Wholesale feature is limited to Shopify Plus stores. ### Does Process Wholesale work with new customer accounts? Yes. Use the signup form for new customer accounts, and the redirect block in customer accounts for redirect after login. ### Are wholesale prices converted for buyers in other currencies? Yes, at checkout. Amount-off discounts, fixed prices, price lists, cost plus markup and the minimum order amount are converted with the exchange rate Shopify uses for that checkout. ### Can I translate the signup form labels? The fixed labels are translated into eight languages: English, German, Spanish, French, Italian, Norwegian, Portuguese and Swedish. Text you type into block settings, such as headings and messages, appears as you typed it, so translate it yourself. ## Related articles - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [Languages supported by Process Wholesale](https://docs.processwholesale.com/account/languages) - [Permissions Process Wholesale requests and why](https://docs.processwholesale.com/getting-started/app-permissions) - [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing) --- Source: https://docs.processwholesale.com/getting-started/app-permissions Section: Getting started Plans: All plans Last verified: 2026-11-11 # Permissions Process Wholesale requests and why Process Wholesale requests 25 Shopify access scopes when you install it. They let the app tag wholesale customers, maintain the Shopify automatic discounts that apply wholesale prices, add checkout rules, read orders for wholesale analytics, read products for price lists and order forms, and read your published theme to show **App Status** on the Dashboard. Three more scopes, for writing to themes, pages and navigation, are optional and requested only from merchants who approve a setup plan from Ada, the setup assistant. The scopes are the same on every plan. **At a glance** - **Required scopes:** 25, granted at install - **Optional scopes:** 3 (`write_themes`, `write_online_store_pages`, `write_online_store_navigation`), asked only when you approve an Ada setup plan - **Theme access at install:** read only. Process Wholesale reads the published theme to detect its blocks. - **Data stored by the app:** see [What data Process Wholesale stores and uses](https://docs.processwholesale.com/account/data-and-privacy) ## Required scopes | Scope | What it lets Process Wholesale do | Used by | | --- | --- | --- | | `read_customers` | Read customers, their tags and notes | **Customers** page, Dashboard customer counts, at-risk customers, discount assignment | | `write_customers` | Change customer tags, notes and tax exemption | Approving and rejecting applications, discount tags, signup forms for new customer accounts, tax exemption, net terms customer selection | | `customer_read_customers` | Read the logged-in customer's details inside Shopify customer accounts | Process Wholesale's extensions in new customer accounts (signup forms, **Wholesaler Information** block, redirect after login) | | `customer_write_customers` | Update the logged-in customer inside Shopify customer accounts | — | | `read_discounts` | Read discounts | Checking the app's automatic discounts | | `write_discounts` | Create and update automatic discounts | The four `B2B` automatic discounts that apply wholesale prices, and their combination settings | | `read_delivery_customizations` | Read delivery customizations | Wholesale shipping status on the Dashboard | | `write_delivery_customizations` | Create delivery customizations | [Wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping) | | `write_payment_customizations` | Create payment customizations | [Hide payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods) | | `read_validations` | Read checkout validations | [Minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) and [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) | | `write_validations` | Create checkout validations | Minimum order amount and minimum order quantity | | `read_draft_orders` | Read draft orders | Quick Buy checkout with [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) | | `write_draft_orders` | Create draft orders | Quick Buy checkout with net payment terms | | `write_payment_terms` | Set payment terms on orders | Net payment terms, such as Net 30, on Quick Buy orders | | `read_orders` | Read orders | [Wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders), Analytics, Dashboard revenue, loyalty discounts | | `write_orders` | Update orders | Adding the order tag `processwholesale` to wholesale orders | | `read_products` | Read products and variants | Quick Buy product lists, price lists and cost plus markup | | `write_products` | Update product and variant data | Price lists and cost plus markup (wholesale prices and unit costs stored on variants) | | `read_shipping` | Read shipping profiles and rates | Listing your rates on the **Shipping** page | | `read_markets` | Read your markets | Listing rates by market on the **Shipping** page | | `read_locations` | Read your locations | Listing your local pickup locations on the **Shipping** page | | `read_themes` | Read the published theme's files | **App Status** on the Dashboard | | `write_files` | Upload files to Shopify | Files attached to the custom signup form, and price list CSV imports | | `read_locales` | Read your store languages | The language of at-risk recovery emails | | `unauthenticated_read_product_listings` | Read product listings through Shopify's Storefront API | — | A dash in **Used by** means the scope is part of the requested set but no Process Wholesale feature is named for it here. ## Optional scopes | Scope | What it lets Process Wholesale do | When it is requested | | --- | --- | --- | | `write_themes` | Change theme files | Only when you approve an Ada setup plan | | `write_online_store_pages` | Create and edit online store pages | Only when you approve an Ada setup plan | | `write_online_store_navigation` | Change online store menus | Only when you approve an Ada setup plan | These optional scopes are not granted at install. Only merchants who run an Ada setup plan are asked for theme and page write access, at the moment they approve it. See [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant). ## Frequently asked questions ### Does Process Wholesale change my theme? Not with the permissions granted at install. Process Wholesale has read access to your published theme, which it uses to show **App Status**. You add its blocks yourself in the theme editor. Theme write access is an optional scope requested only when you approve an Ada setup plan. ### Why does Process Wholesale need to edit customers? Wholesale status and discounts are customer tags. Approving an application replaces `B2B_Registeration` with `B2B`, and assigning a discount adds its discount tag. The app also sets tax exemption when you save a change to the tax exemption setting and when you use **Accept B2B**, **Reject B2B**, **Return to pending**, **Remove B2B access** or **Manage discount tags** on a customer. ### Why does Process Wholesale need to update orders? To add the order tag `processwholesale` to orders that received a Process Wholesale discount, so you can filter them in Shopify. ### Are the permissions different on each plan? No. The same scopes are requested on every plan. ## Related articles - [What data Process Wholesale stores and uses](https://docs.processwholesale.com/account/data-and-privacy) - [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant) - [How Process Wholesale works: customer tags, discounts and checkout](https://docs.processwholesale.com/getting-started/how-process-wholesale-works) - [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling) --- Source: https://docs.processwholesale.com/discounts/discount-types Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # Wholesale discount types compared: flat, tier, price list and cost plus markup Process Wholesale has four discount families: flat discounts (one percentage or amount off), tier discounts (the discount grows with product quantity, cart value, cart quantity or a customer's loyalty), price lists (a fixed price per product variant) and cost plus markup (the price is the product's cost plus a percentage). You create them in the Process Wholesale app under **Discounts**. Every discount has a discount tag, and a logged-in wholesale customer (B2B customer) gets it at Shopify checkout when they carry both the `B2B` tag and that discount tag. Flat and tier discounts work on every plan, the loyalty tier type needs Enterprise or Professional, and price lists and cost plus markup need Professional. **At a glance** - **Where:** Process Wholesale > **Discounts**, with the tabs **Flat Discounts**, **Tier Discounts**, **Price Lists** and **Cost-Plus Discounts** - **Who gets a discount:** Logged-in customers tagged `B2B` (any capitalization) who also carry the discount's tag. Pending customers tagged `B2B_Registeration` get no discount at checkout. - **How many:** Starter 1 discount, Enterprise and Professional 100 (flat and tier discounts counted together) - **Applied by:** Shopify automatic discounts that Process Wholesale creates in your store. You can see them in Shopify admin under **Discounts**. - **Also called:** wholesale pricing, B2B pricing, tiered pricing, volume pricing, quantity breaks, customer-specific pricing ## Every wholesale discount type side by side | Discount type | Based on | What it changes | Shopify automatic discount | Plan | Typical use | | --- | --- | --- | --- | --- | --- | | [Flat discount](https://docs.processwholesale.com/discounts/flat-discounts) | Nothing: the same discount every time | Each eligible item: percentage off or amount off per unit | B2B Order/Loyalty Discount | All plans (variant selection: Enterprise or Professional) | 20% off everything for approved wholesale customers | | [Quantity tier](https://docs.processwholesale.com/discounts/quantity-tier-discounts) (**Individual Product Quantity**) | Units of the same product in the cart | Each eligible item: percentage off, amount off or a fixed price per unit | B2B Order/Loyalty Discount | All plans | 1 to 9 units 10% off, 10 or more 20% off | | [Cart value tier](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) (**Total Cart Value**) | Cart total after flat and quantity discounts | The whole order: percentage off or amount off | B2B Order/Loyalty Discount | All plans | Orders of 500 or more get 5% off | | [Cart quantity tier](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) (**Total Cart Quantity**) | Total units in the cart, or of selected products or collections | The eligible items as a group: percentage off or amount off | B2B Cart Quantity Discount | All plans | 50 or more units of any mix get 10% off | | [Loyalty tier](https://docs.processwholesale.com/discounts/loyalty-discounts) (**Loyalty**) | The customer's spend or number of orders over the last N days | The whole order: percentage off or amount off, on top of other discounts | B2B Order/Loyalty Discount | Enterprise or Professional | Customers who spent 5,000 in the last 365 days get an extra 5% off | | [Price list](https://docs.processwholesale.com/discounts/price-lists) | A price you type for each variant | Each listed variant: the customer pays your price | B2B Price List Discount | Professional | A negotiated price sheet for a key account | | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | The variant's **Cost per item** in Shopify | Each eligible item: price becomes cost plus your markup percentage | B2B Cost Plus Markup Discount | Professional | Distributors pay cost plus 25% | Cost plus markup never raises a price: when cost plus markup comes to the regular price or more, the customer pays the regular price. ## Flat discounts A flat discount gives the same percentage off (**Percentage Off**) or amount off each unit (**Price Off**) to every eligible item, whatever the quantity. It can cover **All products**, selected products, selected collections or, on Enterprise or Professional, selected variants. When a customer has several flat discounts, the one with the highest priority (1 is highest) wins for each product. Set it up in [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts). ## Tier discounts A tier discount has a list of tiers, and the tier the customer reaches decides the discount. All four kinds are created on the same form under **Discounts > Tier Discounts**, with the **Method** selector: - **Individual Product Quantity:** quantity breaks per product. Buying more units of one product lowers the price of that product. See [quantity tiers](https://docs.processwholesale.com/discounts/quantity-tier-discounts). - **Total Cart Value:** spend more, save more. The discount is on the whole order. See [cart value tiers](https://docs.processwholesale.com/discounts/cart-value-tier-discounts). - **Total Cart Quantity:** buy more units in total, of any mix, and save. See [cart quantity tiers](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts). - **Loyalty:** an extra discount for customers whose spend or order count over a period reaches a tier. Process Wholesale re-checks every 2 hours. See [loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts). ## Price lists A price list sets the exact price a customer pays for each product variant you add to it. It is the right choice for a negotiated price sheet where each product has its own price. Price lists need the Professional plan. See [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists). ## Cost plus markup Cost plus markup prices each eligible item at its cost plus a markup percentage. Process Wholesale reads the cost from the **Cost per item** field on each variant in Shopify. With a cost of 10.00 and a 20% markup, the customer pays 12.00. Cost plus markup needs the Professional plan. See [How to price wholesale products at cost plus a markup](https://docs.processwholesale.com/discounts/cost-plus-markup). ## Which wholesale discount types can apply together? A wholesale customer can carry several discount tags, and several discounts can apply to the same order: - **Flat discount and quantity tier on the same product:** only one applies to that product. The **Tag priority** setting under **Settings > Discount settings** decides which: **Prefer flat tag** (the default) or **Prefer tier tag**. Checkout follows **Tag priority** only after the **Settings** page has been saved once; until then it behaves as **Prefer tier tag**. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking#flat-discount-versus-quantity-tier-the-tag-priority-setting). - **Cart value tier and loyalty tier:** added on top of the flat and quantity tier discounts, on the same order. - **Cart quantity tier:** applied by its own automatic discount, B2B Cart Quantity Discount, alongside the others when the **Discount combinations** settings allow order discounts to combine. **Order Discounts** is checked by default. - **Price list and cost plus markup:** applied by their own automatic discounts. Whether they apply on the same order as flat and tier discounts depends on the **Price List Discount combinations** and **Cost Plus Markup Discount combinations** settings, which are off by default. - **One of each kind:** a customer gets at most one cart value tier, one cart quantity tier and one loyalty tier per order, even when they carry several tags of that kind. The full rules, with examples, are in [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). Shopify discount codes are covered in [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). **Example.** A customer carries a 10% flat discount for all products, a cart value tier of 5% from 500, and a 10% loyalty tier they have earned. Their cart totals 1,000.00. The flat discount takes 100.00 off. The cart value is now 900, so the cart tier takes 5% of 900, which is 45.00. The loyalty tier takes 10% of the remaining 855.00, which is 85.50. The total wholesale discount is 230.50, and the customer pays 769.50. ## Which one should I use? | You want to | Use | | --- | --- | | Give the same discount on everything (or on a set of products) | A [flat discount](https://docs.processwholesale.com/discounts/flat-discounts) with **Percentage Off** or **Price Off** | | Lower the price per product the more units of that product are bought | A [quantity tier](https://docs.processwholesale.com/discounts/quantity-tier-discounts) (**Individual Product Quantity**) | | Reward larger orders by value: spend more, save more | A [cart value tier](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) (**Total Cart Value**) | | Reward larger orders by unit count, across any mix of products | A [cart quantity tier](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) (**Total Cart Quantity**) | | Reward repeat buyers with an extra discount | A [loyalty tier](https://docs.processwholesale.com/discounts/loyalty-discounts) (Enterprise or Professional) | | Charge an exact price per product or variant | A [price list](https://docs.processwholesale.com/discounts/price-lists) (Professional), or a quantity tier with **Fixed Price** | | Base wholesale prices on what each product costs you | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) (Professional) | Different customer groups can get different discounts: create one discount per group and give each group its own discount tag. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ## What every discount type has in common - **The discount tag is the link.** Creating a discount does not give it to anyone. A customer gets it when the discount tag is on their Shopify customer record, together with `B2B`. Add tags from the **Customers** page, automatically on approval, or to all wholesale customers at once with **Bulk assign discount**. - **Tag names** use lower-case letters and numbers only, must not contain `b2b`, and cannot be changed after the discount is saved. Give every discount its own tag name, even across discount types: a customer who carries a tag gets every discount that uses it, except that a flat discount and a quantity, cart value or loyalty tier with the same name never both apply. - **Checkout applies the price.** Process Wholesale does not change your product prices in Shopify. The discount is applied at Shopify checkout, and in draft orders that have a customer (see [draft orders](https://docs.processwholesale.com/discounts/draft-orders)). - **Storefront display is separate.** The [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) shows discount tables on product pages, and [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) shows wholesale prices on its order form. ## Frequently asked questions ### What kinds of wholesale discounts can I set up with Process Wholesale? Process Wholesale offers flat discounts, quantity tiers, cart value tiers, cart quantity tiers, loyalty tiers, price lists and cost plus markup. Flat and the first three tier kinds work on every plan, loyalty needs Enterprise or Professional, and price lists and cost plus markup need Professional. ### Can a customer get more than one wholesale discount on the same order? Yes. A customer can carry several discount tags. Per product, one flat discount or quantity tier applies, and a cart value tier, cart quantity tier and loyalty tier can be added on top for the order. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ### Do wholesale customers need a special tag to get a discount? Yes, two tags. The customer needs the `B2B` tag, which Process Wholesale adds when you approve them, and the discount tag of each discount they should get. ### How many discounts can I create on my plan? Starter allows 1 discount, and Enterprise and Professional 100. Flat and tier discounts count together toward the limit. Current plan prices are shown on the Shopify plan page that opens from **Plan** in the app. ### Do wholesale discounts change the prices shown in my theme? No. Your theme keeps showing the regular price. The discount is applied at checkout, and the Product Wholesale block and Quick Buy show wholesale prices to wholesale customers on the storefront. ## Related articles - [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts) - [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/discounts/flat-discounts Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # How to create a flat wholesale discount A flat discount in Process Wholesale gives every wholesale customer (B2B customer) who carries its discount tag the same percentage off, or the same amount off each unit, on all products or on the products, collections or variants you choose. Create it in the Process Wholesale app under **Discounts > Flat Discounts > Create new tag**. It is applied at Shopify checkout to logged-in customers tagged `B2B`, and it is available on every plan; selecting individual variants needs Enterprise or Professional. A flat discount is also called a flat tag or a customer tag discount. **At a glance** - **Plan:** All plans. Starter 1 discount, Enterprise and Professional 100 (flat and tier discounts counted together). **Select individual variants** needs Enterprise or Professional. - **Where:** Process Wholesale > **Discounts > Flat Discounts** - **Applies to:** Logged-in customers tagged `B2B` who also carry the discount tag - **Discount:** **Percentage Off** or **Price Off** (an amount off each unit), the same for any quantity - **Applied by:** the Shopify automatic discount **B2B Order/Loyalty Discount** ## Steps to create a flat discount 1. In Shopify admin, open the **Process Wholesale** app and select **Discounts**. The **Flat Discounts** tab opens first. 2. Select **Create new tag**. If the button reads **Upgrade to create more** or **Discount limit reached**, your plan's discount limit is reached (see "Limits and things to know"). 3. In **Discount tag name**, enter the name of the discount. This is also the customer tag that grants it, for example `wholesale20`. The field starts with a suggested name such as `newflatdiscount482`. Use lower-case letters and numbers only: capital letters are turned into lower case and other characters are removed as you type. The name cannot contain `b2b`: the field does not accept a change that would create it. 4. In **Discount type**, choose one option: - **Percentage Off** ("Give a percentage off the listed price."): enter the percentage in **Value**. - **Price Off** ("Give a fixed amount off the listed price."): enter the amount in **Amount**, in your store currency. Values can have up to 2 decimals. The field starts at 0. 5. In **Applies to**, choose which products the discount covers: - **All products** (the default) - **Select individual products**: select **Select product** and pick products in the Shopify picker. The button then shows "{count} products selected". - **Select collections**: select **Select collection** and pick collections. - **Select individual variants**: select **Select variant** and pick variants. This option is available on Enterprise or Professional; on other plans it cannot be selected. 6. Check the **Summary** card on the right, then select **Save** in the save bar at the top of the page. Process Wholesale shows "Discount created" and returns to the **Flat Discounts** list. The new discount gets the lowest priority in the list. 7. Give the discount tag to the customers who should get it, from the **Customers** page, by auto-assign on approval, or with **Bulk assign discount**. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). Creating the discount does not add its tag to anyone. ### Validation messages on the flat discount form | Message | Cause | | --- | --- | | Discount tag name is required. Please enter a discount tag name. | **Discount tag name** is empty | | A discount with the tag name "x" already exists. Please use a different tag name. | Another flat discount already uses the name | | Discount value cannot exceed 100 in percentage. Please change discount value to a value less than 100. | **Percentage Off** is above 100 | | 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) | ## How to set the priority between flat discounts The **Flat Discounts** list shows the columns **Priority**, **Customer Tag**, **Discount**, **Products**, **Collections** and **Manage**, sorted by priority. "1 = Highest Priority". Use the up and down arrows on a row to swap its priority with the row next to it. When a customer carries more than one flat discount, Process Wholesale uses, for each product, the highest-priority flat discount that covers that product. The **Discount** column shows `10%` for a percentage, `$5` for an amount off, or `Fixed` for a fixed price. The **Products** column shows the number of products the discount covers. ## What your customers see - **On product pages:** with the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) in your theme, a logged-in customer with a tag that contains `b2b` and the discount tag sees one row in the product discount table: quantity "Any", the discount and the wholesale price. For a 20.00 product with **Price Off** 5, the row reads "Any | $5.00 | $15.00". The theme's own price stays the regular price. - **In Quick Buy:** on Enterprise or Professional, customers tagged `B2B` see the discounted price in the [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) order form. A 50.00 product with 20% off shows 40.00 and "20% off"; with 5.00 off it shows 45.00 and "$5.00 off". - **At checkout:** the discount is applied to the order. Its label starts with `PW:` followed by the discount tag names, for example `PW: wholesale20`. ## How the flat discount is calculated at checkout Process Wholesale applies a flat discount only when 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 product in the cart, Process Wholesale picks the customer's highest-priority flat discount that covers that product, then: - **Percentage Off:** discount per unit = unit price × percentage ÷ 100 - **Price Off:** discount per unit = the amount, converted to the customer's currency - The line discount is the per-unit discount × the quantity. All flat and tier discounts on the order are added together and applied as one discount on the order. **Examples** - 10% flat discount, 2 units at 50.00: 5.00 off each, 10.00 off in total. - **Price Off** 5, 2 units at 50.00: 10.00 off. When the customer pays in a currency whose exchange rate is 2, the amount becomes 10.00 per unit and 20.00 off in total. - A flat discount limited to a collection, and the cart has no product from that collection: no flat discount. **Flat discount or quantity tier.** When a product is covered by both a flat discount and a [quantity tier](https://docs.processwholesale.com/discounts/quantity-tier-discounts), only one applies. **Settings > Discount settings > Tag priority** decides: **Prefer flat tag** (the default) or **Prefer tier tag**. Checkout follows **Tag priority** only after the **Settings** page has been saved once; until then it behaves as **Prefer tier tag**. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking#flat-discount-versus-quantity-tier-the-tag-priority-setting). **When changes apply.** A change to an existing discount applies at checkout shortly after you save. Process Wholesale re-checks its checkout discounts every 5 minutes, so a new discount tag applies within about 5 minutes. ## Limits and things to know - **Plan limits.** Starter allows 1 discount, Enterprise and Professional 100, counting flat and tier discounts together. On Starter at the limit, the button reads **Upgrade to create more**; on Enterprise or Professional it reads **Discount limit reached**. Opening the create form at the limit on Starter shows a message that the Starter plan is limited to 1 discount, and the form returns to the **Discounts** page. - **No fixed price on new flat discounts.** **Fixed Price** ("Change price from the listed price to a set price.") appears only when you edit a flat discount that already uses it. To set an exact price, use a [price list](https://docs.processwholesale.com/discounts/price-lists) (Professional) or a quantity tier with **Fixed Price**. - **Tag names cannot be changed.** **Discount tag name** is locked after the discount is saved. To rename, create a new discount and move customers to the new tag. - **Use a tag name no other discount uses**, including tier, price list and cost plus discounts. When a flat discount shares its tag name with a quantity, cart value or loyalty tier, only one of the two applies at checkout. When it shares the name with a cart quantity tier, price list or cost plus markup discount, every customer who carries the tag gets both. - **The summary always says "on all products".** The **Summary** card reads, for example, "10% off on all products" even when the discount covers selected items. The **Details** line below it shows the real selection. > **Important:** Keep a **Price Off** amount below the price of every product the discount covers. An amount larger than a product's price takes more than that product's price off the order. - **Deleting is immediate.** **Delete** on the discount's page has no confirmation step and removes the tag from every customer tagged `B2B`. See [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A wholesale customer gets no flat discount | The customer does not have both `B2B` and the discount tag, or is not logged in | In Shopify admin, open the customer and check both tags. See [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). | | The discount applies to some products only | **Applies to** is limited to products, collections or variants, or a higher-priority flat discount covers those products | Open the discount and check **Applies to** and the **Details** line; check the order in the **Flat Discounts** list. | | A quantity tier applies instead of the flat discount | **Tag priority** is **Prefer tier tag** | Change it under **Settings > Discount settings > Tag priority**. | | I cannot type my tag name | The name contains `b2b`, capitals or other characters | Use lower-case letters and numbers without `b2b`. | | **Select individual variants** is unavailable | The store is not on Enterprise or Professional | Upgrade, or select products or collections instead. | ## Frequently asked questions ### Can a flat wholesale discount apply only to some products or collections? Yes. In **Applies to**, choose **Select individual products** or **Select collections**, or **Select individual variants** on Enterprise or Professional. Products outside the selection get no flat discount. ### Which flat discount applies when a customer has more than one? The one with the highest priority (the lowest number in the **Priority** column) that covers the product. Change the order with the arrows in the **Flat Discounts** list. ### Can I set a fixed wholesale price with a flat discount? No. New flat discounts offer **Percentage Off** and **Price Off**. For an exact price per product, use a [price list](https://docs.processwholesale.com/discounts/price-lists) on Professional, or a [quantity tier](https://docs.processwholesale.com/discounts/quantity-tier-discounts) with **Fixed Price**. ### Do customers get the flat discount as soon as I create it? No. A customer gets the discount only after its discount tag is added to their customer record, together with `B2B`. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ### Does a flat discount work with a Shopify discount code? That depends on the **Discount combinations** settings under **Settings > Discount settings**. See [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). ## Related articles - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount) - [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) --- Source: https://docs.processwholesale.com/discounts/quantity-tier-discounts Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # How to set up quantity breaks (volume pricing) for wholesale customers A quantity tier in Process Wholesale gives a wholesale customer (B2B customer) a bigger discount on a product the more units of that product they buy, for example 10% off for 1 to 9 units and 20% off for 10 or more. Create it in the Process Wholesale app under **Discounts > Tier Discounts > Create new discount**, and choose **Individual Product Quantity** as the **Method**. It applies at Shopify checkout to logged-in customers tagged `B2B` who carry the discount tag, on every plan. Quantity tiers are also called quantity breaks, volume pricing, bulk pricing or price breaks. **At a glance** - **Plan:** All plans. **Select individual variants** needs Enterprise or Professional. Discount count: Starter 1, Enterprise and Professional 100 (flat and tier discounts counted together). - **Where:** Process Wholesale > **Discounts > Tier Discounts**, **Method** = **Individual Product Quantity** - **Applies to:** Logged-in customers tagged `B2B` who also carry the discount tag - **Counts:** Units of the same product in the cart, all eligible variants together - **Discount per tier:** **Fixed Price**, **Percentage Off** or **Price Off**, per unit - **Applied by:** the Shopify automatic discount **B2B Order/Loyalty Discount** ## Steps to create a quantity tier discount 1. In Shopify admin, open the **Process Wholesale** app, select **Discounts**, then the **Tier Discounts** tab. 2. Select **Create new discount**. The page **Create tier** opens. 3. In **Discount tag name**, enter the name of the discount, which is also the customer tag that grants it, for example `case12`. The field starts with a suggested name such as `newtierdiscount731`. Use lower-case letters and numbers only, and do not include `b2b`. 4. In **Method**, choose **Individual Product Quantity**. The form starts on **Total Cart Value**, so change it. Changing the method resets **Applies to** to **All products**. 5. In **Applies to**, choose which products the tiers cover: - **All products** - **Select individual products**, then **Select product** - **Select collections**, then **Select collection** - **Select individual variants**, then **Select variant** (Enterprise or Professional; on other plans the option cannot be selected) 6. Select **Add new tier**. A card **Tier 1** appears with these fields: - **Discount type:** **Fixed Price** (the customer pays this price per unit), **Percentage Off** or **Price Off** (an amount off each unit). A new tier starts on **Price Off** with a discount of 40. - **Min. quantity:** the number of units where this tier starts. The first tier starts at 0. Whole numbers only. - **Max Quantity:** not editable. When you save, Process Wholesale sets it to one less than the next tier's minimum. The last tier has no maximum. - **Discount:** the percentage (`%`) or amount (`$`, in your store currency). 7. Select **Add new tier** again for each further tier. Each new tier starts at the previous tier's minimum plus 1; change **Min. quantity** to the quantity you want. To remove a tier, select the delete icon on its card. 8. Check the **Summary** card, which lists each tier with its discount, for example "10+: 20% off" for the last tier. Then select **Save** in the save bar. Process Wholesale sets each tier's maximum, shows "Tier created" and returns to the list. 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](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). **Example setup.** Tier 1: **Percentage Off**, **Min. quantity** 1, **Discount** 10. Tier 2: **Percentage Off**, **Min. quantity** 10, **Discount** 20. Process Wholesale saves the ranges 1 to 9 and 10 or more. ### Validation messages on the tier form | Message | Cause | | --- | --- | | Please enter a discount tag name. | **Discount tag name** is empty | | 'B2B' and its variations are not allowed | The name contains `b2b` | | A tier discount with the tag name "x" already exists. Please use a different tag name. | Another tier discount already uses the name | | Please add at least one tier range. | No tier was added | | Tier 2 minimum value (5) must be greater than Tier 1 minimum value (10). | A tier starts at or below the tier before it | | Selected items are missing. Please select at least one product. | **Select individual products** with nothing selected (or "collection." / "variant." for the other options) | The error banner ends with "If you need help, contact our support at support@casualecommerce.com." ## What your customers see - **On product pages:** with the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), a logged-in customer with a tag that contains `b2b` and the discount tag sees a table with the columns **Minimum Cart Quantity**, **Discount** and **Wholesale Price**, one row per tier. For a 20.00 product with the example setup, the rows read "1 - 9 | 10% | $18.00" and "10+ | 20% | $16.00". A **Fixed Price** tier shows the fixed price in both columns. The theme's own price stays the regular price. - **In Quick Buy:** on Enterprise or Professional, customers tagged `B2B` see the price for the quantity they enter in the [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) form, and the discount column lists every tier, for example "1-9 10% off" and "10+ 20% off". Quick Buy counts all rows of the same product together: 12 units of a 10.00 product show 8.00 each, 96.00 for the row. - **At checkout:** the discount is applied to the order, labeled `PW:` followed by the discount tag names. ## How quantity tiers are calculated at checkout Process Wholesale applies a quantity tier only when 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. 1. **Quantity is counted per product.** Process Wholesale adds up the units of each product in the cart, across all its variants that the tier covers. 6 Small and 6 Large of the same T-shirt count as 12. Variants outside a **Select individual variants** selection are not counted, unless one of the customer's flat discounts covers them. 2. **The tier is the one whose range contains that quantity.** Above the last tier's minimum, the last tier applies. 3. **The discount is per unit:** - **Percentage Off:** unit price × percentage ÷ 100 - **Price Off:** the amount, converted to the customer's currency - **Fixed Price:** unit price minus the fixed price, so each unit costs the fixed price 4. **Line discount** = per-unit discount × quantity. All flat and tier discounts on the order are added together and applied as one discount. **Example.** A 20.00 product with the example setup. The customer buys 12 units: Tier 2 applies, 20% off is 4.00 per unit, 48.00 off in total, and the customer pays 192.00. With 5 units, Tier 1 applies: 2.00 off each, 10.00 in total. **Fixed Price example.** A tier "10 or more, **Fixed Price** 15" on a 20.00 product: 5.00 off each unit, so each unit costs 15.00. **Example with a cart value tier.** Tier "0 to 5 units, 40% off" on product B only. The cart has 2 of product A at 949.95 and 3 of product B at 885.95. Product A gets nothing. Product B gets 40% off: 354.38 per unit, 1,063.14 in total. The customer's cart value tier (13.00 off below 101, 24.00 off from 101) then adds 24.00, for a total discount of 1,087.14. See [cart value tiers](https://docs.processwholesale.com/discounts/cart-value-tier-discounts). **Flat discount or quantity tier.** When a product is covered by both a [flat discount](https://docs.processwholesale.com/discounts/flat-discounts) and a quantity tier, only one applies. **Settings > Discount settings > Tag priority** decides: **Prefer flat tag** (the default) or **Prefer tier tag**. Checkout follows **Tag priority** only after the **Settings** page has been saved once; until then it behaves as **Prefer tier tag**. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking#flat-discount-versus-quantity-tier-the-tag-priority-setting). With a flat 10% on all products and a tier "10 or more = 20%", buying 12 units gives 10% with **Prefer flat tag** and 20% with **Prefer tier tag**. **When changes apply.** A change to an existing tier applies at checkout shortly after you save. Process Wholesale re-checks its checkout discounts every 5 minutes, so a new discount tag applies within about 5 minutes. ## Limits and things to know - **Plan limits.** Starter allows 1 discount, Enterprise and Professional 100, counting flat and tier discounts together. At the limit the button reads **Upgrade to create more**, or **Discount limit reached** on Enterprise and Professional. - **Below the first tier, no quantity discount.** A product bought in a quantity under the first tier's minimum gets no tier discount. Start the first tier at 0 or 1 to cover every quantity. > **Important:** With **Tag priority** set to **Prefer tier tag**, a product covered by a quantity tier never falls back to the customer's flat discount, even when the quantity is under the first tier. Start the first tier at 0 or 1, or keep **Prefer flat tag**. > **Important:** Keep **Price Off** and **Fixed Price** amounts below the price of every product the tier covers. A **Price Off** larger than the price takes more than the product's price off the order, and a **Fixed Price** above the product's price reduces the customer's other wholesale discounts on the order. - **Percentages are not capped.** The tier form accepts any percentage. Enter 100 or less. - **One quantity tier per product.** When a customer carries several quantity tiers that cover the same product, only one applies. Give each customer one quantity tier per product. - **Tag names cannot be changed** after saving, and a tag name should not be reused by a discount of another type: with a flat discount of the same name only one of the two applies, and with a price list or cost plus markup discount of the same name a customer who carries the tag gets both. - **Deleting is immediate.** **Delete** has no confirmation step and removes the tag from every customer tagged `B2B`. See [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | No discount at a low quantity | The quantity is under the first tier's **Min. quantity** | Add a first tier that starts at 0 or 1. | | The flat discount stopped applying to a product | **Tag priority** is **Prefer tier tag** and the product is covered by a quantity tier | Start the first tier at 0 or 1, or switch to **Prefer flat tag**. | | Variants are not counted together | **Applies to** is **Select individual variants** and only some variants are selected | Select every variant that should count, or use **Select individual products**. | | "Tier 2 minimum value … must be greater than …" | Two tiers have the same or a reversed **Min. quantity** | Give each tier a higher minimum than the tier before it. | ## Frequently asked questions ### Do different variants of a product count toward the same quantity tier? Yes. Process Wholesale adds up all units of the same product that the tier covers, across variants. With **Select individual variants**, only the selected variants are counted, plus any variants of the product that one of the customer's flat discounts covers. ### Do different products count toward the same quantity tier? No. Each product is counted on its own. To count units across different products, use a [cart quantity tier](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts). ### Can a quantity tier set a fixed price per unit? Yes. Choose **Fixed Price** as the tier's **Discount type** and enter the price. Each unit then costs that price, for example 15.00 instead of 20.00. ### Do I set the maximum quantity of each tier? No. When you save, Process Wholesale sets **Max Quantity** to one less than the next tier's minimum, and the last tier has no maximum. ## Related articles - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [How to give a wholesale discount based on total cart quantity](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [How Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices) --- Source: https://docs.processwholesale.com/discounts/cart-value-tier-discounts Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # How to give a wholesale discount based on cart total A cart value tier in Process Wholesale gives a wholesale customer (B2B customer) a discount on the whole order once their cart total reaches an amount you set, for example 5% off from 500 and 10% off from 1,000. Create it in the Process Wholesale app under **Discounts > Tier Discounts > Create new discount**, with **Total Cart Value** as the **Method**. It applies at Shopify checkout to logged-in customers tagged `B2B` who carry the discount tag, on every plan. This is also called a spend more, save more discount or an order value discount. **At a glance** - **Plan:** All plans. Discount count: Starter 1, Enterprise and Professional 100 (flat and tier discounts counted together). - **Where:** Process Wholesale > **Discounts > Tier Discounts**, **Method** = **Total Cart Value** (the tier list calls it "Total Cart total") - **Applies to:** Logged-in customers tagged `B2B` who also carry the discount tag - **Measured on:** The whole cart, after flat and quantity tier discounts, rounded down to a whole number - **Discount per tier:** **Percentage Off** or **Price Off**, on the whole order - **Applied by:** the Shopify automatic discount **B2B Order/Loyalty Discount** ## Steps to create a cart value tier discount 1. In Shopify admin, open the **Process Wholesale** app, select **Discounts**, then the **Tier Discounts** tab. 2. Select **Create new discount**. The page **Create tier** opens. 3. In **Discount tag name**, enter the name of the discount, which is also the customer tag that grants it, for example `spend500`. The field starts with a suggested name such as `newtierdiscount731`. Use lower-case letters and numbers only, and do not include `b2b`. 4. In **Method**, keep **Total Cart Value**, the option the form starts on. A cart value tier has no **Applies to** setting: the whole cart counts. 5. Select **Add new tier**. A card **Tier 1** appears with these fields: - **Discount type:** **Percentage Off** or **Price Off** (an amount off the order). A new tier starts on **Price Off** with a discount of 40. - **Min Amount:** the cart total where this tier starts, in your store currency. Whole numbers only. The first tier starts at 0. - **Max Amount:** not editable. When you save, Process Wholesale sets it to one less than the next tier's minimum. The last tier has no maximum. - **Discount:** the percentage (`%`) or amount (`$`, in your store currency). 6. Select **Add new tier** for each further tier, and set its **Min Amount**. 7. Check the **Summary** card, which lists each tier with its discount, for example "$1000+: 10% off" for the last tier, then select **Save** in the save bar. Process Wholesale sets each tier's maximum and shows "Tier created". 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](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). The tier form's validation messages are the same for every method; see [the list of tier form messages](https://docs.processwholesale.com/discounts/quantity-tier-discounts#validation-messages-on-the-tier-form). ## What your customers see - **On product pages:** with the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), a logged-in customer with a tag that contains `b2b` and the discount tag sees a cart discount table with the columns **Minimum Cart Amount** and **Cart Discount** on every product page. Tiers of 100 to 249 at 5% and 250 or more at 10% read "$100.00 - $249.00 | 5%" and "$250.00+ | 10%". - **In Quick Buy:** on Enterprise or Professional, customers tagged `B2B` see a **Cart Discount Tiers** box in the [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) form, for example "$500.00-$999.99 5% off" and "$1,000.00+", and a **Cart discount:** line in the order summary. With a discounted subtotal of 600 and a tier "500 to 999, 5%", the line shows 30.00. - **At checkout:** the discount is applied to the order, labeled `PW:` followed by the cart value tag and the customer's other discount tags, for example `PW: spend500 & wholesale20`. ## How cart value tiers are calculated at checkout Process Wholesale applies a cart value tier only when 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. 1. **Cart value.** Process Wholesale adds up every line in the cart, subtracts the customer's [flat discount](https://docs.processwholesale.com/discounts/flat-discounts) and [quantity tier](https://docs.processwholesale.com/discounts/quantity-tier-discounts) discounts, and rounds the result down to a whole number. Every line counts, including products with no other discount. 2. **Tier.** The cart value is compared with each tier's range. Above the last tier's minimum, the last tier applies. When the customer pays in another currency, the tier amounts are converted at the checkout's exchange rate. 3. **Discount:** - **Percentage Off:** the percentage of the cart total after the flat and quantity tier discounts - **Price Off:** the amount, once per order, converted to the customer's currency 4. A [loyalty discount](https://docs.processwholesale.com/discounts/loyalty-discounts), if the customer has one, is applied after the cart value tier. **Example.** The cart totals 1,000.00. The customer has a 10% flat discount, which takes 100.00 off. The cart value is 900, which reaches the tier "500 or more, 5% off", so the cart value tier takes 5% of 900.00, which is 45.00. The total wholesale discount is 145.00 and the customer pays 855.00. **Rounding example.** Tiers start at 500. After line discounts the cart is 499.99. Process Wholesale counts it as 499, so no tier applies until the cart reaches 500.00. **Example with a high last tier.** Tiers "0 to 100: 13.00 off" and "101 or more: 24.00 off". A cart worth 3,494.61 after its quantity discount counts as 3,494, which is above the last tier's minimum, so 24.00 comes off. **When changes apply.** A change to an existing tier applies at checkout shortly after you save. Process Wholesale re-checks its checkout discounts every 5 minutes, so a new discount tag applies within about 5 minutes. ## Limits and things to know - **One cart value tier per customer.** When a customer carries more than one cart value tier discount, only one applies. Give each customer one cart value tier. - **No product selection.** A cart value tier always measures and discounts the whole order. To count only some products, use a [cart quantity tier](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) with **Select individual products** or **Select collections**. - **Whole-number amounts.** **Min Amount** takes whole numbers, and the cart value is rounded down before it is compared. - **Plan limits.** Starter allows 1 discount, Enterprise and Professional 100, counting flat and tier discounts together. - **Quick Buy shows an estimate.** When a customer has both a cart value tier and a cart quantity tier, the Quick Buy **Cart discount:** line shows the larger of the two. At checkout both can apply. Checkout shows the final amount. - **Percentages are not capped.** The tier form accepts any percentage. Enter 100 or less. - **Tag names cannot be changed** after saving, and a tag name should not be reused by a discount of another type: with a flat discount of the same name only one of the two applies, and with a price list or cost plus markup discount of the same name a customer who carries the tag gets both. - **Deleting is immediate.** **Delete** has no confirmation step and removes the tag from every customer tagged `B2B`. See [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The cart total looks high enough but no cart discount applies | The cart value is measured after flat and quantity tier discounts, and rounded down | Compare the tier minimum with the cart total after those discounts. | | A different cart value tier applies than expected | The customer carries more than one cart value tier discount | Remove the extra discount tag from the customer. | | The cart discount table is missing on product pages | The Product Wholesale block is not in the theme, or the customer is not logged in with the tags | See [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing). | | The amount in Quick Buy differs from checkout | Quick Buy shows one cart discount as an estimate | No fix needed. Checkout applies the final discount. | ## Frequently asked questions ### Is the cart value tier checked before or after other wholesale discounts? After the flat and quantity tier discounts. A 1,000.00 cart with a 10% flat discount counts as 900 for the cart value tier. The loyalty discount is applied after the cart value tier. ### Does a cart value tier discount the whole order or each product? The whole order. **Price Off** takes the amount off once per order, and **Percentage Off** takes the percentage of the order after flat and quantity tier discounts. ### How is the cart total rounded for cart value tiers? Down to a whole number. A cart of 499.99 counts as 499 and does not reach a tier that starts at 500. ### Can I give a cart value tier and a flat discount to the same customer? Yes. The flat discount applies per product, and the cart value tier is added on top for the order. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## Related articles - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [How to give a wholesale discount based on total cart quantity](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) - [How loyalty discounts work for repeat wholesale customers](https://docs.processwholesale.com/discounts/loyalty-discounts) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) --- Source: https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # How to give a wholesale discount based on total cart quantity A cart quantity tier in Process Wholesale gives a wholesale customer (B2B customer) a discount based on the total number of units in their cart, across any mix of products, for example 5% off for 1 to 9 units and 10% off for 10 or more. You can count all products or only selected products or collections. Create it in the Process Wholesale app under **Discounts > Tier Discounts > Create new discount**, with **Total Cart Quantity** as the **Method**. It applies at Shopify checkout to logged-in customers tagged `B2B` who carry the discount tag, on every plan. This is also called a mix and match discount. **At a glance** - **Plan:** All plans. Discount count: Starter 1, Enterprise and Professional 100 (flat and tier discounts counted together). - **Where:** Process Wholesale > **Discounts > Tier Discounts**, **Method** = **Total Cart Quantity** - **Applies to:** Logged-in customers tagged `B2B` who also carry the discount tag - **Counts:** All units in the cart, or only units of the selected products or collections - **Discount per tier:** **Percentage Off** or **Price Off**, on the counted items as a group - **Applied by:** its own Shopify automatic discount, **B2B Cart Quantity Discount** ## Steps to create a cart quantity tier discount 1. In Shopify admin, open the **Process Wholesale** app, select **Discounts**, then the **Tier Discounts** tab. 2. Select **Create new discount**. The page **Create tier** opens. 3. In **Discount tag name**, enter the name of the discount, which is also the customer tag that grants it, for example `mix24`. The field starts with a suggested name such as `newtierdiscount731`. Use lower-case letters and numbers only, and do not include `b2b`. 4. In **Method**, choose **Total Cart Quantity**. The form starts on **Total Cart Value**, so change it. Changing the method resets **Applies to** to **All products**. 5. In **Applies to**, choose which products are counted and discounted: - **All products**: every unit in the cart counts - **Select individual products**, then **Select product** - **Select collections**, then **Select collection** Cart quantity tiers cannot be limited to individual variants. 6. Select **Add new tier**. A card **Tier 1** appears with these fields: - **Discount type:** **Percentage Off** or **Price Off** (an amount off). A new tier starts on **Price Off** with a discount of 40. - **Min. quantity:** the number of units where this tier starts. Whole numbers only. The first tier starts at 0. - **Max Quantity:** not editable. When you save, Process Wholesale sets it to one less than the next tier's minimum. The last tier has no maximum. - **Discount:** the percentage (`%`) or amount (`$`, in your store currency). 7. Select **Add new tier** for each further tier, and set its **Min. quantity**. 8. Check the **Summary** card, then select **Save** in the save bar. Process Wholesale sets each tier's maximum and shows "Tier created". 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](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). The tier form's validation messages are the same for every method; see [the list of tier form messages](https://docs.processwholesale.com/discounts/quantity-tier-discounts#validation-messages-on-the-tier-form). ## What your customers see - **On product pages:** with the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), a logged-in customer with a tag that contains `b2b` and the discount tag sees a cart quantity table with the columns **Minimum Cart Quantity** and **Cart Discount**, for example "1 - 9 | 5%" and "10+ | 10%". When the tier counts selected products or collections, the table appears only on those products' pages. - **In Quick Buy:** on Enterprise or Professional, customers tagged `B2B` see the tiers in the **Cart Discount Tiers** box of the [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) form when they have no cart value tier, and the discount in the **Cart discount:** line of the order summary. A tier limited to products or collections counts only those products. - **At checkout:** the discount appears as its own discount, labeled `PW:` followed by the discount tag, for example `PW: mix24`. ## How cart quantity tiers are calculated at checkout Process Wholesale applies a cart quantity tier only when 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. 1. **Eligible items.** With **All products**, every line in the cart. With **Select individual products** or **Select collections**, only the lines of those products. 2. **Quantity.** The total number of units on the eligible lines, across all products. 3. **Tier.** The tier whose range contains that quantity. Above the last tier's minimum, the last tier applies. Below the first tier's minimum, there is no discount. 4. **Discount:** - **Percentage Off:** the percentage of the eligible items' total - **Price Off:** the amount, once, converted to the customer's currency 5. The discount is applied to the eligible items only. Other items in the cart are not discounted by it. **Example.** Tiers "1 to 9 units: 5% off" and "10 or more: 10% off", **All products**. The cart has 2 units at 50.00 and 8 units at 10.00: 10 units worth 180.00. The 10-or-more tier applies, so the discount is 10% of 180.00, which is 18.00. **Example with selected products.** The same tiers, limited to product 1. The cart has 2 units of product 1 at 50.00 and 8 units of product 2 at 10.00. Only the 2 units of product 1 count, so the 1 to 9 tier applies: 5% of 100.00, which is 5.00. Product 2 is not discounted. **Example in another currency.** A **Price Off** tier of 3, and the customer pays in a currency whose exchange rate is 2: 6.00 off. **With other wholesale discounts.** The cart quantity tier is a separate automatic discount from the one that applies flat, quantity, cart value and loyalty discounts. Whether both apply on the same order follows **Settings > Discount settings > Discount combinations**, where **Order Discounts** is checked by default. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). **When changes apply.** A change to an existing tier applies at checkout shortly after you save. Process Wholesale re-checks its checkout discounts every 5 minutes, so a new discount tag applies within about 5 minutes. ## Limits and things to know - **One cart quantity tier per customer.** When a customer carries more than one cart quantity tier discount, only one applies. Give each customer one cart quantity tier. - **No variant selection.** **Applies to** offers products and collections, not individual variants. All variants of a selected product count. - **Whole-number quantities.** **Min. quantity** takes whole numbers. - **Plan limits.** Starter allows 1 discount, Enterprise and Professional 100, counting flat and tier discounts together. - **Quick Buy shows an estimate.** When a customer has both a cart value tier and a cart quantity tier, the Quick Buy **Cart discount:** line shows the larger of the two. Checkout shows the final amount. - **Percentages are not capped.** The tier form accepts any percentage. Enter 100 or less. - **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](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | No cart quantity discount | The counted units are under the first tier's **Min. quantity**, or the cart has none of the selected products | Check **Applies to** and the first tier's minimum. | | The cart quantity discount applies but the flat discount does not, or the other way round | The two automatic discounts are not allowed to combine | Check **Order Discounts** under **Settings > Discount settings > Discount combinations**. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). | | The cart quantity table shows on some product pages only | The tier counts selected products or collections | No fix needed. The table appears on the products the tier covers. | | Some items in the cart are not discounted | Those products are outside **Applies to** | Add the products or their collection to the tier. | ## Frequently asked questions ### How is a cart quantity tier different from a quantity tier? A [quantity tier](https://docs.processwholesale.com/discounts/quantity-tier-discounts) counts units of each product on its own and discounts each unit of that product. A cart quantity tier counts units across all eligible products together and discounts them as a group. ### Can a cart quantity discount count only some products or collections? Yes. Choose **Select individual products** or **Select collections** in **Applies to**. Only those products are counted, and only they get the discount. ### Does a cart quantity tier discount the whole order? It discounts the eligible items. With **All products** that is every item in the cart; with selected products or collections, only those items. ### Can a cart quantity tier combine with other wholesale discounts? Yes, when **Order Discounts** is checked under **Settings > Discount settings > Discount combinations**, which is the default. See [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## Related articles - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts) - [How to give a wholesale discount based on cart total](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) --- Source: https://docs.processwholesale.com/discounts/loyalty-discounts Section: Discounts and pricing Plans: Enterprise, Professional Last verified: 2026-11-11 # How loyalty discounts work for repeat wholesale customers A loyalty tier in Process Wholesale gives a wholesale customer (B2B customer) an extra discount on the whole order once their spend, or their number of orders, over a period you choose reaches a tier, for example 5% off for customers who spent 5,000 or more in the last 365 days. Create it in the Process Wholesale app under **Discounts > Tier Discounts > Create new discount**, with **Loyalty** as the **Method**. Process Wholesale re-checks each customer's eligibility every 2 hours from their Shopify orders, and the discount stacks on top of the customer's other wholesale discounts at checkout. Loyalty tiers need the Enterprise or Professional plan. **At a glance** - **Plan:** Enterprise or Professional. Discount count: 100 (flat and tier discounts counted together). - **Where:** Process Wholesale > **Discounts > Tier Discounts**, **Method** = **Loyalty** - **Applies to:** Logged-in customers tagged `B2B` who carry the loyalty discount's tag and have earned a tier - **Measured on:** Purchase amount (in your store currency) or number of orders, over the last N days - **Recalculated:** Every 2 hours - **Discount per tier:** **Percentage Off** or **Price Off**, on the whole order, after all other wholesale discounts - **Applied by:** the Shopify automatic discount **B2B Order/Loyalty Discount** ## Before you start - The store is on Enterprise or Professional. On other plans the **Loyalty** option does not appear in **Method**. - Decide which customers can earn the discount. Process Wholesale checks only customers who carry the loyalty discount's own tag, so you add that tag to them after creating the discount. ## Steps to create a loyalty discount 1. In Shopify admin, open the **Process Wholesale** app, select **Discounts**, then the **Tier Discounts** tab. 2. Select **Create new discount**. The page **Create tier** opens. 3. In **Discount tag name**, enter the name of the discount, which is also the customer tag that makes a customer eligible, for example `loyal365`. The field starts with a suggested name such as `newtierdiscount731`. Use lower-case letters and numbers only, and do not include `b2b`. 4. In **Method**, choose **Loyalty**. A link **How do loyalty discounts work?** opens a short explanation in the app. 5. In the selector under it, choose what is measured: - **Purchase Amount** (the default): the total the customer spent - **Total number of orders**: how many orders the customer placed 6. In **Purchase Period: Last … Days**, enter the number of days to look back, for example 365 for the last year. The field starts at 0, which counts only orders from the current day. 7. Select **Add new tier**. A card **Tier 1** appears with these fields: - **Discount type:** **Percentage Off** or **Price Off** (an amount off the order). A new tier starts on **Price Off** with a discount of 40. - **Min Amount:** the spend, or the number of orders, where this tier starts. The label reads **Min Amount** for both. Whole numbers only. - **Max Amount:** not editable. When you save, Process Wholesale sets it to one less than the next tier's minimum. The last tier has no maximum. - **Discount:** the percentage (`%`) or amount (`$`, in your store currency). 8. Select **Add new tier** for each further tier, then select **Save** in the save bar. Process Wholesale shows "Tier created". 9. Add the loyalty discount's tag (here `loyal365`) to the wholesale customers who can earn it, from the **Customers** page, by auto-assign on approval, or to all wholesale customers with **Bulk assign discount**. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). The tier form's validation messages are the same for every method; see [the list of tier form messages](https://docs.processwholesale.com/discounts/quantity-tier-discounts#validation-messages-on-the-tier-form). ## How loyalty eligibility is measured Every 2 hours Process Wholesale recalculates eligibility for each loyalty discount. It looks at customers who have the tag `B2B`, have the loyalty discount's tag, and do not have the pending tag `B2B_Registeration`. **Which orders count.** All of the customer's Shopify orders, from any sales channel, whether or not they are wholesale orders, that: - were created on or after the start of the day N days ago, where N is the **Purchase Period**, - are confirmed, and - do not have the payment status voided or expired. **What is measured.** - **Purchase Amount:** the sum of each counted order's current total in Shopify, in your store currency. - **Total number of orders:** the number of counted orders. **Which tier is earned.** The tier whose range contains the customer's spend or order count. Above the last tier's minimum, the last tier is earned. A customer with no counted orders earns no tier. **Example of spend.** **Purchase Period** 90 days, recalculated on November 11, 2026: orders from August 13, 2026 onward count. The customer has two confirmed orders in that period with current totals of 250.00 and 500.00, and one from August 1. The spend is 250.00 + 500.00 = 750.00; the August 1 order does not count. **Example of order count.** **Total number of orders**, **Purchase Period** 30 days, Tier 1 **Min Amount** 3. A customer who placed 3 or more qualifying orders in the last 30 days earns the tier at the next recalculation, and gets the discount at checkout while they remain eligible. ## The loyalty tags Process Wholesale adds to customers Process Wholesale records the tier a customer has earned as an extra customer tag, which you can see on the customer in Shopify admin. The tag starts with `pw_loyalty_`, followed by the loyalty discount's tag name, two underscores and a number that identifies the tier, for example `pw_loyalty_loyal365__5511`. - When a customer earns a tier, Process Wholesale adds that tier's tag and removes the customer's other loyalty tags for the same discount. - When a customer no longer qualifies for a tier, Process Wholesale removes its tag at the next recalculation. - Do not add or edit these tags by hand. Process Wholesale manages them every 2 hours. ## What your customers see - **On product pages:** the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) does not show loyalty tiers. - **In Quick Buy:** customers tagged `B2B` who have earned a tier see "Eligible Loyalty discount :" with their tier in the **Cart Discount Tiers** box of the [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) form when they have no cart value or cart quantity tiers, and an estimate of the loyalty discount in the order summary. - **At checkout:** the loyalty discount is part of the wholesale discount on the order. The label starts with `PW:` and includes the loyalty discount's tag name. ## How the loyalty discount is calculated at checkout Process Wholesale applies a loyalty discount when the customer is logged in (or the order is a draft order with a customer), has the tag `B2B` in any capitalization, has the loyalty discount's tag, and has the `pw_loyalty_` tag of an earned tier. The discount applies to the whole order and is calculated last: - **Percentage Off:** the percentage of the cart total after flat, quantity tier and cart value tier discounts - **Price Off:** the amount, once per order, converted to the customer's currency **Example with a percentage.** The cart totals 1,000.00. A 10% flat discount takes 100.00, and a cart value tier of 5% takes 45.00, so 145.00 is off. A 10% loyalty tier takes 10% of the remaining 855.00, which is 85.50. The total wholesale discount is 230.50 and the customer pays 769.50. **Example with an amount.** A customer buys 1,000.00 of products with a 30% wholesale discount, so the order costs 700.00. They have earned a 100.00 loyalty tier, which stacks on top: the order costs 600.00. **Timing.** A new qualifying order counts at the next recalculation, up to 2 hours later. A customer who stops qualifying keeps the discount until the next recalculation. ## Limits and things to know - **Enterprise or Professional only.** The **Loyalty** method is offered only on these plans. - **The customer must carry the loyalty discount's tag.** Process Wholesale does not look at customers without it, however much they spend. - **Pending customers are not checked.** Customers tagged `B2B_Registeration` earn no tier until they are approved. - **Spend between tiers.** Tier boundaries are whole numbers, and spend is not. With Tier 1 at 500 and Tier 2 at 1000, Tier 1 ends at 999, so a spend of 999.50 earns no tier. A customer whose spend falls in that gap earns no loyalty discount until their spend reaches the next tier's minimum. - **Cancelled orders are not excluded.** A cancelled order still counts as an order for **Total number of orders**, and counts with its current total in Shopify for **Purchase Amount**, unless its payment status is voided or expired. - **One loyalty discount per customer.** When a customer carries more than one loyalty discount tag, only one loyalty discount applies. - **Loyalty discounts apply to the whole order.** They cannot be limited to products or collections. - **Quick Buy shows an estimate.** The loyalty amount in the Quick Buy summary is an estimate. Checkout applies the tier the customer has earned. - **Deleting a loyalty discount leaves its tags.** **Delete** removes the loyalty discount's own tag from customers tagged `B2B`, without a confirmation step, but the `pw_loyalty_` tags stay on customers. Remove them in Shopify admin if you want a clean tag list. See [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). - **Percentages are not capped.** The tier form accepts any percentage. Enter 100 or less. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A customer who qualifies gets no loyalty discount | The customer does not carry the loyalty discount's tag, or the last recalculation was before their qualifying order | Add the loyalty discount's tag, then wait up to 2 hours for the `pw_loyalty_` tag to appear. | | No `pw_loyalty_` tag on a customer | The customer is pending, has no counted orders in the period, or their spend falls between two tiers | Check the customer's tags and their orders in the **Purchase Period**. | | A customer still gets the discount after dropping below the tier | Eligibility is recalculated every 2 hours | No fix needed. The tag is updated at the next recalculation. | | The **Loyalty** option is missing in **Method** | The store is not on Enterprise or Professional | Upgrade from **Plan** in the app. | | Spend looks lower than the customer's order history | Only confirmed orders in the **Purchase Period** count, each with its current total in Shopify | Compare with the customer's orders from the start of the period. | ## Frequently asked questions ### Which orders count toward a wholesale loyalty tier? All of the customer's confirmed Shopify orders created within the **Purchase Period**, from any sales channel, except orders whose payment status is voided or expired. Each order counts with its current total in Shopify. ### How often is loyalty eligibility recalculated? Every 2 hours. A new order can take up to 2 hours to count, and a customer who no longer qualifies keeps the discount until the next recalculation. ### In which currency is loyalty spend measured? In your store currency. Process Wholesale uses each order's total in the store currency, whatever currency the customer paid in. ### What are the pw_loyalty tags on my customers? They record the loyalty tier each customer has earned. Process Wholesale adds and removes them every 2 hours, and checkout reads them to apply the loyalty discount. Do not edit them by hand. ### Does a loyalty discount stack with other wholesale discounts? Yes. The loyalty discount is added on top of flat, quantity tier and cart value tier discounts, and a percentage is calculated on what remains after them. See [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## Related articles - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [How to give a wholesale discount based on cart total](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) --- Source: https://docs.processwholesale.com/discounts/cost-plus-markup Section: Discounts and pricing Plans: Professional Last verified: 2026-11-11 # 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 `B2B` who 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 1. In Shopify admin, open the **Process Wholesale** app, select **Discounts**, then the **Cost-Plus Discounts** tab. 2. Select **Create new Cost-Plus Discount**. 3. 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 as `newcostplusmarkup615`. Use lower-case letters and numbers only, and do not include `b2b`. 4. 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. 5. In **Applies to**, choose **All products**, **Select individual products** (then **Select product**), **Select collections** (then **Select collection**) or **Select individual variants** (then **Select variant**). 6. 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. 7. 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. 8. 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**. 9. 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](https://docs.processwholesale.com/discounts/assign-discounts-to-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. > **Important:** Clearing a variant's **Cost per item** in Shopify does not clear the cost Process Wholesale already copied. Cost plus markup keeps using the last cost it had for that variant. To stop the discount on a product, change **Applies to** to leave the product out, or enter the correct cost instead of clearing it. ## What your customers see - **On product pages:** with the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), a logged-in customer with a tag that contains `b2b` and 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 `B2B` see the cost plus price in the [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) 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 example `PW : 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. 1. For each item, Process Wholesale picks the customer's highest-priority cost plus markup discount that covers it (1 is the highest priority). 2. Target price = cost × (1 + markup ÷ 100), converted to the customer's currency. 3. 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](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## 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](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). ## 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. ## Related articles - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/discounts/price-lists Section: Discounts and pricing Plans: Professional Last verified: 2026-11-11 # How to create a wholesale price list with fixed prices A Process Wholesale price list sets the exact price a wholesale customer (B2B customer) pays for each product variant, such as $12.50 for a product that sells for $20.00 at retail. Create one in the Process Wholesale app under **Discounts > Price Lists > Create new pricelist** on the Professional plan. The list's name is also a customer tag: a logged-in customer who has both the `B2B` tag and the list's tag pays the list price at checkout. Price lists are also called set price lists, fixed-price lists or customer-specific pricing. **At a glance** - **Plan:** Professional - **Where:** Process Wholesale > **Discounts** > **Price Lists** tab - **Applies to:** Logged-in customers with the `B2B` customer tag and the price list's tag - **Price type:** A fixed amount per variant in your store currency, not a percentage - **Applied:** In Shopify checkout, as a discount labeled `PW : ` on each line - **Large lists:** The editor loads at most 200 products. For bigger lists, use [CSV import, update and export](https://docs.processwholesale.com/discounts/price-list-csv-import). ## How a price list differs from a percentage discount A price list stores a fixed price for each variant. A [flat discount or tier discount](https://docs.processwholesale.com/discounts/discount-types) takes a percentage or an amount off the retail price. With a price list, the customer pays the price you entered no matter what the retail price is: if you raise the retail price, the wholesale customer still pays the list price. With a 20% flat discount, the wholesale price moves whenever the retail price moves. Use a price list when you have agreed prices per product, for example from a wholesale price sheet. Use a flat or tier discount when one rule fits many products. ## Before you start - Your store must be on the Professional plan. On other plans the **Price Lists** tab is visible, but its buttons read **Upgrade to Professional**. Current plan prices are shown on the Shopify plan page that opens from **Plan** in the app. - Decide the name of the list. The name becomes the customer tag, and it cannot be changed after the list is saved. - For a list with more than 200 products, start with [Import from CSV](https://docs.processwholesale.com/discounts/price-list-csv-import) instead of the editor. ## Steps to create a price list in the editor 1. In Shopify admin, open the **Process Wholesale** app and select **Discounts**. 2. Select the **Price Lists** tab, then select **Create new pricelist** (or **Create new price list** when you have no lists yet). The **Create new set price list** page opens. 3. In the **Name** card, enter a name for the list. The field starts with a suggested name such as `newpricelist547`. Replace it with a name such as `wholesale` or `distributor2`. 4. In the **Select products to add to list** card, choose how to load products: - **Add All products** loads the products in your store, up to 200. - **Add individual products**, then **Select product**, opens the Shopify product picker. The button then shows **{count} products selected**. - **Add collections**, then **Select collection**, opens the collection picker. The button then shows **{count} collections selected**. 5. Select **Populate items in price list**. The products appear in the price table. To load more products later, change the choice and select **Add items to price list**. 6. In the price table, enter a **Wholesale price** for each product: - The **Title** column shows the product, and **{count} variants** with an arrow when the product has more than one variant. - **Current Price** shows the retail price, or the lowest to highest price across variants. It cannot be edited. - A price typed on the product row is copied to every variant of that product when you leave the field. - Expand a product to type a different price for each variant. Each variant field shows its current retail price as a placeholder. - The reset icon clears the prices of a product or a variant. The delete icon removes the product from the list. 7. Select **Save** in the save bar at the top of the page. The app shows **Price list created** and returns to the **Price Lists** tab. The list's prices apply at checkout as soon as the save finishes. Video walkthrough: [How to create custom price lists](https://vimeo.com/1148192653) (6 minutes) shows how to create price lists that you can assign to customers. ### Price list name rules - The name can contain only lowercase letters and numbers. Capital letters are turned into lowercase, and spaces, hyphens and other characters are removed as you type. **Import from CSV** takes its name from the same field, so every price list name created in the app is lower case. - The name cannot contain `b2b` in any capitalization. The field does not accept the letter that would complete `b2b`, so the name stays as it was before that keystroke. - An empty name shows **Price list tag name is required. Please enter a discount tag name.** - The name must be unique among your price lists. A name that is already used shows **A tier discount with the tag name "" already exists. Please use a different tag name.** The message says "tier discount" but refers to the price list name. - Use a name that no other discount and no other customer tag uses, as the **Name** card asks. - The name cannot be changed once the list is saved. To use a different name, create a new list. ### Every variant needs a price When a product is in the price table, every one of its variants needs a wholesale price. You cannot give a list price to only some variants of a product in the editor. - If no variant has a price, saving shows **Please add custom prices to every variant in the price list.** - If some variants of a product have no price, saving shows **The following products have variants without a custom price: {products}. Please set a price for all variants.** Errors appear in a red banner titled **Error** at the top of the page. To leave a variant out, remove the whole product with the delete icon, or type a price on the product row so every variant gets it. ### Choosing a collection does not make the list follow it **Add All products**, **Add individual products** and **Add collections** are only ways to load products into the price table. The price list saves the prices of the variants in the table, not the collection or the choice. A product added to the collection later is not added to the price list. To include it, open the list, load the product and give it a price. ## How to tie a price list to customers A customer gets the price list when the customer has two tags in Shopify: 1. `B2B`, the tag Process Wholesale adds when you approve a customer. Any capitalization of `B2B` works. 2. The price list's name as a tag, for example `wholesale`. Spell the tag exactly as the price list name, in lower case. You can add the price list's tag from the Process Wholesale **Customers** page with **Manage discount tags**, to every wholesale customer at once with **Bulk assign discount**, automatically on approval with **Settings > Customer settings > Auto assign discount tags**, or by hand in Shopify admin. See [how to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) and [automatic discount tags on approval](https://docs.processwholesale.com/customers/auto-assign-discount-tags). > **Important:** Give each customer only one price-list tag. When a customer has two price-list tags that both price the same product, the **Priority** order on the **Price Lists** tab does not decide which list checkout uses, and Quick Buy can show a different list price than checkout charges. ## What your customers see **In the cart and at checkout.** Each eligible line gets a discount labeled `PW : `, for example `PW : wholesale`, that brings the line down to the list price. The app's **Name** card describes this: the name is shown as a discount under the line item in the cart and checkout. **On the product page.** The theme keeps showing the retail price. When the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) is on the product page, a logged-in customer with a tag that contains `b2b` and the price list's tag sees one row for the variant: quantity **Any**, the discount (retail minus list price) and the wholesale price. For a $20.00 variant with a list price of 14.50, the row reads Any, $5.50, $14.50. When a customer has both a cost plus markup and a price list for the same variant, the block shows the cost plus markup price. A price list row takes the place of quantity tiers and flat discounts in that table. **In Quick Buy.** [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) shows the list price as the unit price for customers tagged `B2B`, and the difference from retail in the discount column. A $10.00 product with a list price of 7.50 shows $7.50, with a discount of $2.50. > **Important:** On a store that sells in more than one currency, the Product Wholesale block and Quick Buy show the price-list amount as you entered it, without converting it to the customer's currency. Checkout converts it. Tell customers who buy in another currency that the checkout price is the one they pay. **Who sees retail prices.** Customers who are not logged in, customers without the `B2B` tag, customers without the price list's tag, and variants that are not on the list all get the retail price with no `PW :` discount. Pending customers tagged `B2B_Registeration` (the tag is spelled this way) can see a price list row in the Product Wholesale block when they have the list's tag, but they pay the retail price at checkout until you approve them. ## How the price list price reaches checkout At checkout, Process Wholesale applies a discount on each item equal to the line's current unit price minus the list price. The customer ends up paying the list price for each unit. Process Wholesale applies the price list only when all of these are true: - The store is on the Professional plan. - The customer is logged in and has the `B2B` tag and the price list's tag. - The variant in the cart has a price on that list. **Example.** Your store currency is USD. A variant retails at $20.00, and the `wholesale` price list sets it to 12.50. A customer with the tags `B2B` and `wholesale` buys 3. The discount is $7.50 per item ($20.00 − $12.50), $22.50 for the line, and the customer pays $12.50 each. The discount is labeled `PW : wholesale`. **Retail price changes later.** You raise the retail price to $25.00. The discount becomes $12.50 per item, and the customer still pays $12.50. The list price stays fixed; the retail price only changes the size of the discount. **Another currency.** You enter list prices in your store currency. When a customer pays in another currency, Process Wholesale converts the list price at the exchange rate Shopify uses for that checkout. With a list price of 12.50, an exchange rate of 0.9 and a line price of €18.00, the discount is €6.75 (18.00 − 11.25) and the customer pays €11.25. Any market-specific price on the product does not change the result: the customer pays the converted list price. **A price of 0.** A list price of 0 makes the variant free for customers on that list. ## Price List Discount combinations The **Price List Discount combinations** card under **Settings > Discount settings** sets which other discount types can apply to the same order as a price list: **Product Discounts**, **Order Discounts** and **Shipping Discounts**. All three are off by default, and the card is shown only on the Professional plan. For a flat or tier discount to apply on the same order as a price list, check **Order Discounts** in **Price List Discount combinations** and **Product Discounts** in the main **Discount combinations** card, then select **Save**. See [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations) and [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## How to edit or delete a price list On the **Price Lists** tab, select **Edit** next to the list. The page title reads **Managing **, and the page loads with **Add individual products** selected and the list's products in the table. Change prices, add or remove products and select **Save**. The app shows **Price list updated**. Saving from the editor replaces the whole list with what is in the table: products that are not in the table are removed from the list. To delete a list, open it and select **Delete**. Delete removes the price list immediately, with no confirmation step, and shows **Discount deleted**. Process Wholesale also removes the list's tag from your approved wholesale customers. Pending customers keep the tag. The **Priority** arrows on the **Price Lists** tab change the order of the lists in the table. ## Limits and things to know > **Important:** For a price list with more than 200 products, change prices with **Update from CSV**. The editor loads at most 200 products, and at most 200 variants of each product. Saving from the editor removes the products and variants it did not load. **Add All products** also loads only up to 200 products. > **Important:** Use a new name for a new price list. When you delete a price list, the prices it set stay stored on the products. If you later create a price list with the same name, the old prices reappear in the editor and apply at checkout for products that are not on the new list. - **One price per variant per list.** A price list does not have quantity breaks. For volume pricing, use [quantity tier discounts](https://docs.processwholesale.com/discounts/quantity-tier-discounts). - **Prices are in your store currency.** Checkout converts them for other currencies. - **A list price of 0 shows as empty in the editor.** When you edit a list that has a variant priced at 0, the editor shows that variant without a price and asks you to enter one before saving. Enter 0 again. - **Delete has no confirmation.** Select **Delete** only when you mean it. - **The name cannot be renamed.** Create a new list and move customers to the new tag instead. - **The plan is Professional.** On other plans price lists do not apply at checkout and do not show on the storefront. After a downgrade, your price lists and customer tags are kept, and they apply again when you return to Professional. - **No Shopify Plus requirement.** No Process Wholesale feature is limited to Shopify Plus stores. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A customer pays the retail price | The customer is not logged in, or is missing the `B2B` tag or the price list's tag | In Shopify admin, open the customer and add both tags. Approve pending customers in **Customers**. | | No customer gets list prices | The store is not on the Professional plan | Check the plan under **Plan**. | | One product is at retail price | That variant has no price on the list | Open the list, load the product and give every variant a price. | | Products disappeared from a list after saving | The list had more than 200 products, and the editor saved only the products it loaded | Restore the list with **Update from CSV**. See [price list import problems](https://docs.processwholesale.com/troubleshooting/price-list-import-problems). | | A customer gets a different list than expected | The customer has two price-list tags | Remove all but one price-list tag from the customer. | | Saving shows "variants without a custom price" | A product in the table has a variant with no price | Price every variant, or remove the product. | | A flat or tier discount does not apply together with the price list | The combination checkboxes are off | Turn on **Order Discounts** under **Price List Discount combinations** and **Product Discounts** under **Discount combinations**. | ## Frequently asked questions ### What is the difference between a price list and a percentage discount? A price list sets a fixed price per variant, and a percentage discount takes a share off the retail price. With a price list the customer pays the price you entered even when the retail price changes. ### Does a price list follow a collection when I add new products to it? No. **Add collections** only loads the collection's current products into the table. Products added to the collection later are not on the list until you add them and give them a price. ### What happens to the price list price when I change the retail price? Nothing changes for the wholesale customer. The customer still pays the list price; only the size of the `PW :` discount changes. ### Why can I see only 200 products when I edit a price list? The editor loads at most 200 products and 200 variants per product. Manage larger lists with **Export to CSV** and **Update from CSV**, and do not save them from the editor. ### What happens if a customer has two price-list tags? Which list applies is not set by the **Priority** order, and Quick Buy and checkout can show different prices. Give each customer one price-list tag. ### Can I reuse the name of a deleted price list? You can, but the deleted list's prices come back for products the new list does not price. Use a new name instead. ## Related articles - [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Price list CSV import problems](https://docs.processwholesale.com/troubleshooting/price-list-import-problems) --- Source: https://docs.processwholesale.com/discounts/price-list-csv-import Section: Discounts and pricing Plans: Professional Last verified: 2026-11-11 # How to import, update and export a price list with CSV Process Wholesale can create a [price list](https://docs.processwholesale.com/discounts/price-lists) from a CSV file, replace an existing list's prices from a CSV file, and export a list to CSV. The file needs a price column and a SKU or Handle column, and can have up to 50,000 rows. Use **Import from CSV** on the **Create new set price list** page, and **Update from CSV** or **Export to CSV** on an existing list's page, in **Discounts > Price Lists** on the Professional plan. This is also called a bulk price upload or a price sheet import. **At a glance** - **Plan:** Professional - **Where:** Process Wholesale > **Discounts** > **Price Lists**, then **Create new pricelist** (import) or **Edit** on a list (update and export) - **File:** `.csv`, one file at a time, up to 50,000 rows - **Required columns:** a price column, and a SKU column or a Handle column (or both) - **Matching:** by SKU first, then by Handle - **Update mode:** replaces the whole list. Products not in the file are removed from the list. - **Column details:** [Price list CSV format reference](https://docs.processwholesale.com/reference/price-list-csv-format) ## Before you start - Your store must be on the Professional plan. - Prepare a CSV file with a header row. Accepted price headers include `Price`, `Fixed Price` and `Wholesale Price`; accepted key headers include `SKU` and `Handle`. Other columns are ignored. The [CSV format reference](https://docs.processwholesale.com/reference/price-list-csv-format) lists every accepted header. - Write prices without thousands separators: `1299.99` or `1299`, not `1,299`. A value such as `1,299` is read as 1.299. - Give each variant a unique SKU where you can. A row whose SKU belongs to several variants, or whose handle belongs to a product with several variants, is not imported. - A Shopify product export is not recognized as it is: its price column, `Variant Price`, is not an accepted header. Rename that column to `Price` first. A Shopify B2B catalog export with `SKU`, `Handle` and `Fixed Price` columns works without changes. - Run one import at a time. While another import is reading your product catalog, a new one shows **Couldn't start the import. A store export may already be running — please try again in a minute.** ## Steps to create a price list from CSV 1. In Shopify admin, open the **Process Wholesale** app and select **Discounts**, then the **Price Lists** tab. 2. Select **Create new pricelist**. 3. In the **Name** card, enter the name of the new list, using lowercase letters and numbers only. The import uses this name. With an invalid name the import window shows **Enter a valid price list name (letters and numbers only, no "B2B") before importing.** and the import button is disabled. 4. Select **Import from CSV**. The **Import prices from CSV** window opens. 5. Select **Add CSV file**, or drop a `.csv` file on the box. To start from a sample file, select **Download template**. 6. Check the preview (see "How to read the CSV preview"), then select **Import prices**. 7. Wait for the result. When it shows **Import complete for ""**, select **Done**. The app shows **Price list created from CSV** and returns to the **Price Lists** tab. Products and prices you add this way do not need to fit the editor's 200-product limit. ## Steps to update a price list from CSV 1. On the **Price Lists** tab, select **Edit** next to the list. 2. Select **Update from CSV**. The **Update prices from CSV** window opens with this warning: "This replaces the prices in "". Products in the file are updated or added; products currently in the list but **not** in the file are removed and their price cleared. Rows that don't match a product in your store are skipped." 3. Add the CSV file and check the preview. 4. Select **Update prices**. 5. When it shows **Update complete for ""**, select **Done**. The app shows **Price list updated from CSV**. > **Important:** **Update from CSV** replaces the whole price list. A variant that is in the list but not matched in the file, including a row that was skipped for an invalid price or an ambiguous SKU, is removed from the list. To change a few prices, export the list first, edit the prices in the exported file and upload the complete file. **Example.** The list `wholesale` holds product A at 5, B at 8 and C at 3. You upload a file with A at 7 and D at 6. After the update the list holds A at 7 and D at 6. The result shows 1 added (D), 1 updated (A) and 2 removed (B and C). ## Steps to export a price list to CSV 1. On the **Price Lists** tab, select **Edit** next to the list. 2. Select **Export to CSV**. The file `price-list-.csv` downloads. The export has the columns `SKU`, `Handle`, `Title` and `Price`, one row per variant on the list. `Title` is the variant title. Prices are written as stored, for example `7` rather than `7.00`. Variants that were deleted from your store are left out. If the export fails, the app shows **Couldn't export the price list**. You can edit the exported file and upload it again with **Update from CSV**. The `Title` column is ignored on import. Two kinds of exported rows are not matched when you upload the file again, so **Update from CSV** removes those variants from the list: a variant whose SKU another variant in your store also uses, and a variant with no SKU on a product with several variants. Give those variants unique SKUs in Shopify before you re-upload. > **Important:** Before you upload an exported file with **Update from CSV**, check that it is complete: the number of rows matches the number of variants you expect on the list. If an export is interrupted, the downloaded file can be shorter than the list. Uploading a partial file removes every product missing from it. Export again if the file looks short. ## How to read the CSV preview After you add a file, the import window reads it and shows a summary before anything is imported: - **{count} ready**: rows that have a SKU or Handle and a valid price. - **{count} skipped (missing key or invalid price)**: rows with no SKU and no Handle, or a price that is empty, not a number or negative. - **of {count} rows**: the total number of data rows. - **Matched to SKU / Handle; price from "".**: which key columns were found and which column the prices come from. "Ready" means the row is well formed. It does not yet mean the product was found in your store. Matching happens after you start the import. Skipped rows are listed later in the unmatched rows file with their reason. If the file has no price column, or neither a SKU nor a Handle column, the window shows **Couldn't detect the required columns. The file needs a price column (e.g. “Fixed Price” or “Price”) and at least one of “SKU” or “Handle”.** A file that cannot be read at all shows **Failed to parse the CSV file.** or the reader's own message. ## How rows are matched to products Process Wholesale matches each row to one product variant in your store: 1. The price is checked first. A row with an invalid or negative price is not matched. 2. The SKU is looked up, ignoring capitals and surrounding spaces. If exactly one variant has that SKU, the row is matched. If several variants share it, the row is not matched and the Handle is not tried. 3. If the SKU is empty or not found, the Handle is looked up, ignoring capitals. If the product has exactly one variant, the row is matched. If it has several variants, the row is not matched, because a handle alone cannot say which variant is meant. 4. When several rows match the same variant, the last row wins. **Example.** Your store has a variant with SKU `BCA` on the product `bass-casting`, and a product `single` with one variant. A row with SKU `BCA`, handle `wrong-handle` and price `4.79` is matched by SKU at 4.79. A row with no SKU, handle `single` and price `9.99` is matched to the one variant of `single`. A row with SKU `DUP`, used by two variants, is not matched. ## What happens while the import runs The import runs in the background. The window shows a progress bar and a status line: 1. **Starting…**: the import is being set up. 2. **Reading your product catalog…**: Process Wholesale reads every variant in your store to match the rows. 3. **Publishing prices to checkout…**: the matched prices are being made available to checkout. The window says: "Importing… this runs in the background and may take a minute for large catalogs. You can keep this open to watch progress." Larger catalogs take longer. You cannot close the window while the import runs. If you leave the page or close the app, the import keeps running; open the list on the **Price Lists** tab later to see the result. ## The import result When the import finishes, the window shows **Import complete for ""** or **Update complete for ""** with counts: - Import: **{count} prices set**, plus **{count} unmatched** when some rows were not matched. - Update: **{count} added**, **{count} updated**, **{count} removed** (when any) and **{count} unmatched**. The banner is green when every row matched and yellow when some did not, with the note "Some rows couldn't be matched (no matching SKU/Handle, ambiguous match, or invalid price). Download unmatched rows to fix and re-import." Select **Download unmatched rows** to get `unmatched-.csv` with the columns `row`, `sku`, `handle` and `reason`. The `row` number is the line in your file, counting the header as line 1. The file holds up to 2,000 unmatched rows; the unmatched count on screen is always the full number. Fix the rows and upload the complete file again with **Update from CSV**. If the import fails, the window shows **The import failed: No price list was created. Please try again.** (or **The update failed: Your existing price list was left unchanged. Please try again.**), with a link to download the unmatched rows when there are any. The [CSV format reference](https://docs.processwholesale.com/reference/price-list-csv-format) lists every message. ## What your customers see A price list created or updated from CSV works the same as one made in the editor. Logged-in customers with the `B2B` tag and the list's tag pay the list price at checkout, shown as a discount labeled `PW : ` on each line. See [what customers see for a price list](https://docs.processwholesale.com/discounts/price-lists#what-your-customers-see). Customers get the new prices once the import shows complete. ## Limits and things to know - **Up to 50,000 rows per file.** A larger file shows **Imports are limited to 50000 rows.** Remove the rows you do not need. Do not split one list across several files: each **Update from CSV** replaces the list, so only the last file's prices remain. - **Up to 2,000 rows in the unmatched rows file.** Fix those and import again to see the next ones. - **One file per import, `.csv` only.** - **One import at a time per store.** - **No thousands separators.** `1,299` is read as 1.299. `1,299.99` and `1.299,99` are both read as 1299.99. A comma alone is treated as the decimal separator, so `12,50` is 12.5. - **A price of 0 is accepted** and makes the variant free for customers on the list. Negative prices are not imported. - **Update replaces the whole list,** including removing variants whose rows did not match. - **The import uses the name in the Name field.** Import creates a new list with that name; a name already used shows **A price list with the tag name "" already exists. Please use a different tag name.** To change an existing list, open it and use **Update from CSV**. - **Do not re-import a partial export.** Missing products are removed from the list. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | "Couldn't detect the required columns" | No accepted price header, or no SKU or Handle header. A Shopify product export uses `Variant Price`, which is not accepted. | Rename the price column to `Price` or `Fixed Price`, and make sure a `SKU` or `Handle` column exists. | | Many rows unmatched | SKUs or handles in the file do not match your store, or SKUs are shared by several variants | Download unmatched rows and fix each row by its reason. | | "Couldn't start the import. A store export may already be running" | Another import or store export is running | Wait a minute and try again. | | Prices are 1,000 times too small | The file uses commas as thousands separators | Remove thousands separators and run **Update from CSV**. | | Products disappeared after an update | They were not in the file, or their rows did not match | Export, add the missing rows and update again. | For more cases, see [Price list CSV import problems](https://docs.processwholesale.com/troubleshooting/price-list-import-problems). ## Frequently asked questions ### Does Update from CSV replace the whole price list? Yes. After an update the list holds exactly the variants matched in the file. Products in the list that are not in the file, or whose rows did not match, are removed. ### Can I import a Shopify product export as a price list? Yes, after renaming one column. The product export's price column is `Variant Price`, which Process Wholesale does not recognize; rename it to `Price`. The `Variant SKU` and `Handle` columns are recognized. ### How many rows can a price list CSV have? Up to 50,000 rows. The unmatched rows file holds the first 2,000 unmatched rows. ### How are CSV rows matched to my products? By SKU first, then by Handle. A handle matches only a product with one variant, so use SKUs for products with several variants. ### Can I add a few products without replacing the list? Not with **Update from CSV**, which replaces the list. Export the list, add rows to the exported file and upload the whole file, or add the products in the editor when the list has 200 products or fewer. ## Related articles - [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists) - [Price list CSV format reference](https://docs.processwholesale.com/reference/price-list-csv-format) - [Price list CSV import problems](https://docs.processwholesale.com/troubleshooting/price-list-import-problems) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) --- Source: https://docs.processwholesale.com/discounts/assign-discounts-to-customers Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # How to assign discounts to wholesale customers In Process Wholesale, creating a discount does not give it to anyone. A customer receives a discount only when their Shopify customer account carries two tags: `B2B`, which marks an approved wholesale customer (B2B customer), and the discount tag, which is the name you gave the discount. You can add discount tags one customer at a time with **Manage discount tags**, to every wholesale customer at once with **Bulk assign discount**, automatically when a customer is approved, or by hand in Shopify admin. Assigning flat and tier discounts works on every plan; price list and cost plus markup discounts apply only on the Professional plan. **At a glance** - **Plan:** All plans. Price list and cost plus markup tags take effect only on Professional. - **Where:** Process Wholesale > **Customers** (Active tab and **Bulk assign discount**), Process Wholesale > **Settings > Customer settings** (auto assign), or Shopify admin > **Customers** - **Rule:** The customer needs the `B2B` tag **and** the discount tag, and must be logged in at checkout - **Creating a discount adds no tags.** Every customer has to be given the tag by one of the methods below. ## Before you start - Create the discount first under **Discounts** (for example a [flat discount](https://docs.processwholesale.com/discounts/flat-discounts) or a [quantity tier discount](https://docs.processwholesale.com/discounts/quantity-tier-discounts)). Its **Discount tag name** is the tag you assign. - The customer must be an approved wholesale customer tagged `B2B`. Pending customers tagged `B2B_Registeration` (the tag is spelled this way) get no wholesale discount until approved. See [how to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ## Assign discount tags to one customer with Manage discount tags 1. In Process Wholesale, open **Customers** and select the **Active** tab. 2. Find the customer. Use **Search customers** if the list is long (it shows 10 customers per page). 3. Select the pencil button on the customer's row, then **Manage discount tags**. 4. In the **Manage Discount Tags** window, under **Update tags:**, choose discounts in the **Search and select discount tags** box. Remove a discount by deselecting it, or select **Clear all** to remove every discount tag. 5. Select **Save**. The toast **Tags updated** confirms the change. The **Discount tags** column on the Active tab then shows the customer's discount tags. That column lists only tags that match one of your Process Wholesale discounts, not every tag on the customer. **What Manage discount tags changes.** Saving adds the discounts you selected and removes the discounts you deselected. Every other tag on the customer, such as `B2B` or your own tags like `VIP`, is kept. For example, a customer tagged `VIP`, `B2B`, `gold` and `pricelista`: if the window offered `gold` and you selected `gold` and `silver`, the customer ends up with `VIP`, `B2B`, `pricelista`, `gold` and `silver`. **Which discounts are offered.** Flat and tier discounts are offered on every plan. Price list and cost plus markup tags are Professional features. > **Note:** Saving in **Manage discount tags** also re-applies your **B2B customer tax exemption** setting to that customer and, when the customer has a note, updates the timestamp in it, as **Accept B2B**, **Reject B2B**, **Return to pending** and **Remove B2B access** do. **Import customers** and **Bulk assign discount** do not change tax exemption. See [how to make wholesale customers tax exempt](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers). ## Assign a discount to all wholesale customers with Bulk assign discount **Bulk assign discount** adds one or more discount tags to every customer tagged `B2B` in your store, in the background. 1. In Process Wholesale, open **Customers**. 2. Select **Bulk assign discount** at the top of the page. 3. In **Discounts**, choose one or more discounts (**Search discounts** filters the list). 4. Select **Assign to all B2B customers**. The toast **Assigning discounts** confirms that it started. While the job runs, the button reads **Bulk assign in progress…** and is disabled. Only one bulk assignment can run at a time in a store. When it finishes, Process Wholesale emails the store's contact address with the result: | Email subject | Meaning | | --- | --- | | Bulk discount assignment complete | Every wholesale customer was tagged | | Bulk discount assignment finished with some errors | Some customers could not be tagged | | Bulk discount assignment failed | No customer could be tagged | The email lists **Discounts assigned**, **B2B customers processed**, **Succeeded** and **Failed**. What **Bulk assign discount** does and does not do: - It **adds** tags. Existing tags stay, so running it twice is harmless. - It **does not remove** any tag, and it does not create discounts. - It includes only customers tagged `B2B`. Pending customers are not tagged. - It does not change tax exemption. - Flat and tier discounts are offered on every plan. Price list and cost plus markup discounts are offered only on Professional. ## Assign discounts automatically when a customer is approved Under **Settings > Customer settings > Auto assign discount tags**, choose discount tags in **Discount tags**. When you approve a pending customer with **Accept B2B**, Process Wholesale adds those tags along with `B2B`. Customers imported with **Import customers** get them when you accept them. Every save of the **Settings** page also adds the selected tags to up to 100 existing customers tagged `B2B`. Full steps are in [how to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags). ## Add a discount tag by hand in Shopify admin You can also type the tag on the customer in Shopify admin: 1. In Shopify admin, open **Customers** and select the customer. 2. In the **Tags** box, add the discount tag exactly as it appears in Process Wholesale. 3. Make sure the customer also has the tag `B2B`, then save. Tags created in the Process Wholesale discount forms, including price lists created from a CSV file, are lower case letters and numbers only, for example `wholesale15`. Type them the same way. ## How to check a customer's tags - **In Process Wholesale:** the **Active** tab on **Customers** shows each customer's discount tags in the **Discount tags** column. **View details** in the row menu shows all tags. - **In Shopify admin:** open **Customers**, select the customer, and read the **Tags** box. A customer who should get wholesale pricing shows `B2B` and at least one discount tag. Customers who have a [loyalty discount](https://docs.processwholesale.com/discounts/loyalty-discounts) also get tags that start with `pw_loyalty_`. Process Wholesale adds and removes those automatically; do not edit them. ## What your customers see A customer with `B2B` and a discount tag gets the discount at checkout when logged in. Depending on your theme setup, they also see wholesale prices in the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) and in [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup). A customer without the discount tag, or who is not logged in, sees and pays retail prices. ## How it works - Discounts are applied at checkout by Process Wholesale's automatic discounts in Shopify. They check the customer's tags on every checkout, so a tag change takes effect on the customer's next checkout. - The customer needs the exact tag `B2B`, in any capitalization of those three letters (`B2B`, `b2b`). A tag that only contains them, such as `B2B_Registeration`, does not count. - A customer can hold several discount tags. Which ones apply, and which add together, is explained in [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). **Example.** You create a flat discount `wholesale15` (15% off all products). Nobody gets it yet. You open **Bulk assign discount**, choose `wholesale15` and select **Assign to all B2B customers**. Your 40 wholesale customers are tagged and you receive "Bulk discount assignment complete" with **Succeeded** 40. A customer who is still pending is not tagged; once you approve them, they get `wholesale15` only if it is in **Auto assign discount tags** or you add it. ## Limits and things to know - **Rejecting or removing wholesale access does not remove discount tags.** **Reject B2B**, **Remove B2B access** and **Return to pending** change only the `B2B` and `B2B_Registeration` tags. Without `B2B` the customer gets no discount, but the discount tag stays and applies again if `B2B` is added back. Remove it with **Manage discount tags** or in Shopify admin if needed. - **Deleting a discount removes its tag** from every customer tagged `B2B`. Pending customers and customers without `B2B` keep the tag. See [editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount). - **Bulk assign does not remove tags.** To take a discount away from many customers, delete the discount or remove the tag customer by customer. - **Plan limits on discounts:** you can create 1 discount on Starter and 100 on Enterprise and Professional (flat and tier together). See [Process Wholesale plans](https://docs.processwholesale.com/account/plans-and-pricing). - **Price list and cost plus markup tags work only on Professional.** ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | Customer has the discount tag but pays retail | Missing `B2B` tag, or the customer is not logged in | Approve the customer or add `B2B`. See [discount not applying](https://docs.processwholesale.com/troubleshooting/discount-not-applying). | | A tag added by hand does nothing | The tag is spelled differently from the discount name | Copy the name from **Discounts** exactly, including case | | **Bulk assign discount** is greyed out | A bulk assignment is still running | Wait for the result email, then try again | | Pending customers did not get the bulk-assigned discount | Bulk assign includes only customers tagged `B2B` | Approve them, then assign the tag or use auto assign | | Price list tags are not in the **Bulk assign discount** list | The store is not on Professional | Price list and cost plus markup discounts need Professional | ## Frequently asked questions ### Which tags does a customer need to get a wholesale discount? Two: `B2B` and the discount tag. The customer also has to be logged in at checkout. A pending customer tagged `B2B_Registeration` gets no discount. ### Does Bulk assign discount remove tags or include pending customers? No. **Bulk assign discount** only adds the selected discount tags, keeps every existing tag, and includes only customers tagged `B2B`. ### Can I add the discount tag by hand in Shopify admin? Yes. Add the discount tag in the customer's **Tags** box in Shopify admin, spelled exactly as in Process Wholesale, and make sure the customer also has `B2B`. ### Do I have to assign the discount again after I edit it? No. Editing a discount does not change customers' tags, so everyone who had the tag gets the updated discount. ### Can one customer have more than one discount? Yes. A customer can carry several discount tags. Some add together and some compete; see [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## Related articles - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [How to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [Editing and deleting wholesale discounts](https://docs.processwholesale.com/discounts/edit-or-delete-a-discount) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) --- Source: https://docs.processwholesale.com/discounts/discount-priority-and-stacking Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # Which wholesale discount applies: priority and stacking rules Process Wholesale decides a wholesale customer's (B2B customer's) discount in layers. Each cart line gets at most one line discount: a flat discount or a quantity tier, chosen by flat discount priority and the **Tag priority** setting. Then a cart value tier and a loyalty tier are added on top, in that order. Cart quantity tiers, price lists and cost plus markup are separate automatic discounts, and whether they apply on the same order as the others depends on the **Discount combinations** settings. These rules hold on every plan; the customer must be logged in and carry `B2B` plus the discount tags. **At a glance** - **Plan:** All plans (price lists and cost plus markup need Professional; loyalty needs Enterprise or Professional) - **Where the rules are set:** Process Wholesale > **Discounts** (flat discount priority) and **Settings > Discount settings** (**Tag priority**, **Discount combinations**) - **Per line:** one flat discount **or** one quantity tier, never both - **Added on top:** one cart value tier, then one loyalty tier - **Separate discounts:** cart quantity tier, price list, cost plus markup - **Default:** **Prefer flat tag** ## Which discount applies: the decision table | Situation | Which discount applies | Set by | | --- | --- | --- | | Customer has two or more flat discounts that cover the same product | The flat discount with the lowest **Priority** number (1 is highest) | Up and down arrows on the **Flat Discounts** tab | | A flat discount and a quantity tier cover the same product | **Prefer flat tag**: the flat discount. **Prefer tier tag**: the quantity tier. | **Settings > Discount settings > Tag priority** | | Customer has two quantity tiers that cover the same product | One of them, not chosen by any setting | Give a customer only one quantity tier per product | | Customer buys several variants of one product with a quantity tier | The units of all those variants are added together to pick the tier | Always | | Customer has a cart value tier | Added on top of all line discounts | Always | | Customer has a loyalty tier and has earned a level | Added after the cart value tier | Always | | Customer has two cart value tiers, two loyalty tiers or two cart quantity tiers | Only one of each kind is used | Give a customer only one of each kind | | Customer has a cart quantity tier | A separate order discount on the eligible lines | **Discount combinations** decide whether it applies with the others | | Customer has a price list | Sets the price of each variant on the list | **Discount combinations** and **Price List Discount combinations** together decide whether flat and tier discounts also apply | | Customer has two price lists that both price a variant | One of them, not chosen by the **Priority** column | Give a customer only one price list tag | | Customer has two cost plus markup discounts that cover the same product | The one with the lowest **Priority** number | Arrows on the **Cost-Plus Discounts** tab | ## Priority among flat discounts When a customer has several flat discounts, Process Wholesale checks them for each cart line in **Priority** order and uses the first one whose **Applies to** selection covers that product. The **Flat Discounts** tab lists discounts by priority with the note "1 = Highest Priority". Use the up and down arrows on a row to swap it with its neighbor. A new flat discount gets the next number after the existing ones. Editing a discount does not change its priority. Deleting one moves every lower-priority discount up by one. **Example.** A customer has `vip20` (20% off the Coffee collection, priority 1) and `wholesale10` (10% off all products, priority 2). Coffee lines get 20%, because `vip20` comes first and covers them. Every other line gets 10%, because `vip20` does not cover it and `wholesale10` does. The two never add together on one line. ## Flat discount versus quantity tier: the Tag priority setting When a customer has a flat discount and a [quantity tier discount](https://docs.processwholesale.com/discounts/quantity-tier-discounts) that both cover the same product, **Settings > Discount settings > Tag priority** decides which one the line gets. The **Discount Priority** menu has two options: - **Prefer flat tag** (the default): the line gets the flat discount. The quantity tier is used only on lines no flat discount covers. - **Prefer tier tag**: the line gets the quantity tier. The flat discount is used only on lines no quantity tier covers. The setting matters only when both cover the same line. A change takes effect at checkout as soon as you save. > **Important:** Checkout reads the **Tag priority** choice from the last time the **Settings** page was saved. Until the **Settings** page has been saved once, checkout treats every line as **Prefer tier tag**, even though the menu shows **Prefer flat tag**. If you use flat discounts and quantity tiers together, save the **Settings** page once: the **Save** button appears only after a change, so, for example, select **Prefer tier tag** and **Save**, then select **Prefer flat tag** and **Save** again. > **Important:** With **Prefer tier tag**, a line covered by a quantity tier gets the tier or nothing. If the quantity is below the tier's lowest **Min. quantity**, that line gets no discount at all, and the flat discount is not used instead. For example, with a tier that starts at 10 units and a 10% flat discount on all products, a customer buying 3 units of that product gets no discount on it. Start the first tier at 1 if you want every quantity discounted. **Example.** Flat discount 10% on all products, quantity tier "10+ units: 20% off". A customer buys 12 units of one product. With **Prefer flat tag** the line gets 10%. With **Prefer tier tag** it gets 20%. **How the quantity for a quantity tier is counted.** Process Wholesale adds up the units of the same product across all of its variants in the cart. For example, 4 small and 8 large of one T-shirt count as 12 units, so both lines reach a "10+ units" tier. Lines of that product that no flat discount or quantity tier covers are not counted. The **Priority** column on the **Tier Discounts** tab is only a row number. It does not decide which tier applies. ## Cart value and loyalty discounts are added on top After the line discounts, Process Wholesale adds two order-level amounts, in this order: 1. **Cart value tier** ([Total Cart Value](https://docs.processwholesale.com/discounts/cart-value-tier-discounts)). The cart value is the cart subtotal minus the flat and quantity tier line discounts, rounded down to a whole number. The tier is chosen from that value. A percentage tier takes that percentage of the subtotal remaining after the line discounts. A **Price Off** tier adds its fixed amount. 2. **Loyalty tier** ([Loyalty](https://docs.processwholesale.com/discounts/loyalty-discounts)). If the customer has earned a loyalty level, a percentage loyalty tier takes that percentage of what remains after the line discounts **and** the cart value discount. A **Price Off** loyalty tier adds its fixed amount. Flat discounts, quantity tiers, the cart value tier and the loyalty tier together form one order discount in Shopify, the automatic discount named **B2B Order/Loyalty Discount**. Its label at checkout starts with `PW: ` followed by the discount tags used. When a cart value tier applies, the label lists the cart value tag, then the flat and quantity tier tags, then the loyalty tag, separated by `&`, for example `PW: cartvalue500 & wholesale10 & loyal10`. When no cart value tier applies, the loyalty tag follows the last tag with no separator, for example `PW: wholesale10loyal10`. ## Cart quantity tiers are a separate discount A [cart quantity tier](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) (Total Cart Quantity) runs as its own automatic order discount, **B2B Cart Quantity Discount**. It counts the units on the eligible lines (all lines, or only the products or collections the tier covers), picks the tier, and discounts those lines. Both order discounts follow the main **Discount combinations** card, which allows combining with order discounts by default. See [using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). **Example.** A customer buys 2 units at $50.00 and 8 units at $10.00 (10 units, $180.00). The tier is 1 to 9 units: 5% off, 10+ units: 10% off. The cart quantity discount is 10% of $180.00 = $18.00. ## Where price lists and cost plus markup fit [Price lists](https://docs.processwholesale.com/discounts/price-lists) and [cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) are product discounts that change the price of individual items. Each is its own automatic discount (**B2B Price List Discount** and **B2B Cost Plus Markup Discount**), and both need the Professional plan. - **Price list:** the line is priced at the list price for that variant. A variant that is not on any of the customer's price lists gets no price list discount. - **Two price lists on one customer:** when both price the same variant, checkout uses one of them, and the up and down arrows on the **Price Lists** tab do not decide which. Give each customer only one price list tag. - **Cost plus markup:** the item is priced at unit cost plus the markup. When a customer has several cost plus markup discounts, the one with the lowest **Priority** number that covers the product applies. A cost plus markup discount never raises a price above retail. - **With flat and tier discounts:** whether a price list or cost plus markup discount applies on the same order as flat and tier discounts depends on the **Discount combinations** cards in Settings. By default the price list and cost plus markup discounts are not set to combine with anything. See [using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). > **Tip:** The simplest setup to predict is one pricing method per product for each customer: either a price list, a cost plus markup discount, or flat and tier discounts. ## Worked example: one order, step by step Store settings: **Tag priority** is **Prefer flat tag**. The customer is logged in and tagged `B2B`, `vip20`, `wholesale10`, `bulkmugs`, `cart400` and `loyal10`, and has earned the `loyal10` loyalty level. | Discount tag | Type | Rule | | --- | --- | --- | | `vip20` | Flat, priority 1 | 20% off the Coffee collection | | `wholesale10` | Flat, priority 2 | 10% off all products | | `bulkmugs` | Quantity tier, Mug only | 1 to 9 units: 5% off; 10+ units: 15% off | | `cart400` | Cart value tier | 400+: 5% off | | `loyal10` | Loyalty tier | 10% off | Cart: Coffee beans (in Coffee) 10 × $30.00 = $300.00; Mug 12 × $10.00 = $120.00; Tea 5 × $20.00 = $100.00. Subtotal **$520.00**. 1. **Coffee beans:** `vip20` comes first and covers Coffee: 20% × $30.00 × 10 = **$60.00**. 2. **Mug:** `vip20` does not cover it. `wholesale10` covers all products, and **Prefer flat tag** picks it over `bulkmugs`: 10% × $10.00 × 12 = **$12.00**. 3. **Tea:** `wholesale10`: 10% × $20.00 × 5 = **$10.00**. 4. Line discounts: $82.00. Cart value = $520.00 − $82.00 = $438, which reaches 400. **Cart value tier:** 5% × $438.00 = **$21.90**. Running total $103.90. 5. **Loyalty tier:** 10% × ($520.00 − $103.90) = 10% × $416.10 = **$41.61**. 6. Order discount **$145.51**, labeled `PW: cart400 & vip20 & wholesale10 & loyal10`. The customer pays **$374.49**. **Same order with Prefer tier tag.** The Mug line now gets `bulkmugs`: 12 units reach 10+, so 15% × $10.00 × 12 = $18.00. Coffee and Tea are unchanged ($60.00 and $10.00), because no quantity tier covers them. Line discounts $88.00; cart value $432 → 5% = $21.60; loyalty 10% × ($520.00 − $109.60) = $41.04. Order discount **$150.64**, labeled `PW: cart400 & vip20 & bulkmugs & wholesale10 & loyal10`; the customer pays **$369.36**. ## Rounding - The order discount (flat, quantity tier, cart value and loyalty together) is rounded to two decimals once, at the end. Individual lines are not rounded first. - The cart value used to pick a cart value tier is rounded down to a whole number. A cart value of 399.99 counts as 399 and does not reach a tier that starts at 400. - In another currency, **Price Off** and **Fixed Price** amounts and cart value thresholds are converted at the exchange rate of the customer's checkout. Percentages are not converted. ## Why the storefront can show a different discount than checkout The [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) and [Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-prices) calculate their own displayed price in the browser. Checkout uses the rules in this article. They can differ: - The product page and Quick Buy show **one** product-level price, in this order: cost plus markup, then price list, then flat discount or quantity tier (by **Tag priority**). At checkout, more than one can apply when the combination settings allow it. - The Product Wholesale block does not show loyalty discounts. - Quick Buy shows only the largest single cart discount among cart value and cart quantity tiers, plus loyalty. At checkout the cart value tier and the cart quantity tier are separate discounts. - Quick Buy picks between two price lists by the **Priority** column; checkout does not. Give a customer one price list tag to keep them the same. ## Limits and things to know - **Use a different name for every discount.** Process Wholesale lets a flat discount and a tier discount share a name, but at checkout a flat discount and a Total Cart Value, Individual Product Quantity or Loyalty tier with the same name cannot both apply: only one of them is used. - **Set Fixed Price and Price Off amounts below the product's price.** Process Wholesale does not cap these amounts. A **Fixed Price** higher than the product's price makes the discount on that line negative, which lowers the customer's total discount. - **Custom items** added to a draft order get no flat or quantity tier discount, but count toward the cart value. See [draft orders](https://docs.processwholesale.com/discounts/draft-orders). ## Frequently asked questions ### Do wholesale discounts stack in Process Wholesale? Partly. Each line gets one flat discount or one quantity tier, never two. A cart value tier and a loyalty tier are then added on top. Cart quantity, price list and cost plus markup discounts are separate discounts that apply alongside depending on the **Discount combinations** settings. ### What does Prefer flat tag or Prefer tier tag do? It decides which discount a line gets when a flat discount and a quantity tier both cover it. **Prefer flat tag** (the default) uses the flat discount; **Prefer tier tag** uses the quantity tier, even if the quantity is below the first tier. ### Is the cart value discount calculated before or after the flat discount? After. The cart value tier is chosen and calculated from the subtotal minus flat and quantity tier discounts. The loyalty discount is calculated after both. ### What happens if a customer has two price list tags? Checkout uses one of them for each variant, and the **Priority** arrows on the **Price Lists** tab do not decide which. Give each customer only one price list tag. ### Which flat discount wins when a customer has two? The one with the lowest **Priority** number on the **Flat Discounts** tab that covers the product. Lines it does not cover can still get the second flat discount. ## Related articles - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [How Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) --- Source: https://docs.processwholesale.com/discounts/discount-codes-and-combinations Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # Using Shopify discount codes with wholesale discounts Process Wholesale gives wholesale customers (B2B customers) their pricing through Shopify automatic discounts that the app creates in your store. Whether a Shopify discount code, or another automatic discount, can apply on the same order depends on which discount classes each of those automatic discounts is allowed to combine with. You choose that in Process Wholesale under **Settings > Discount settings**, in three **Discount combinations** cards: one for flat and tier discounts (all plans), one for price lists and one for cost plus markup (both Professional). Shopify's own discount combination rules then decide the result at checkout. **At a glance** - **Plan:** All plans for **Discount combinations**; **Price List Discount combinations** and **Cost Plus Markup Discount combinations** appear only on Professional - **Where:** Process Wholesale > **Settings > Discount settings** - **Checkboxes on each card:** **Product Discounts**, **Order Discounts**, **Shipping Discounts** - **Defaults:** main card all checked; price list and cost plus markup cards all unchecked - **Saved with:** the page's **Save** button; toast **Settings updated** ## The automatic discounts Process Wholesale creates You can see these in Shopify admin under **Discounts**. Each has a Shopify discount class, which is what the combination checkboxes refer to. | Automatic discount (Shopify admin) | What it applies | Discount class | Combination card | | --- | --- | --- | --- | | **B2B Order/Loyalty Discount** | [Flat discounts](https://docs.processwholesale.com/discounts/flat-discounts), [quantity tiers](https://docs.processwholesale.com/discounts/quantity-tier-discounts), [cart value tiers](https://docs.processwholesale.com/discounts/cart-value-tier-discounts), [loyalty tiers](https://docs.processwholesale.com/discounts/loyalty-discounts) | Order discount | **Discount combinations** | | **B2B Cart Quantity Discount** | [Cart quantity tiers](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) | Order discount | **Discount combinations** | | **B2B Price List Discount** | [Price lists](https://docs.processwholesale.com/discounts/price-lists) | Product discount | **Price List Discount combinations** | | **B2B Cost Plus Markup Discount** | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | Product discount | **Cost Plus Markup Discount combinations** | Flat discounts and quantity tiers are calculated per item, but Shopify receives them as part of one **order** discount. Price lists and cost plus markup are **product** discounts. ## What each checkbox changes Each card sets the "combines with" options of its automatic discounts: | Card | Applies to | Checkbox | Default | When checked, the app's discount is set to combine with | | --- | --- | --- | --- | --- | | **Discount combinations** ("Choose which types of discounts can be combined with discounts created from app.") | **B2B Order/Loyalty Discount** and **B2B Cart Quantity Discount** | **Product Discounts** | Checked | Product discounts | | | | **Order Discounts** | Checked | Order discounts | | | | **Shipping Discounts** | Checked | Shipping discounts | | **Price List Discount combinations** (Professional) | **B2B Price List Discount** | **Product Discounts** | Unchecked | Product discounts | | | | **Order Discounts** | Unchecked | Order discounts | | | | **Shipping Discounts** | Unchecked | Shipping discounts | | **Cost Plus Markup Discount combinations** (Professional) | **B2B Cost Plus Markup Discount** | **Product Discounts** | Unchecked | Product discounts | | | | **Order Discounts** | Unchecked | Order discounts | | | | **Shipping Discounts** | Unchecked | Shipping discounts | Process Wholesale only sets these options on its own automatic discounts. Shopify's discount combination rules apply at checkout. ## Common goals and the settings they need ### Allow a discount code on top of wholesale pricing 1. Note the class of the discount code you created in Shopify admin: product, order or shipping. 2. In Process Wholesale, open **Settings > Discount settings**. 3. In **Discount combinations**, check the matching box (**Order Discounts** for an order code, **Product Discounts** for a product code, **Shipping Discounts** for a free shipping code). All three are checked by default. 4. If the customer has a price list or cost plus markup discount, check the same box in **Price List Discount combinations** or **Cost Plus Markup Discount combinations**. 5. Select **Save**. 6. Test with a wholesale test customer. Shopify's combination rules apply. ### Stop discount codes for wholesale customers Process Wholesale has no setting that blocks discount codes. You can clear **Product Discounts**, **Order Discounts** and **Shipping Discounts** on each card, so that the app's discounts are not set to combine with any other discount. Shopify's combination rules apply when a wholesale customer enters a code. Clearing **Order Discounts** in the main card also sets the two Process Wholesale order discounts (flat and tier, and cart quantity) not to combine with order discounts, which includes each other. ### Let a price list and a flat or tier discount apply to the same order Check **Product Discounts** in **Discount combinations**, and check **Order Discounts** in **Price List Discount combinations**. The in-app note in Settings says the same: "If you want normal B2B discounts (flat/tier) to be applied to the same order as a price list discount, Product discounts must be checked for the main discount combinations, and Order discounts must be checked for price list discount combinations". ### Let cost plus markup and a flat or tier discount apply to the same order Check **Product Discounts** in **Discount combinations**, and check **Order Discounts** in **Cost Plus Markup Discount combinations**. ### Let a price list and cost plus markup both apply on one order Both are product discounts. Check **Product Discounts** in both **Price List Discount combinations** and **Cost Plus Markup Discount combinations**. Shopify's combination rules apply. To keep pricing predictable, give a customer either a price list or a cost plus markup discount for any one product. ## How it works - Saving **Settings** updates the combination options of the four automatic discounts when you changed any checkbox. - Process Wholesale checks its automatic discounts about every five minutes. If their combination options differ from your Process Wholesale settings, they are set back to your settings. - The checkboxes control combinations only. Which wholesale discount a line gets is explained in [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). **Example.** A wholesale customer has `wholesale10` (10% flat) and enters the order code SPRING5 (5% off the order). With **Order Discounts** checked in **Discount combinations** (the default), **B2B Order/Loyalty Discount** is set to combine with order discounts, and Shopify's combination rules decide whether SPRING5 applies with it. If you clear **Order Discounts** and save, the wholesale discount is no longer set to combine with order discounts. ## What your customers see Wholesale discounts appear in checkout as Process Wholesale discounts. The flat, quantity tier, cart value and loyalty discount is one order discount labeled `PW: ` and the discount tags used, for example `PW: cartvalue500 & wholesale10`. A cart quantity discount is labeled `PW: ` and its tag. A price list or cost plus markup discount shows on each line as `PW : ` (with a space before the colon) and the discount tag, for example `PW : vip`. A discount code the customer enters shows under its own name. Whether both appear depends on the settings above and Shopify's combination rules. ## Limits and things to know - **Change combinations in Process Wholesale, not in Shopify admin.** Changes made directly on the app's automatic discounts in Shopify admin are replaced with the Process Wholesale settings within minutes. - **Leave the app's automatic discounts active in Shopify admin.** They are what applies wholesale pricing at checkout; do not deactivate or delete them. - **Price list and cost plus markup cards are Professional only,** like the discounts they control. - **Flat and tier discounts are order discounts.** For a product discount code on the same order, **Product Discounts** must be checked in **Discount combinations**. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A wholesale customer's code removes the wholesale discount | The app's discount is not set to combine with the code's class | Check the matching box in **Discount combinations** and test again; Shopify's combination rules apply | | Price list prices apply but the flat or tier discount does not | **Order Discounts** is unchecked in **Price List Discount combinations** (the default) or **Product Discounts** is unchecked in the main card | Check both and select **Save** | | A combination you set in Shopify admin reverted | Process Wholesale resets its automatic discounts to the app settings | Change the checkbox in **Settings > Discount settings** instead | | No price list or cost plus markup cards in Settings | The store is not on Professional | Upgrade from **Plan** | ## Frequently asked questions ### Are Process Wholesale discounts product discounts or order discounts? Both kinds exist. Flat, quantity tier, cart value, loyalty and cart quantity discounts are order discounts. Price lists and cost plus markup are product discounts. ### Can wholesale customers use a Shopify discount code with Process Wholesale discounts? Yes, when the app's discount is set to combine with the code's class in **Settings > Discount settings** and Shopify's combination rules allow it. The main **Discount combinations** card allows product, order and shipping combinations by default. ### Can I stop wholesale customers from using discount codes? Process Wholesale has no setting that blocks codes. Clearing the **Discount combinations** checkboxes stops the app's discounts from being set to combine; Shopify's rules then decide which discount applies. ### How do I let a price list and a flat or tier discount apply to the same order? Check **Product Discounts** in **Discount combinations** and **Order Discounts** in **Price List Discount combinations**, then select **Save**. ### Why did my combination change in Shopify admin go back? Process Wholesale keeps its automatic discounts in line with its own Settings and resets changes made in Shopify admin. Change the checkboxes in **Settings > Discount settings**. ## Related articles - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) --- Source: https://docs.processwholesale.com/discounts/edit-or-delete-a-discount Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # Editing and deleting wholesale discounts In Process Wholesale you edit a flat, tier, price list or cost plus markup discount from **Discounts**: open the discount's tab, select **Edit** on its row, change it and save. The change reaches checkout for every customer who already has the discount tag, with no need to reassign it. The discount tag (its name) cannot be changed after creation. **Delete** on the edit page removes the discount immediately, with no confirmation, and removes its tag from every customer tagged `B2B`. Editing works on every plan for flat and tier discounts; price lists and cost plus markup need the Professional plan. **At a glance** - **Plan:** All plans (price lists and cost plus markup: Professional) - **Where:** Process Wholesale > **Discounts** > **Flat Discounts**, **Tier Discounts**, **Price Lists** or **Cost-Plus Discounts** > **Edit** - **Cannot change:** the **Discount tag name** - **Delete:** no confirmation step, cannot be undone, removes the tag from wholesale customers ## Edit a discount 1. In Process Wholesale, open **Discounts**. 2. Select the tab: **Flat Discounts**, **Tier Discounts**, **Price Lists** or **Cost-Plus Discounts**. 3. Select **Edit** on the discount's row. The page title reads "Managing" or "Edit" followed by the tag. 4. Change the fields you need. 5. Select **Save** in the save bar at the top of the page. The toast **Discount updated** (flat and cost plus markup), **Tier updated** (tier) or **Price list updated** (price list) confirms the save. ## What you can and cannot change | Discount type | You can change | You cannot change | | --- | --- | --- | | Flat discount | **Discount type**, **Value** or **Amount**, **Applies to** and the selected products, collections or variants | **Discount tag name**. Priority is changed with the arrows on the **Flat Discounts** tab, not on the edit page. | | Tier discount | **Method**, the tiers (add, remove or change **Min.** values and discounts), **Applies to** and the selection, and for loyalty the basis and **Purchase Period** | **Discount tag name** | | Price list | The products on the list and their prices | The price list **Name** | | Cost plus markup | **Markup Percentage**, **Applies to** and the selection | **Discount tag name** | Notes for specific fields: - On a tier discount, changing **Method** resets **Applies to** to **All products**. Re-select products or collections afterwards. - On a flat discount, **Fixed Price** appears as a **Discount type** only for discounts that already use it. - On a cost plus markup discount, saving checks that the selected products have a unit cost. See [cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup). - Plan rules still apply when editing: variant selection and loyalty need Enterprise or Professional. ## What editing does and when it takes effect - Editing does not change any customer's tags. Everyone who has the discount tag gets the updated discount, and nobody else. - The updated discount applies at checkout shortly after you save. Process Wholesale also re-checks its checkout setup about every five minutes. - Saving the **Tag priority** or **Discount combinations** settings takes effect the same way. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). **Example.** A flat discount `wholesale15` gives 15% off all products to 40 customers. You edit it to 20% and select **Save**. All 40 customers get 20% at their next checkout. You do not run **Bulk assign discount** again. ## Delete a discount 1. Open the discount with **Edit** as described in the steps to edit a discount. 2. Select **Delete** at the top of the page. There is no "Are you sure?" step: the discount is deleted as soon as you select **Delete**. The toast **Discount deleted** (or **Tier deleted** for a tier discount) confirms it, and the list page opens. **Delete failed** followed by a message means the delete did not complete; check the list and try again. Deleting a discount: 1. Removes its tag from every customer who has both `B2B` and the tag. Pending customers tagged `B2B_Registeration`, and customers without `B2B`, keep the tag in Shopify. 2. Deletes the discount, so it no longer applies at checkout. 3. For flat discounts, price lists and cost plus markup discounts, moves every lower-priority discount of the same type up one place. > **Important:** Deleting cannot be undone, and it removes the tag from all your wholesale customers. To get the discount back, create it again and reassign it with [Bulk assign discount or Manage discount tags](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). Before deleting a price list, select **Export to CSV** to keep a copy of its prices. Deleting a [loyalty discount](https://docs.processwholesale.com/discounts/loyalty-discounts) removes the discount's own tag but leaves the customers' level tags that start with `pw_loyalty_`. They no longer give any discount. You can remove them in Shopify admin if you want a clean tag list. ## Rename a discount safely The **Discount tag name** field is locked after creation. To give a discount a new name without leaving customers without a discount: 1. Create a new discount with the new name and the same settings. 2. Assign the new tag to the same customers, for example with **Bulk assign discount** on the **Customers** page, and wait for the result email. 3. Delete the old discount. Its tag is removed from wholesale customers. Between steps 2 and 3, a customer has both discounts. If both are flat discounts covering the same products, the one with the lower **Priority** number applies, so the price does not double. If both are tier discounts of the same method, only one of them is used. For a [loyalty discount](https://docs.processwholesale.com/discounts/loyalty-discounts), customers receive the new discount's level tags at the next loyalty update, which runs every 2 hours, so wait for it before you delete the old discount. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## Price list cautions - **Lists with more than 200 products:** change prices with **Update from CSV**. The editor loads the first 200 products only, and saving from the editor removes the products it did not load. See [importing and updating a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import). - **Do not reuse the name of a deleted price list.** Deleting a price list does not clear the prices it stored on each variant. If you later create a price list with the same name, the old prices come back at checkout for variants that are not on the new list, and the editor pre-fills them. Give a replacement list a new name. - **Price list priority** arrows do not decide which list applies at checkout when a customer has two lists. Give each customer one price list tag. ## What your customers see After an edit, customers with the tag see the new prices in the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), in Quick Buy and at checkout. After a delete, customers who had the tag see and pay retail prices, unless another discount they hold applies. ## Limits and things to know - **The discount tag cannot be renamed.** Use the rename steps: create, reassign, delete. - **Rejecting or removing a customer does not remove discount tags,** but deleting a discount does (for customers tagged `B2B`). - **Editing a tier discount's tiers:** each tier's **Min.** must be greater than the previous tier's, or the save shows "Tier 2 minimum value (5) must be greater than Tier 1 minimum value (10)." with your numbers. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The **Discount tag name** field is greyed out | Tags cannot be renamed after creation | Follow the steps to rename a discount safely | | A discount was deleted by mistake | **Delete** has no confirmation | Create it again with the same name and reassign it | | Old prices reappeared on a new price list | The new list reuses a deleted list's name | Delete the new list and create it with a different name | | Products disappeared from a large price list after saving | The editor loads only 200 products | Restore with **Update from CSV** from an exported or original file | | Pending customers still have a deleted discount's tag | Delete removes tags only from customers tagged `B2B` | Remove the tag in Shopify admin, or leave it: a deleted discount gives no discount | ## Frequently asked questions ### Can I rename a discount tag? No. The **Discount tag name** is locked once the discount is created. Create a new discount with the new name, assign it, then delete the old one. ### What happens to customers when I delete a discount? Process Wholesale removes the discount's tag from every customer tagged `B2B` and the discount stops applying. Pending customers keep the tag, but it gives no discount. ### Do customers need the tag again after I edit a discount? No. Editing changes the discount, not the customers' tags, so every customer who has the tag gets the updated discount. ### Is there a confirmation before a discount is deleted? No. **Delete** removes the discount immediately and cannot be undone. ### Can I reuse the name of a deleted price list? Avoid it. A new price list with a deleted list's name brings back the old list's prices for variants that are not on the new list. Use a new name. ## Related articles - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists) - [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) --- Source: https://docs.processwholesale.com/discounts/draft-orders Section: Discounts and pricing Plans: All plans Last verified: 2026-11-11 # How to apply wholesale discounts to a Shopify draft order You can give a wholesale customer (B2B customer) their Process Wholesale pricing on an order you create yourself in Shopify admin. Create the draft order, add the wholesale customer to it, then select **Add discount** and choose to apply eligible automatic discounts. Process Wholesale's discounts are Shopify automatic discounts, so they apply to the draft order the same way they apply at checkout: only when the order's customer has the `B2B` tag and the discount tag. This works on every plan, within each discount type's own plan requirements. **At a glance** - **Plan:** All plans (each discount type keeps its own plan requirement) - **Where:** Shopify admin, while you create an order (a draft order) - **Needs:** a customer on the draft order who has `B2B` and the discount tag - **How:** **Add discount** > apply eligible automatic discounts ## Before you start - The customer must be an approved wholesale customer tagged `B2B` and must carry the discount tag. Check the **Tags** box on the customer in Shopify admin. See [how to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). - Use the customer's existing Shopify account. A draft order without a customer gets no wholesale discount. ## Steps 1. In Shopify admin, start creating an order. 2. Add the products. 3. Add the wholesale customer to the order. 4. Select **Add discount** and choose to apply eligible automatic discounts. 5. Check the Process Wholesale discount on the order before you finish it. Video walkthrough: [Watch Tutorial](https://vimeo.com/1092582451/7143f9d1b1) (from the Process Wholesale Support page FAQ "Can I apply wholesale discounts to manually created orders?") shows these steps in Shopify admin. ## What your customers see The draft order gets the same Process Wholesale discounts the customer would get at checkout. Flat, tier, cart value and loyalty discounts are applied together as one order discount. ## How it works Process Wholesale applies wholesale pricing through its automatic discounts in Shopify (for example **B2B Order/Loyalty Discount**). These read the customer attached to the order: - The customer must have `B2B` (any capitalization) and the discount tag. - The same priority and stacking rules apply as at checkout. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). **Example.** A customer tagged `B2B` and `wholesale10` (10% off all products) phones in an order for 20 units at $15.00 ($300.00). You create a draft order, add the customer, and apply eligible automatic discounts. The draft shows a $30.00 discount, for a total of $270.00 before shipping and tax. ## Limits and things to know - **Custom items get no flat or quantity tier discount.** A custom item (a line you type in rather than a product from your store) is skipped by flat and tier discounts. The rest of the order is still discounted, and the custom item's price still counts toward a cart value tier. - **The customer must be on the draft order.** Without a customer, Process Wholesale cannot see any tags, so no wholesale discount applies. - **Quick Buy net terms orders are different.** When a customer checks out from Quick Buy with a payment term, Process Wholesale creates the draft order for you. See [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms). ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | No wholesale discount on the draft order | Automatic discounts were not applied, or no customer is on the order | Add the customer, then **Add discount** and apply eligible automatic discounts | | Discount still missing with the customer added | The customer lacks `B2B` or the discount tag | Add the tags in Shopify admin or in Process Wholesale **Customers** | | One line is not discounted | It is a custom item, or the product is outside the discount's **Applies to** selection | Add the product from your catalog, or widen the discount's selection | ## Frequently asked questions ### Can I apply wholesale discounts to manually created orders? Yes. On a Shopify draft order with the wholesale customer added, select **Add discount** and choose to apply eligible automatic discounts. ### Why does a draft order not show the wholesale discount? Most often no customer is on the draft order, automatic discounts were not applied, or the customer is missing `B2B` or the discount tag. ### Do custom items on a draft order get the wholesale discount? No. Custom items get no flat or quantity tier discount, but they count toward the cart value for a cart value tier. ## Related articles - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) - [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) --- Source: https://docs.processwholesale.com/customers/wholesale-customers-and-tags Section: Wholesale customers Plans: All plans Last verified: 2026-11-11 # Wholesale customers and customer tags explained Process Wholesale uses ordinary Shopify customer accounts and marks them with customer tags. An applicant gets the tag `B2B_Registeration` and waits in the **Pending** tab of the **Customers** page; when you approve them, that tag is replaced by `B2B` and they become a wholesale customer (B2B customer). Discounts are granted by more tags, one per discount. This tag model works the same on every plan, and every approval is made by you: Process Wholesale never approves an application automatically. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Customers** (Pending and Active tabs), and the customer's tags in Shopify admin - **Pending customer:** tagged `B2B_Registeration` (the tag is spelled this way) - **Wholesale customer:** tagged `B2B` - **Approval:** always manual, with **Accept B2B** ## Which customer tags does Process Wholesale use? Process Wholesale reads and writes these customer tags. You can see all of them on the customer's page in Shopify admin. | Tag | Meaning | Added by | Removed by | | --- | --- | --- | --- | | `B2B_Registeration` | Pending customer: has applied and waits for review. The tag is spelled `Registeration`, and it must be typed exactly that way. | A signup form submission, **Import customers**, or **Return to pending** | **Accept B2B**, **Reject B2B**, **Remove B2B access** | | `B2B` | Wholesale customer: approved for wholesale prices and wholesale features | **Accept B2B** | **Reject B2B**, **Return to pending**, **Remove B2B access** | | `B2Bnetterms` | The customer can see net payment terms when net terms are limited to specific customers | **Settings > Net terms > Select Customers** | Saving that selection removes it from every wholesale customer you did not select | | A discount tag, such as `gold` | Grants the discount with that name. The discount tag is the name you gave the discount. | **Auto assign discount tags** (on approval, and on every save of the **Settings** page to up to 100 existing customers tagged `B2B`), **Manage discount tags**, **Bulk assign discount** | **Manage discount tags**, or deleting the discount in Process Wholesale | | `pw_loyalty___` | The loyalty tier the customer qualifies for at the last check | Process Wholesale, automatically, every 2 hours | Process Wholesale, automatically, when the customer moves to another tier or no longer qualifies | **Loyalty tags.** A customer gets a `pw_loyalty_...` tag only when they are a wholesale customer and already carry the loyalty discount's own discount tag. Process Wholesale checks their recent orders every 2 hours and keeps one loyalty tag per loyalty discount, for the tier they reached. Do not edit these tags by hand. See [loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts). **Deleting a discount** removes its discount tag from your wholesale customers. Pending customers keep the tag. ## How does a customer move from applicant to wholesale customer? | State | Customer tags | Where in Process Wholesale | What the customer can do | | --- | --- | --- | --- | | Not wholesale | Neither `B2B` nor `B2B_Registeration` | Not listed on **Customers** (found in **Import customers**) | Shop at retail prices. Can fill in the wholesale signup form. | | Pending | `B2B_Registeration` | **Customers > Pending** | Sees a "your account is under review" message on the signup form. Gets no wholesale discount at checkout. | | Wholesale | `B2B` plus discount tags | **Customers > Active** | Gets wholesale discounts at checkout and can use the wholesale features of your plan, such as Quick Buy. | | Rejected | Both status tags removed, discount tags kept | Not listed on **Customers** | Shops at retail prices again. The Shopify account is not deleted, and the signup form shows again. | | Removed | Both status tags removed, discount tags kept | Not listed on **Customers** | Same as rejected, but no email is sent. | **Example.** Jane applies through the signup form and is tagged `B2B_Registeration`. You select **Accept B2B**. Her tags change from `B2B_Registeration, vip` to `vip, B2B`, plus `gold` if `gold` is set under **Auto assign discount tags**. She receives the "Application approved" email if it is turned on. The steps are covered in [approving or rejecting applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) and [removing wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access). ## Is wholesale approval automatic? No. Every way into Process Wholesale (the storefront signup forms, the signup page in new customer accounts and **Import customers**) puts the customer in **Pending** with the tag `B2B_Registeration`. A customer becomes a wholesale customer only when you select **Accept B2B**, or when you add the `B2B` tag yourself in Shopify admin. ## Which Process Wholesale features count a customer as wholesale? Features do not all read the tags the same way: | Feature | Who counts as wholesale | | --- | --- | | Wholesale discounts at checkout, checkout rules (such as minimums), Quick Buy | Logged-in customers with the exact tag `B2B`, in any capitalization (`B2B`, `b2b`, `B2b`, `b2B`). Pending customers do not qualify. | | [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), [Hide price](https://docs.processwholesale.com/storefront/hide-prices), the B2B Redirect Block for legacy customer accounts | Logged-in customers with any tag that contains `b2b`. This includes pending customers tagged `B2B_Registeration` and customers tagged `B2Bnetterms`. | | [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) (default setting) | Logged-in customers with the exact tag `b2b`, in any capitalization | | Redirect after login for new customer accounts | Logged-in customers with the exact tag `B2B`, in any capitalization | | Wholesale signup form | `B2B` shows the "logged in to your wholesale account" message; `B2B_Registeration` shows the pending message | > **Note:** Because some storefront blocks accept any tag that contains `b2b`, a pending customer can see wholesale prices in the Product Wholesale block even though checkout does not give them the discount. Approve or reject pending customers promptly. ## What happens if I edit tags directly in Shopify admin? The storefront and checkout read the tags, so a tag you change in Shopify admin takes effect for those features. What does not happen is everything Process Wholesale does as part of an action on the **Customers** page: - **Adding `B2B` by hand** makes the customer a wholesale customer at checkout and in the storefront, and they appear on the **Active** tab. No approval email is sent, no **Auto assign discount tags** are added and the tax exemption setting is not applied. - **Adding `B2B_Registeration` by hand** puts the customer on the **Pending** tab. No "Application received" email is sent. - **Removing `B2B` by hand** ends wholesale pricing at checkout. No email is sent. - **Adding a discount tag by hand** works when the tag matches a discount's name exactly. Using **Manage discount tags** avoids typing mistakes. ## How do I email only my wholesale customers? Select customers by the tag `B2B` in Shopify admin or in your email marketing tool. Process Wholesale tags every customer you approve with `B2B`, so that tag identifies your wholesale customers. The exact setup depends on your email tool. ## Frequently asked questions ### How does Process Wholesale know which customers are wholesale customers? By the Shopify customer tag `B2B`. Process Wholesale adds it when you select **Accept B2B** on a pending customer, and checkout discounts apply only to logged-in customers who have it. ### Why is the tag spelled B2B_Registeration? That is the exact tag Process Wholesale uses for pending customers. Type it as `B2B_Registeration` whenever you search or tag by hand, or the customer will not appear on the **Pending** tab. ### Can a customer be pending and wholesale at the same time? No, not through Process Wholesale. **Accept B2B** replaces `B2B_Registeration` with `B2B`, and **Return to pending** does the reverse. ### Does Process Wholesale store wholesale status anywhere besides tags? No. The application state lives in the customer's tags, and the answers from the signup form are saved in the Shopify customer note. Approving or rejecting changes only the customer in Shopify. ### Do customers need a separate wholesale login? No. Wholesale customers log in with their normal Shopify customer account. The `B2B` tag is what gives them wholesale prices. ## Related articles - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [How to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference) - [How Process Wholesale works: customer tags, discounts and checkout](https://docs.processwholesale.com/getting-started/how-process-wholesale-works) --- Source: https://docs.processwholesale.com/customers/approve-or-reject-applications Section: Wholesale customers Plans: All plans Last verified: 2026-11-11 # How to approve or reject wholesale applications In Process Wholesale, every wholesale application waits on the **Customers** page under the **Pending** tab until you review it. Select **Accept B2B** to make the applicant a wholesale customer (B2B customer) or **Reject B2B** to turn the application down. Accepting replaces the pending tag `B2B_Registeration` with `B2B`, adds your auto-assigned discount tags and sends the "Application approved" email. Reviewing applications works on every plan, and nothing is approved automatically. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Customers**, tabs **Pending** and **Active** - **Applies to:** Customers tagged `B2B_Registeration` (Pending tab) and `B2B` (Active tab) - **Emails:** **Accept B2B** sends "Application approved" and **Reject B2B** sends "Application rejected", when those emails are turned on - **Bulk actions:** Yes, for the customers on the current page ## The Customers page The **Customers** page has two tabs: - **Pending** (opens first): customers tagged `B2B_Registeration`, waiting for review. Columns: **Customer** and **Actions**. - **Active**: approved wholesale customers tagged `B2B`. Columns: **Customer**, **Discount tags** and **Actions**. **Discount tags** lists only the customer's tags that match a Process Wholesale discount. Each tab lists 10 customers per page, with next and previous buttons. Use **Search customers** to search inside the open tab. **Refresh** reloads the open tab. ## Steps to review an application 1. In Shopify admin, open the **Process Wholesale** app and select **Customers**. 2. On the **Pending** tab, find the applicant. 3. Select the pencil button in the **Actions** column, then **View details**. The **Customer details** window shows the name, **Email:**, **Signup notes:** (the answers from the signup form, with links to any uploaded files) and **Tags:**. Select **Close**. 4. Select the pencil button again and choose one action: - **Accept B2B** to approve. The toast reads "Customer approved". - **Reject B2B** to decline. The toast reads "Customer rejected". The customer leaves the **Pending** tab at once. An accepted customer appears on the **Active** tab. ## Steps to accept or reject several applications at once 1. On the **Pending** tab, select the checkbox next to each customer, or the checkbox in the header to select every customer on the page. 2. Select **Accept B2B** or **Reject B2B** in the bulk action bar. The toast reads "Customers approved" or "Customers rejected". Only the customers on the current page can be selected, so repeat for each page. On the **Active** tab the bulk actions are **Return to pending** and **Remove B2B**. ## What each action changes | Action | Tab | Tags | Discounts | Tax exemption | Email to the customer | | --- | --- | --- | --- | --- | --- | | **Accept B2B** | Pending | Removes `B2B_Registeration`, adds `B2B` | Adds every tag selected under **Auto assign discount tags** | Set to the **B2B customer tax exemption** setting | "Application approved", if on | | **Reject B2B** | Pending | Removes `B2B_Registeration` and `B2B` | Discount tags stay on the customer | Set to the **B2B customer tax exemption** setting | "Application rejected", if on | | **Return to pending** | Active | Removes `B2B`, adds `B2B_Registeration` | Discount tags stay | Set to the setting | None | | **Remove B2B access** | Active | Removes `B2B` and `B2B_Registeration` | Discount tags stay | Set to the setting | None | | **Manage discount tags** | Active | Adds or removes discount tags only | Changes the customer's discounts | Set to the setting | None | When the customer has a note in Shopify, every one of these actions also adds or updates a "(Last modified: YYYY/MM/DD HH:MM:SS)" line in it. When an approval brings your number of wholesale customers (customers tagged `B2B`) to 10, 25 or 50, Process Wholesale sends a milestone email to your store email. **Example.** A pending customer has the tags `B2B_Registeration, vip`, and `gold` is selected under **Auto assign discount tags**. After **Accept B2B**, the customer's tags are `vip, B2B, gold`. The customer receives "Acme Supply - B2B Application Approved!" (with your store name) if the approval email is on. **Rejection does not delete anything.** The Shopify customer account stays, with its order history and note. The customer no longer appears on either tab. ## What the applicant sees - **After applying:** the signup form shows your pending message, such as "Thank you! your wholesale account is currently under review", and the "Application received" email arrives if it is on. - **While pending:** checkout charges retail prices. Some storefront blocks treat any tag containing `b2b` as wholesale, so a pending customer can already see wholesale prices in the Product Wholesale block. See [wholesale customers and tags](https://docs.processwholesale.com/customers/wholesale-customers-and-tags#which-process-wholesale-features-count-a-customer-as-wholesale). - **After approval:** the customer receives "Application approved", logs in with their usual account, gets wholesale discounts at checkout and sees "You are logged into your wholesale account" on the signup form page. - **After rejection:** the customer receives "Application rejected", shops at retail prices and sees the signup form again, so they can apply again. Email wording and on/off settings are in [wholesale application emails](https://docs.processwholesale.com/customers/wholesale-emails). ## Limits and things to know - **Approval is manual.** No setting approves applications automatically. - **Tax exemption is rewritten by every action.** Each action in the table sets the customer's tax status to the **B2B customer tax exemption** setting, which replaces a tax exemption you set by hand in Shopify. See [tax-exempt wholesale customers](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers). - **Discount tags stay after rejection.** They have no effect without the `B2B` tag, but they come back into effect if the customer is approved later. Remove them with **Manage discount tags** before rejecting if you do not want that. - **The approval email needs the pending tag.** "Application approved" and the auto-assigned discounts are sent and added only for customers who had `B2B_Registeration` when you accepted them, and the email needs an email address on the customer. - **Bulk actions cover one page.** Select and act on each page of 10 customers in turn. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | An applicant is not on the Pending tab | The tag is missing or spelled differently, or the list has not reloaded | Select **Refresh**. In Shopify admin, check that the customer has the exact tag `B2B_Registeration`. | | The customer did not receive the approval email | "Application approved" is off, the customer has no email, or the customer was not pending when accepted | Check **Settings > Customer settings > B2B customer emails**. See [wholesale emails not being received](https://docs.processwholesale.com/troubleshooting/emails-not-received). | | An approved customer has no discount at checkout | No discount tag is assigned, or the customer is not logged in | Use **Manage discount tags** on the **Active** tab, or set up [auto-assigned discounts](https://docs.processwholesale.com/customers/auto-assign-discount-tags). | | A customer lost a tax exemption after approval | **B2B customer tax exemption** is off, and approval applies it | Turn the setting on, or set the exemption again in Shopify admin after the action. | | "Accept failed", "Reject failed" or "Update failed" | Shopify did not accept the change | Select **Refresh** and try again. | ## Frequently asked questions ### How do I approve a wholesale application in Process Wholesale? Open **Customers**, find the applicant on the **Pending** tab, select the pencil button and choose **Accept B2B**. The customer is tagged `B2B` and moves to the **Active** tab. ### Can I approve several wholesale customers at once? Yes. On the **Pending** tab, select the customers with the checkboxes and choose **Accept B2B** in the bulk action bar. Selection covers the 10 customers on the current page. ### Does rejecting a customer delete their Shopify account? No. **Reject B2B** removes the wholesale tags and sends the rejection email if it is on. The Shopify account, orders and note stay. ### Can a rejected customer apply again? Yes. A rejected customer has neither `B2B` nor `B2B_Registeration`, so the signup form shows to them again and a new application puts them back on the **Pending** tab. ### Can I undo an approval? Yes. On the **Active** tab, select **Return to pending** to move the customer back to review, or **Remove B2B access** to end wholesale access. Neither sends an email. See [removing wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access). ## Related articles - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails) - [How to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags) - [How to remove a customer's wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access) - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) --- Source: https://docs.processwholesale.com/customers/add-existing-customers Section: Wholesale customers Plans: All plans Last verified: 2026-11-11 # How to make an existing Shopify customer a wholesale customer To give an existing Shopify customer wholesale access in Process Wholesale, open **Customers**, select **Import customers**, choose the customers and select **Import selected**. Imported customers land on the **Pending** tab tagged `B2B_Registeration`, and they become wholesale customers (B2B customers) only when you select **Accept B2B**. Import works on every plan and sends no email by itself. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Customers** > **Import customers** - **Applies to:** Shopify customers that have neither `B2B` nor `B2B_Registeration` - **Result:** The customer is tagged `B2B_Registeration` and appears on the **Pending** tab - **Next step:** **Accept B2B**, which sends the approval email and adds auto-assigned discounts ## Steps to import existing customers 1. In Shopify admin, open the **Process Wholesale** app and select **Customers**. 2. Select **Import customers**. The **Import customers** window says "Select existing customers to add to your B2B program. Only customers without B2B tags are shown." 3. Find customers with **Search by name or email...**. The list shows **Customer** and **Email** ("No email" when the customer has none), 10 customers per page. 4. Select the checkbox next to each customer you want. 5. Select **Import selected**. The toast reads "Customers imported". 6. Select **Refresh** and open the **Pending** tab. The imported customers are listed there. 7. Approve them: select the pencil button and **Accept B2B**, or select several and use **Accept B2B** in the bulk action bar. See [approving applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). If no customers are listed in the import window, the message reads "All customers already have B2B access or try changing your search." ## What import does and does not do | | **Import customers** | **Accept B2B** afterwards | | --- | --- | --- | | Tag added | `B2B_Registeration` | `B2B` (replaces `B2B_Registeration`) | | Email to the customer | None | "Application approved", if on | | Auto-assigned discount tags | None | Added | | Tax exemption | Unchanged | Set to the **B2B customer tax exemption** setting | | Wholesale prices at checkout | No | Yes, for the customer's discount tags | **Example.** You import three long-standing trade buyers. They appear on **Pending** with the tag `B2B_Registeration` and get no email. You select all three and **Accept B2B**. Each one is tagged `B2B`, receives the approval email and gets the discount tags selected under **Auto assign discount tags**. ## Alternative: add the B2B tag in Shopify admin You can also open the customer in Shopify admin and add the tag `B2B` yourself. That makes the customer a wholesale customer at checkout and in the storefront, and they appear on the **Active** tab. It does not: - send the "Application approved" email, - add the discount tags from **Auto assign discount tags**, or - apply the **B2B customer tax exemption** setting. Assign discounts afterwards with **Manage discount tags** on the **Active** tab or **Bulk assign discount**. See [assigning discounts](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). > **Note:** Adding `B2B_Registeration` by hand also puts a customer on the **Pending** tab. Type it exactly as `B2B_Registeration`. ## What your customers see Nothing changes for the customer while they are pending after an import, and they receive no email. Once you accept them, they receive "Application approved" (if on) and see wholesale prices the next time they log in with their usual account. ## Limits and things to know - **Imported customers always start in Pending.** Import never makes a customer a wholesale customer directly. - **Import shows success for the whole request.** "Customers imported" does not confirm each customer. If someone is missing from the **Pending** tab after **Refresh**, import them again. - **Only customers without wholesale tags are shown.** Customers who already have `B2B` or `B2B_Registeration` do not appear in the import window. - **Existing customers can also apply themselves.** A customer who logs in to their account and submits your wholesale signup form is added to **Pending**. A logged-out shopper who uses an email that already has an account in new customer accounts is asked to log in first. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The customer is not in the import window | The customer already has `B2B` or `B2B_Registeration` | Look on the **Pending** or **Active** tab instead. | | Imported customers are not on the Pending tab | The list was not reloaded, or Shopify did not accept the tag | Select **Refresh**. If still missing, import them again. | | The customer got no email after import | Import sends no email | Accept the customer; the approval email is sent then if it is on. | | A hand-tagged customer has no discount | Hand tagging skips auto-assigned discounts | Use **Manage discount tags** on the **Active** tab. | ## Frequently asked questions ### How do I make an existing Shopify customer a wholesale customer? Import them with **Customers > Import customers**, then select **Accept B2B** on the **Pending** tab. Accepting adds the `B2B` tag, auto-assigned discounts and the approval email. ### Why are imported customers in Pending instead of Active? Process Wholesale treats an import as an application. Every customer needs your approval with **Accept B2B** before they get wholesale access. ### Does importing customers send them an email? No. Import sends nothing. The "Application approved" email is sent when you accept the customer, if that email is on. ### Can I add the B2B tag in Shopify admin instead of importing? Yes. The customer becomes a wholesale customer at once, but no email is sent, no auto-assigned discounts are added and the tax exemption setting is not applied. ## Related articles - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [How to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) --- Source: https://docs.processwholesale.com/customers/remove-wholesale-access Section: Wholesale customers Plans: All plans Last verified: 2026-11-11 # How to remove a customer's wholesale access To end a wholesale customer's (B2B customer's) access in Process Wholesale, open **Customers**, go to the **Active** tab and select **Remove B2B access** from the customer's pencil menu. The customer loses the `B2B` tag and pays retail prices from their next checkout. To send a customer back for review instead, select **Return to pending**. Neither action sends an email, and both work on every plan. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Customers** > **Active** tab - **Actions:** **Remove B2B access** (bulk: **Remove B2B**) and **Return to pending** - **Emails:** None - **Discount tags:** Kept on the customer by both actions ## Steps to remove wholesale access 1. In Shopify admin, open the **Process Wholesale** app and select **Customers**. 2. Select the **Active** tab and find the customer with **Search customers**. 3. Optional: to also take away the customer's discounts, select the pencil button, then **Manage discount tags**, select **Clear all** and save. 4. Select the pencil button, then **Remove B2B access**. The toast reads "Access removed". To remove several customers, select their checkboxes on the **Active** tab and choose **Remove B2B** in the bulk action bar. Selection covers the customers on the current page. ## Steps to return a customer to pending 1. On the **Active** tab, select the customer's pencil button. 2. Select **Return to pending**. The toast reads "Customer moved". For several customers, select them and choose **Return to pending** in the bulk action bar. The toast reads "Customers moved". The customers now appear on the **Pending** tab. ## What each action changes | | **Remove B2B access** | **Return to pending** | | --- | --- | --- | | `B2B` tag | Removed | Removed | | `B2B_Registeration` tag | Removed if present | Added | | Discount tags | Kept | Kept | | `B2Bnetterms` tag | Kept | Kept | | Tax exemption | Set to the **B2B customer tax exemption** setting | Set to the setting | | Customer note | "(Last modified: ...)" line updated, when the customer has a note | Same | | Email | None | None | | Where the customer appears | Neither tab | **Pending** tab | **Example.** A customer has `B2B, gold, B2Bnetterms`. After **Remove B2B access**, the tags are `gold, B2Bnetterms`. The `gold` discount no longer applies at checkout, because wholesale discounts need the `B2B` tag. After **Return to pending** instead, the tags are `gold, B2Bnetterms, B2B_Registeration`. ## What the customer sees afterwards - **At checkout:** retail prices. Wholesale discounts, minimum order rules and Quick Buy need the exact `B2B` tag. - **On the storefront:** the Product Wholesale block, Hide price and the B2B Redirect Block for legacy customer accounts accept any tag that contains `b2b`. A removed customer who still has `B2Bnetterms`, and a customer returned to pending (`B2B_Registeration`), still count as wholesale for those blocks. - **On the signup form:** a removed customer sees the form again and can reapply. A customer returned to pending sees the pending message. - **No message is sent.** Tell the customer yourself if you want them to know. > **Important:** To remove wholesale pricing everywhere on the storefront, also remove the `B2Bnetterms` tag from the customer in Shopify admin. Otherwise the Product Wholesale block can keep showing wholesale prices to them. ## How to restore wholesale access - **After Return to pending:** find the customer on the **Pending** tab and select **Accept B2B**. They get `B2B` back, the auto-assigned discount tags are added and the "Application approved" email is sent if it is on. - **After Remove B2B access:** select **Import customers**, import the customer (they go to **Pending**), then select **Accept B2B**. Or add the `B2B` tag in Shopify admin, which restores access without an email or auto-assigned discounts. See [adding existing customers](https://docs.processwholesale.com/customers/add-existing-customers). Discount tags kept from before take effect again as soon as the customer has `B2B`. ## Limits and things to know - **No email is sent** by **Remove B2B access** or **Return to pending**. Only **Reject B2B** on the **Pending** tab sends the rejection email. - **Discount tags stay.** Clear them with **Manage discount tags** before removing access if you do not want them back on reapproval. - **Tax exemption is rewritten.** With **B2B customer tax exemption** on, a removed customer stays tax exempt. Change their tax setting in Shopify admin if needed. See [tax-exempt wholesale customers](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers). - **Removing a customer does not cancel orders or delete the account.** ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A removed customer still sees wholesale prices on product pages | A remaining tag contains `b2b`, such as `B2Bnetterms` | Remove that tag in Shopify admin. | | A removed customer is still tax exempt | **B2B customer tax exemption** is on and was applied by the action | Turn off the exemption on the customer in Shopify admin. | | A removed customer is not on any tab | Removed customers have no wholesale tags | Use **Import customers** to find them. | | The customer got no email | Neither action sends email | Contact the customer directly. | ## Frequently asked questions ### How do I remove a customer's wholesale access in Process Wholesale? On **Customers > Active**, select the customer's pencil button and **Remove B2B access**. The `B2B` tag is removed and the customer pays retail prices at checkout. ### What is the difference between Remove B2B access and Return to pending? **Remove B2B access** takes the customer out of the wholesale program; they appear on neither tab. **Return to pending** puts them back on the **Pending** tab with `B2B_Registeration`, ready for you to accept or reject. ### Does the customer get an email when I remove wholesale access? No. Neither **Remove B2B access** nor **Return to pending** sends an email. ### Are the customer's discount tags removed too? No. Both actions keep discount tags. They have no effect at checkout without `B2B`, and you can clear them with **Manage discount tags** first. ## Related articles - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [How to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) --- Source: https://docs.processwholesale.com/customers/auto-assign-discount-tags Section: Wholesale customers Plans: All plans Last verified: 2026-11-11 # How to assign discounts automatically when a customer is approved Process Wholesale can add one or more discounts to every customer you approve, so a new wholesale customer (B2B customer) has prices from their first order. Choose the discounts in **Settings > Customer settings > Auto assign discount tags** and select **Save**. Their discount tags are added when you select **Accept B2B** on a pending customer, and each time you save the Settings page they are also added to up to 100 existing wholesale customers. The setting is available on every plan. **At a glance** - **Plan:** All plans. Which discounts you can choose depends on the discounts your plan lets you create. - **Where:** Process Wholesale > **Settings > Customer settings > Auto assign discount tags** - **Applies to:** Customers approved with **Accept B2B** from the **Pending** tab - **Also:** Every Settings save adds the selected tags to up to 100 existing customers tagged `B2B` - **Default:** No discounts selected ## Before you start Create the discounts first. The list offers every [flat discount](https://docs.processwholesale.com/discounts/flat-discounts), tier discount, [price list](https://docs.processwholesale.com/discounts/price-lists) and [cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) you have made. You can create 1 flat or tier discount in total on Starter and 100 on Enterprise and Professional. Price lists and cost plus markup need the Professional plan. ## Steps to auto-assign discounts 1. In Shopify admin, open the **Process Wholesale** app and select **Settings**. 2. Select **Customer settings** in the list on the left. 3. In the **Auto assign discount tags** card, click **Search and select discount tags** and select one or more discounts. Each one shows as a selected tag. To start over, select **Clear all**. 4. Select **Save** in the save bar. The toast reads "Settings updated". To stop auto-assigning a discount, remove it from the field and select **Save**. Removing it from the field does not take the tag off customers who already have it. ## When the discount tags are added | Event | Auto-assigned tags added? | | --- | --- | | **Accept B2B** on a customer from the **Pending** tab (one or in bulk) | Yes | | You save the Settings page, in any section, while you have at least one discount | Yes, to up to 100 existing customers tagged `B2B` | | A shopper submits the signup form | No (the customer is pending) | | **Import customers** | No (the customer is pending) | | You add `B2B` to a customer in Shopify admin | No | | **Return to pending**, then **Accept B2B** again | Yes | On approval, a tag the customer already has is not added twice, whatever its capitalization. **Example.** `gold` (a flat discount) is selected under **Auto assign discount tags**. A pending customer has the tags `B2B_Registeration, vip`. After **Accept B2B**, the tags are `vip, B2B, gold`, and the `gold` discount applies from their next checkout. > **Important:** The card says "Existing customers aren't affected", but saving the Settings page adds the selected discount tags to up to 100 of your existing wholesale customers, and it does so on every save, including saves in other sections such as **Checkout rules**. Before you select a discount here, decide whether existing wholesale customers should have it. If they should not, remove the tag from them afterwards with **Manage discount tags** on the **Customers > Active** tab. ## Giving the discount to all existing customers The Settings save reaches at most 100 existing customers. To add a discount to every wholesale customer, use **Bulk assign discount** on the **Customers** page, which tags all customers tagged `B2B` and emails you the result. See [assigning discounts](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ## What your customers see Nothing at approval time beyond the approval email. From their next checkout, the customer gets the auto-assigned discounts, and the storefront blocks show the matching wholesale prices. In new customer accounts, the Wholesaler Information block on the profile page lists the customer's discounts. ## Limits and things to know - **Approval through Process Wholesale only.** Tags are added on **Accept B2B** for customers who had `B2B_Registeration`. Customers you tag `B2B` by hand do not get them on approval. - **Up to 100 existing customers per save.** Larger stores should use **Bulk assign discount** for existing customers. - **Additive only.** Auto-assign never removes a discount tag. - **More than one discount.** If you select several discounts, the customer gets all of them, and the [priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) decide which applies at checkout. - **Deleting a discount** removes its tag from wholesale customers and from this setting's list. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A newly approved customer has no discount | The customer was tagged `B2B` by hand, or was not pending when accepted | Add the discount with **Manage discount tags**. | | Existing customers got a discount after a Settings save | Every Settings save adds the selected tags to up to 100 existing wholesale customers | Remove it with **Manage discount tags**, or deselect it under **Auto assign discount tags**. | | Some existing customers did not get the discount | The Settings save reaches at most 100 customers | Use **Bulk assign discount**. | | A price list is missing from the list | Price lists need the Professional plan | Check **Plan**. | ## Frequently asked questions ### How do I give every newly approved wholesale customer a discount automatically? Select the discount under **Settings > Customer settings > Auto assign discount tags** and select **Save**. Each customer you accept from the **Pending** tab gets that discount tag. ### Do existing wholesale customers get the auto-assigned discount? Up to 100 of them do. Each Settings save adds the selected tags to up to 100 existing customers tagged `B2B`. Use **Bulk assign discount** to reach all of them. ### Does auto-assign work for imported customers? Yes, when you accept them. Import puts customers on the **Pending** tab, and **Accept B2B** adds the auto-assigned tags. ### Can I auto-assign a different discount to different customers? No. Every customer you accept gets the same selected discounts. Give individual customers other discounts with **Manage discount tags**. ## Related articles - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) --- Source: https://docs.processwholesale.com/customers/wholesale-emails Section: Wholesale customers Plans: All plans Last verified: 2026-11-11 # Wholesale application emails and how to edit them Process Wholesale sends three emails to applicants, "Application received", "Application approved" and "Application rejected", plus a "New Wholesale Application" alert to your Shopify store email for each application. Turn the customer emails on or off and edit their subject and message in **Settings > Customer settings > B2B customer emails**. All three customer emails are on by default, and the emails work on every plan. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Settings > Customer settings > B2B customer emails**, then **Customize template** - **Customer emails:** From your store name at `alerts@processwholesale.com`; replies go to the store email Process Wholesale recorded when the app was installed - **Merchant alert:** From "Process Wholesale" at `alerts@processwholesale.com`, to your Shopify store email; cannot be turned off or edited - **Default:** All three customer emails on ## Which emails are sent, and when | Email | Recipient | Trigger | Timing | Can be turned off | Editable | | --- | --- | --- | --- | --- | --- | | Application received | The applicant | A wholesale application is submitted | Immediately; about 1 minute later when a logged-out shopper uses the storefront signup form with legacy customer accounts | Yes | Yes | | Application approved | The customer | **Accept B2B** on a pending customer | Immediately | Yes | Yes | | Application rejected | The customer | **Reject B2B** | Immediately | Yes | Yes | | New Wholesale Application | Your Shopify store email | Each application submitted through a signup form | Immediately | No | No | | Milestone | Your store email | An approval brings your number of customers tagged `B2B` to 10, 25 or 50 | On approval | No | No | **Return to pending**, **Remove B2B access**, **Import customers** and tagging customers in Shopify admin send no email. **Sender and replies.** Customer emails come from your store name at `alerts@processwholesale.com`, and replies go to your store's email address as it was when you installed Process Wholesale. The alert comes from "Process Wholesale" at `alerts@processwholesale.com`. **Legacy customer accounts timing.** When a logged-out shopper uses the signup form on a store with legacy customer accounts, Shopify creates the account, and Process Wholesale sends "Application received" about 1 minute later, after it finds the new pending account. It checks again after about 2 and 10 more minutes. If no pending account is found, or you have already reviewed the customer, no email is sent. Shopify admin labels the two account types **Customer accounts** (new) and **Legacy**. ## Steps to turn a customer email on or off 1. In Shopify admin, open the **Process Wholesale** app and select **Settings**. 2. Select **Customer settings**. 3. In the **B2B customer emails** card, check or clear **Application received**, **Application approved** or **Application rejected**. 4. Select **Save** in the save bar. ## Steps to edit an email template 1. In the **B2B customer emails** card, select **Customize template** next to the email. 2. Edit **Subject** (up to 200 characters) and **Message** (up to 10,000 characters). Leave a blank line between paragraphs. Write a link as `[link text](https://example.com)`. 3. To add a variable, place the cursor and select it under **Variables**: - `{{customerName}}`: Customer's name - `{{shopName}}`: Your store name - `{{shopUrl}}`: Link to your store 4. Check the **Preview**, which fills the variables with sample values such as "Jane Doe". 5. Select **Save** in the save bar. The toast reads "Email template saved". 6. Select **Settings** to go back. The email now shows a **Customized** badge. **Reset to default** restores the original subject and message; select **Save** to keep it. When the saved text matches the default, the **Customized** badge disappears. If an email is off, the editor shows "This email is turned off, so customers won't receive it. You can turn it on in Settings." with **Go to settings**. ## How the templates are filled in - Only the three variables are replaced. Spaces inside the braces work: `{{ customerName }}`. Any other `{{...}}` text is sent as written. - If a value is missing, the customer's name becomes "there" and the store name becomes "The Team". - `{{shopUrl}}` is your store's `myshopify.com` address. - A blank line starts a new paragraph, and a single line break stays a line break. Links written as `[link text](https://example.com)` or `[link text](mailto:you@example.com)`, and plain `http://` or `https://` addresses, become links. The subject is sent as one line. **Example.** Subject `{{shopName}} - Hi {{ customerName }}` for the store "Acme Supply" and the customer Jane Doe arrives as "Acme Supply - Hi Jane Doe". **Default subjects:** - Application received: `{{shopName}} - B2B Application Received` - Application approved: `{{shopName}} - B2B Application Approved!` (the message includes a **Shop now** link to your store) - Application rejected: `{{shopName}} - Update on your B2B Application` ## The new application alert Each application submitted through a signup form sends "New Wholesale Application: " to the email set in Shopify admin under **Settings > Store details**. To send alerts to another address, change the store email there. The alert has a **View In App** button that opens the **Customers** page. What the alert includes depends on where the customer applied: - **Signup form on your storefront:** the applicant's email and name, but not the business answers. Business name, business address, phone number, tax ID, other form fields and file links are not in the alert. - **Signup page in new customer accounts:** the applicant's email, name and the answers they submitted. To read a complete application, open **Customers > Pending** and select **View details** on the customer. ## What your customers see The customer emails arrive in the applicant's inbox from your store name. Their reply goes to the store email Process Wholesale recorded when the app was installed. Each email has one version, in the language you write it in. ## Limits and things to know - **One template per email.** There is no separate version per language. - **The merchant alert cannot be turned off or edited.** - **The approval email needs a pending customer.** It is sent only when the customer had `B2B_Registeration` when accepted and has an email address. - **Only Reject B2B sends the rejection email.** - **Whitelist the sender.** Ask your email provider to accept `alerts@processwholesale.com`, and check spam the first time. Customers may need to do the same. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | No new application alert | It went to spam, or your store email is a different address | Whitelist `alerts@processwholesale.com` and check **Settings > Store details** in Shopify admin. | | Applicant got no "Application received" | The email is off, or with legacy customer accounts no pending account was found within about 13 minutes | Turn it on. Check that the customer is on the **Pending** tab. | | No approval email | The email is off, the customer was not pending, or has no email | See [wholesale emails not being received](https://docs.processwholesale.com/troubleshooting/emails-not-received). | | A variable shows as text | It is spelled differently | Insert it from **Variables**. | ## Frequently asked questions ### How do I edit the wholesale approval email? Go to **Settings > Customer settings > B2B customer emails** and select **Customize template** next to **Application approved**. Change the subject and message, then select **Save**. ### Can I turn off the wholesale application emails? Yes, each customer email separately. Clear its checkbox in **B2B customer emails** and select **Save**. The merchant alert cannot be turned off. ### Where is the new wholesale application alert sent? To your Shopify store email, set in Shopify admin under **Settings > Store details**. ### Why does the alert email not show the business details? For applications from the storefront signup form, the alert lists the applicant's email and name but not the answers to the form's business fields. Open **View details** on the **Pending** tab to read every answer. ### Can I send a test email? No. Use **Preview** in the template editor to check the subject and message with sample values. ## Related articles - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Wholesale emails not being received](https://docs.processwholesale.com/troubleshooting/emails-not-received) - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) --- Source: https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers Section: Wholesale customers Plans: All plans Last verified: 2026-11-11 # How to make wholesale customers tax exempt Process Wholesale can set your wholesale customers (B2B customers) to "don't collect tax" in Shopify. Check **B2B customer tax exemption** under **Settings > Customer settings** and select **Save**: Process Wholesale updates your existing wholesale customers during the save, and every customer you approve afterwards is set the same way. The setting is off by default and available on every plan. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Settings > Customer settings > B2B customer tax exemption** - **What it changes:** The tax exemption on the customer in Shopify (checked = don't collect tax) - **Default:** Off (tax is collected) - **Applied:** To existing wholesale customers when you save a change, and to a customer each time you use **Accept B2B**, **Reject B2B**, **Return to pending**, **Remove B2B access** or **Manage discount tags** on them ## Steps to make wholesale customers tax exempt 1. In Shopify admin, open the **Process Wholesale** app and select **Settings**. 2. Select **Customer settings** in the list on the left. 3. In the **B2B customer tax exemption** card, check "Choose to set B2B customer accounts to 'collect tax' or 'dont collect tax'." Checked means your wholesale customers are tax exempt. Cleared means tax is collected. 4. If the update will take more than 10 seconds, a banner shows the estimate, for example: "Updating tax exemption for 500 B2B customers will take approximately 12 seconds to complete after you save." 5. Select **Save** and keep the page open until the toast "Settings updated" appears. The save finishes when the customer update is done. To stop exempting wholesale customers, clear the checkbox and select **Save**. Process Wholesale sets your existing wholesale customers back to collect tax during the save. ## What happens to existing customers when you switch the setting When you save a changed value, Process Wholesale sets your existing wholesale customers to the new value, 50 customers at a time, before the save completes. The estimate depends on how many wholesale customers you have and your Shopify plan. **Example.** A store on a standard Shopify plan has 1,000 wholesale customers. Checking the box shows "approximately 23 seconds", and the save takes about that long while Process Wholesale updates the customers. With 500 customers the estimate is 12 seconds. Under about 10 seconds, no banner is shown. Saving the Settings page without changing the checkbox does not update existing customers. ## Which later actions set a customer's tax status again | Action | Tax status set to the setting? | | --- | --- | | **Accept B2B** | Yes | | **Reject B2B** | Yes | | **Return to pending** | Yes | | **Remove B2B access** | Yes | | **Manage discount tags** | Yes | | Changing the setting and saving | Yes, for existing wholesale customers | | Signup form submission | No | | **Import customers** | No | | **Bulk assign discount** | No | | Adding the `B2B` tag in Shopify admin | No | > **Important:** **Accept B2B**, **Reject B2B**, **Return to pending**, **Remove B2B access** and **Manage discount tags** each write the setting's value to the customer they change. With the setting off, a tax exemption you set by hand in Shopify admin is removed the next time you accept, reject, move, remove or change discount tags on that customer. With the setting on, a customer you reject or remove stays tax exempt. Set exceptions by hand in Shopify admin after the action, and set them again after any later action on that customer. ## What your customers see A tax-exempt wholesale customer is not charged tax at checkout. Customers whose tax status is unchanged see tax as before. Process Wholesale only sets the exemption on the customer; Shopify calculates tax. ## Limits and things to know - **One setting for all wholesale customers.** You cannot exempt some wholesale customers and not others from Process Wholesale; set exceptions in Shopify admin. - **Hand-tagged customers are not updated until an action or a setting change.** A customer you tag `B2B` in Shopify admin keeps their current tax status. - **Keep the page open during a long save.** The update runs as part of the save. - **Pending customers are not exempted on signup.** They are set when you accept them. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A new wholesale customer is still charged tax | The customer was tagged `B2B` in Shopify admin or imported without being accepted | Accept them on the **Pending** tab, or clear and re-check the setting, saving each time, to update existing wholesale customers. | | A customer lost a tax exemption set by hand | The setting is off, and an action on the **Customers** page (such as **Accept B2B** or **Manage discount tags**) applied it | Set the exemption again in Shopify admin. | | A removed customer is still tax exempt | The setting is on, and **Remove B2B access** applied it | Change the customer's tax setting in Shopify admin. | | No time estimate appears | The update is estimated at 10 seconds or less | No fix needed. | ## Frequently asked questions ### Are wholesale customers tax exempt automatically? Only when **B2B customer tax exemption** is checked. Then existing wholesale customers are updated when you save, and each customer you accept is set tax exempt. ### What happens to existing customers when I change the tax exemption setting? Process Wholesale sets your existing wholesale customers to the new value during the save. The banner shows how long it will take when it is over 10 seconds. ### Why did a customer lose a tax exemption I set by hand? With the setting off, **Accept B2B**, **Reject B2B**, **Return to pending**, **Remove B2B access** and **Manage discount tags** each set that customer back to collect tax. Set the exemption again in Shopify admin after the action. ### Can I exempt only some wholesale customers? Not from Process Wholesale. The setting applies to all wholesale customers. Set individual exceptions in Shopify admin, and set them again after any later action on that customer in **Customers**. ## Related articles - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) --- Source: https://docs.processwholesale.com/customers/redirect-after-login Section: Wholesale customers Plans: Enterprise, Professional Last verified: 2026-11-11 # How to redirect wholesale customers after login Process Wholesale can send wholesale customers (B2B customers) to a page you choose, such as `/collections/wholesale` or your Quick Buy page, when they open their customer account after logging in. Enter the path under **Settings > Customer settings > B2B customer redirect after login**, then add the block that matches your customer account type: the **B2B Redirect Block** in your theme for legacy customer accounts, or the **Redirect** block in the customer account editor for new customer accounts. Each customer is redirected at most once every 12 hours. The redirect needs the Enterprise or Professional plan. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Process Wholesale > **Settings > Customer settings > B2B customer redirect after login > Redirect URL** - **Legacy customer accounts:** **B2B Redirect Block** on the theme's customer account page - **New customer accounts:** **Redirect** block on the **Orders** page of the customer account editor - **How often:** At most once every 12 hours per customer (per browser with legacy customer accounts) - **Default:** Off (no URL) ## Before you start Check which customer account type your store uses. In Shopify admin, look under **Settings** for your customer accounts setting; Shopify labels the two types **Customer accounts** (new customer accounts) and **Legacy** (legacy customer accounts). The redirect URL is the same for both; the block you add is different. ## Steps to set the redirect URL 1. In Shopify admin, open the **Process Wholesale** app and select **Settings**. 2. Select **Customer settings**. 3. In the **B2B customer redirect after login** card, enter a path in **Redirect URL**. The field shows your store's primary domain in front, so enter only the part after it, starting with `/`. Examples: `/collections/wholesale`, `/pages/quick-buy`. 4. Select **Save**. On Starter the field is disabled and the card shows **Upgrade to Enterprise**. Enterprise and Professional both qualify. ## Steps for legacy customer accounts: add the B2B Redirect Block 1. In Shopify admin, go to **Online Store > Themes** and select **Customize** on your live theme. 2. Open the template for the customer account page. 3. Add a block, select **Apps**, and choose **B2B Redirect Block**. 4. Select **Save**. Shortcut: on the Process Wholesale **Dashboard**, under **App Status**, the **B2B Redirect** card's **Enable** link opens the theme editor on that template. ## Steps for new customer accounts: add the Redirect block 1. On the Process Wholesale **Dashboard**, under **App Status**, select **Enable** on the **B2B Redirect** card. It opens the customer account editor on the **Orders** page. 2. Add the Process Wholesale block named **Redirect** to the **Orders** page. 3. Save in the editor. When the block is active, the **B2B Redirect** card shows **ON**. ## Who is redirected, and how often | | Legacy customer accounts (B2B Redirect Block) | New customer accounts (Redirect block) | | --- | --- | --- | | Who is redirected | Logged-in customers with any tag that contains `b2b`, including pending customers tagged `B2B_Registeration` and customers tagged `B2Bnetterms` | Logged-in customers with the exact tag `B2B`, in any capitalization. Pending customers are not redirected. | | Where the redirect starts | The customer account page | The **Orders** page of the customer account | | How often | Once every 12 hours per customer in each browser | At most once every 12 hours | | Where the customer goes | The path you entered, on your store | Your primary domain followed by the path you entered | **Example.** The redirect URL is `/collections/wholesale`, on a store with legacy customer accounts. A wholesale customer opens their account page at 09:00 and is sent to the wholesale collection. They open their account page again at 15:00 and stay there. At 21:01 they open their account page and are sent to the wholesale collection again. ## What your customers see When a wholesale customer opens the page that holds the redirect block (the account page with legacy customer accounts, the **Orders** page with new customer accounts), the browser moves to the page you chose. Customers who are not wholesale see that page as normal. Within 12 hours of a redirect, the customer can open that page without being sent away. ## Testing the redirect 1. Create or pick a test customer and tag them `B2B`. 2. Log in as that customer on your live storefront (not in the theme or account editor). 3. Confirm you arrive on the redirect page. 4. To test again within 12 hours with legacy customer accounts, use a private browser window. With new customer accounts, wait 12 hours or use a second test customer. ## Limits and things to know - **Enter a path that starts with `/`.** The path is added to your domain as written, so `collections/wholesale` without the slash does not lead to the right page. - **The legacy block counts any tag with `b2b`.** Pending customers tagged `B2B_Registeration` are redirected too. Point the redirect at a page that also makes sense for an applicant, or review applications promptly. - **One URL for all wholesale customers.** You cannot send different customers to different pages. - **The redirect runs only where its block is placed:** the customer account page (legacy) or the **Orders** page (new). - **The setting and blocks need Enterprise or Professional.** ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | Nobody is redirected | No URL saved, the block is missing, or it is the wrong block for your account type | Save a **Redirect URL** and check the **B2B Redirect** card on the **Dashboard**. | | A customer was redirected once, then not again | The 12-hour limit | No fix needed. | | Pending customers are redirected | Legacy customer accounts redirect any tag containing `b2b` | Review pending applications, or choose a page suitable for applicants. | | The redirect lands on a page not found | The path is wrong or has no leading `/` | Enter the path exactly as it appears after your domain, starting with `/`. | | The Redirect URL field is greyed out | The store is not on Enterprise or Professional | Upgrade under **Plan**. | ## Frequently asked questions ### What URL do I enter for the B2B redirect? A path on your store that starts with `/`, such as `/collections/wholesale`. The field already shows your primary domain in front of it. ### How often are wholesale customers redirected? At most once every 12 hours. After that, opening the page with the redirect block again redirects them once more. ### Which customers are redirected after login? With new customer accounts, customers with the exact tag `B2B`. With legacy customer accounts, customers with any tag that contains `b2b`, which includes pending customers. ### Does the redirect work with new customer accounts? Yes. Add the **Redirect** block to the **Orders** page in the customer account editor. Legacy customer accounts use the **B2B Redirect Block** in the theme instead. ## Related articles - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) - [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content) - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/customers/at-risk-customers Section: Wholesale customers Plans: Professional Last verified: 2026-11-11 # At-risk customers and recovery emails Process Wholesale marks a wholesale customer (B2B customer) as at risk when their most recent wholesale order is more than 45 days old, and lists them on the **At-risk customers** page. From that page you can send each customer a "Ready to place your next order?" recovery email with your store name as the sender. Open the page from **Analytics > Customers > Take action** on the Professional plan. At-risk customers are also called lapsed, inactive or churning customers, and the email is a win-back or reorder reminder. **At a glance** - **Plan:** Professional - **Where:** Process Wholesale > **Analytics** > **Customers** tab > **At-risk customers** card > **Take action** - **At risk:** At least one wholesale order, and the latest wholesale order is more than 45 days old - **Email:** Fixed text, in your store's primary language, sender name = your store name - **Replies:** Do not reach you (see "Limits and things to know") - **Statuses:** **Not sent**, **Sent**, **Opened** ## How a customer becomes at risk A customer is at risk when both are true: - Process Wholesale has recorded at least one [wholesale order](https://docs.processwholesale.com/analytics/wholesale-orders) from the customer. A wholesale order is an order that received a Process Wholesale discount. - The customer's latest wholesale order was recorded more than 45 days ago. The clock starts at the customer's latest wholesale order. Only wholesale orders reset it: an order without a Process Wholesale discount does not. There is no upper limit, so a customer whose last wholesale order was two years ago stays on the list. Customer tags are not checked, so a customer who no longer has the `B2B` tag can still be listed. **Example.** Today is November 11, 2026. | Latest wholesale order | Days since | At risk? | | --- | --- | --- | | September 20, 2026 | 52 | Yes | | October 1, 2026 | 41 | No, even if the customer placed an order without a wholesale discount yesterday | ## The At-risk customers page The page title is **At-risk customers**, with the subtitle "Customers that have not placed an order in 45+ days". **Analytics** at the top returns to the Analytics page. | Column | Shows | | --- | --- | | **Customer name** | The customer's name, or the email address if there is no name | | **Last order date** | Date of the latest wholesale order, as month/day/year | | **Recovery email status** | Status of the latest recovery email sent to the customer | - **Sorting:** Oldest last order first, so the customers who have waited longest are at the top. The order cannot be changed. - **Rows:** Every at-risk customer is listed on one page. - **Search:** **Search customers...** matches any part of the name or email address, ignoring capitalization. - **Filter:** **Recovery email status** filters by the status of the latest recovery email: **Not sent**, **Sent**, **Failed** or **Opened**. You can pick several. **Failed** matches no customer, because an email that could not be sent is not recorded. The applied filter shows as "Status: All" or, for example, "Status: Not sent, Sent". - **Empty page:** "No at-risk customers" with "All your wholesale customers have placed orders within the last 45 days." With a search or filter that matches nobody: "No customers found" with "Try changing the search term or filters" and **Clear search**. ## Send a recovery email 1. In Shopify admin, open the **Process Wholesale** app and select **Analytics**. 2. Select the **Customers** tab. 3. On the **At-risk customers** card, select **Take action**. 4. Check the box next to each customer you want to email. Use the filter **Recovery email status** > **Not sent** to find customers you have not emailed yet. 5. Select **Send recovery emails**. The emails are sent right away. Process Wholesale then shows one of these messages and reloads the list: | Message | Meaning | | --- | --- | | "Sent 3 recovery emails" (or "Sent 1 recovery email") | Every selected customer was emailed | | "Sent 2 emails, 1 failed" | Some emails could not be sent, for example because the customer has no email address | | "Failed to send recovery emails" | Sending stopped with an error. Check **Recovery email status** to see which customers were emailed before you send again. | | "No customers selected" | You selected **Send recovery emails** without checking any customer | ## What your customers see The customer receives an email from your store name. The sending address is alerts@processwholesale.com. In English, the email reads: - **Subject:** "Ready to place your next order?" - A greeting with the customer's name, or "Hi there," when the name is unknown - A note that it has been a while since their last order, and a suggestion to restock - A **Shop Now** button that opens your store's home page - An invitation to reply with questions, for updated pricing or for help with the next order - "Best regards," followed by your store name The email has no discount code. You cannot edit the text. ## Recovery email languages Process Wholesale writes the email in your store's primary language, not the customer's language. Translated versions exist for English, Spanish, French, German, Italian, Portuguese, Dutch and Japanese. Any other primary language gets the English email. When the customer's name is unknown, the greeting uses the English word "there" in every language. ## Recovery email statuses | Status | Meaning | | --- | --- | | **Not sent** | No recovery email has been sent to this customer | | **Sent** | The latest recovery email was sent | | **Opened** | The customer opened the latest recovery email | The status always reflects the latest email. Sending a new email to a customer whose status is **Opened** sets it back to **Sent**. When an email cannot be sent, the customer keeps their previous status, and the failure shows only in the message after sending. ## Limits and things to know > **Important:** Replies to a recovery email do not reach you. The email invites customers to reply, but it is sent from alerts@processwholesale.com with no reply address of yours, so replies go to that address. Make sure customers can find your contact details on your store, and contact important accounts directly. - **No limit on resending.** Process Wholesale does not stop you from emailing the same customer again, even the same day. Check **Recovery email status** before sending. - **Customers need an email address.** A customer without one is counted as failed. - **The 45-day threshold is fixed.** You cannot change it. - **Only wholesale orders count.** A customer who keeps buying without a Process Wholesale discount stays at risk. - **History starts at install.** Orders placed before Process Wholesale was installed do not count, so a long-standing customer can look at risk based on recent orders only. - **Uninstalling deletes the recovery email history** together with order history. - **Professional plan.** The **Take action** link appears only on the Professional plan, where the Customers tab shows real data. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A customer who ordered last week is listed | The recent order did not receive a Process Wholesale discount | Check the discounts on the order. Only wholesale orders reset the clock. | | A customer who stopped ordering is not listed | Process Wholesale never recorded a wholesale order from them, or their last wholesale order is 45 days old or less | No fix needed. Customers appear only after a recorded wholesale order. | | No **Take action** link | The store is not on the Professional plan | Upgrade under **Plan**. | | "Sent 2 emails, 1 failed" | A selected customer has no email address, or the email could not be sent | Add an email address to the customer in Shopify admin and send again. | | A customer says they replied but you got nothing | Replies go to the Process Wholesale sending address | Contact the customer directly. | ## Frequently asked questions ### How many days before a wholesale customer is at risk? More than 45 days. A customer is at risk when their latest wholesale order was recorded more than 45 days ago. ### Can I change the recovery email text or add a discount code? No. The recovery email text is fixed and has no discount code. ### Who is the recovery email from? The sender name is your store name and the sending address is alerts@processwholesale.com. If your store has no name, the sender is "Process Wholesale". ### Where do replies to a recovery email go? To alerts@processwholesale.com, not to you. Customers who want to reach you need your store's own contact details. ### Can I send recovery emails on a plan other than Professional? No. At-risk customers and recovery emails are part of full analytics on the Professional plan. ## Related articles - [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics) - [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/signup-forms/signup-forms-overview Section: Wholesale signup forms Plans: All plans Last verified: 2026-11-11 # Wholesale signup forms: which form to use Process Wholesale gives you a wholesale signup form (also called a wholesale application form or B2B registration form) in four versions: a standard form and a custom form for stores on legacy customer accounts, and a standard form and a custom form for stores on new customer accounts. The right one depends on which Shopify customer account type your store uses, which you can see in Shopify admin under **Settings > Customer accounts**. The standard forms work on every plan; the custom forms need the Enterprise or Professional plan. Every form creates an application that you approve or reject by hand. **At a glance** - **Plan:** Standard forms on every plan. Custom forms on Enterprise or Professional. - **Check your account type:** Shopify admin > **Settings > Customer accounts**. Shopify labels the two types **Customer accounts** (new customer accounts) and **Legacy** (legacy customer accounts, email and password). - **Result of a submission:** A pending customer (tagged `B2B_Registeration`) in Process Wholesale > **Customers > Pending** - **Approval:** Always manual ## Step 1: check which customer account type your store uses Using the signup form built for the other account type is the most common reason a wholesale signup form does not work. Check before you add a form: 1. In Shopify admin, go to **Settings > Customer accounts**. 2. See which version is selected. **Customer accounts** means your store uses new customer accounts. **Legacy** means your store uses legacy customer accounts (sometimes called classic customer accounts). If you change the account type later, review your signup form setup with the table in the next section. When a theme block form sends the application through Shopify's legacy account creation on a store that uses new customer accounts, Shopify shows the message "Customer account creation has been disabled"; see [signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) for the fix. ## The four Process Wholesale signup forms compared | Form | Account type | Where you add it | Who can see and submit it | Plan | Article | | --- | --- | --- | --- | --- | --- | | **Wholesale Signup Form** (theme app block) | Legacy customer accounts. Also works on new customer accounts with **Use new customer flow** set correctly. | Shopify theme editor, on a page, collection, product or home page template | Guests and logged-in customers | All plans | [Add the signup form to your theme](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts) | | **Wholesale Custom Signup** (theme app block) | Same as the standard theme block | Shopify theme editor, same templates | Guests and logged-in customers | Enterprise or Professional | [Build a custom signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) | | **Wholesale signup Form** (customer account extension) | New customer accounts | Shopify checkout and accounts editor, as a page in customer accounts | Only customers who are signed in to their account | All plans | [Add the signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts) | | **Wholesale custom signup Form** (customer account extension) | New customer accounts | Shopify checkout and accounts editor | Only customers who are signed in to their account | Enterprise or Professional | [Build a custom signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) | The standard forms have a fixed set of fields (name, email, business name, business address, phone number, tax ID, website and additional info) that you can show, hide or make required. The custom forms use the fields you build on the **Custom Signup Form** page in Process Wholesale, including file uploads and a consent checkbox. One custom form definition feeds both custom forms. The [Quick Buy order form](https://docs.processwholesale.com/storefront/quick-buy-setup) can also show the standard signup form to visitors who are not wholesale customers, so an applicant can sign up on the Quick Buy page. ## Which form to choose for each account type **Legacy customer accounts.** Add the **Wholesale Signup Form** block, or the **Wholesale Custom Signup** block on Enterprise or Professional, to a page in your theme. Guests fill in the form, including a password, and Shopify creates their account. The customer account extensions do not apply to legacy accounts. **New customer accounts.** You have two options, and you can use both: - **Customer account forms.** Add the **Wholesale signup Form** or **Wholesale custom signup Form** extension in the checkout and accounts editor. Only signed-in customers see it, so a new applicant first creates a store account by signing in, then applies. Pair it with the **Wholesaler Information** block on the customer's profile page, which shows a sign-up button. - **Theme block forms for guests.** The **Wholesale Signup Form** and **Wholesale Custom Signup** theme blocks also work on new customer accounts when the block setting **Use new customer flow** resolves to **Yes**. The form then has no password field, and Process Wholesale creates the customer account from the email address, with no password. The customer later signs in to the store with that email. ## What happens when an applicant submits any signup form Every Process Wholesale signup form does the same things on a successful submission: 1. The customer gets the tag `B2B_Registeration` (spelled this way) and becomes a pending customer. A new customer account is created when the applicant did not have one; a logged-in customer keeps their account and gets the tag added. 2. The answers are saved in the Shopify customer note. In Process Wholesale, they appear as **Signup notes** under **View details** on the **Customers** page. 3. You get a **New Wholesale Application** email at your Shopify store email address. 4. The applicant gets the **Application received** email, if it is turned on in **Settings > Customer settings**. 5. The applicant sees the pending message, which by default reads "Thank you! your wholesale account is currently under review". The applicant is not a wholesale customer yet. Wholesale prices, Quick Buy and checkout rules apply only after you approve the application, which replaces `B2B_Registeration` with `B2B`. See [how to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ## Approval is always manual Process Wholesale has no automatic approval. Every signup form tags the applicant as pending, and only your **Accept B2B** action on the **Customers** page, or adding the `B2B` tag yourself in Shopify admin, makes a customer a wholesale customer (B2B customer). Approving in Process Wholesale also adds any automatic discount tags and sends the approval email (when it is turned on); tagging by hand in Shopify admin does neither. ## Differences between new and legacy customer accounts for wholesale signup | | Legacy customer accounts | New customer accounts | | --- | --- | --- | | Password on the form | Shown and required (at least 5 characters, no spaces) | Not shown | | Who creates the account | Shopify, from the form | Process Wholesale, from the email address (theme block), or the customer already has one (customer account form) | | After Submit | The page reloads and shows the pending message | The form is replaced by the pending message without a reload | | Application received email | For a guest, sent after a short delay, once the account exists; right away for a logged-in customer | Sent right away | | Applicant whose email already has an account | Should log in first, then submit the form | Sees "An account already exists with this email." with a link to log in, then applies | | Captcha | Built-in captcha on theme forms | Built-in captcha on theme forms. Customer account forms have no captcha and need sign-in. | | File uploads | Custom theme form | Custom theme form and custom customer account form | Redirecting wholesale customers after they log in is also set up differently for each account type. See [how to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). ## Worked example A store on new customer accounts (Shopify shows **Customer accounts** under **Settings > Customer accounts**) is on the Starter plan. It adds the **Wholesale signup Form** customer account extension and the **Wholesaler Information** block. A buyer signs in to their store account, opens their profile, selects **Sign up**, fills in Business Name and Tax ID and selects **Submit**. The buyer sees the pending message, the store owner gets the **New Wholesale Application** email, and the buyer appears in **Customers > Pending**. After the owner selects **Accept B2B**, the buyer has the `B2B` tag and is a wholesale customer; wholesale prices apply once the buyer's discount tags are assigned. ## Frequently asked questions ### Which Process Wholesale signup form should I use? Use the form that matches your Shopify customer account type. On legacy customer accounts, use the **Wholesale Signup Form** theme block. On new customer accounts, use the **Wholesale signup Form** customer account extension, the theme block with **Use new customer flow** set to **Yes**, or both. On Enterprise or Professional, the custom versions of each work the same way with your own fields. ### How do I check if my store uses new or legacy customer accounts? In Shopify admin, go to **Settings > Customer accounts**. **Customer accounts** means new customer accounts; **Legacy** means legacy customer accounts. ### Are wholesale applications approved automatically? No. Every application waits in **Customers > Pending** until you select **Accept B2B** or **Reject B2B**. ### Can guests apply for wholesale on new customer accounts? Yes, through a theme block form. The **Wholesale Signup Form** and **Wholesale Custom Signup** theme blocks accept guests and create the account from the email address when **Use new customer flow** resolves to **Yes**. The customer account extension forms are only for signed-in customers. ### Which signup form needs the Enterprise or Professional plan? The custom forms: the **Wholesale Custom Signup** theme block, the **Wholesale custom signup Form** customer account extension and the **Custom Signup Form** builder page. The standard forms work on every plan. Current prices are on the plan page that opens from **Plan** in the app. ## Related articles - [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts) - [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts) - [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) --- Source: https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts Section: Wholesale signup forms Plans: All plans Last verified: 2026-11-11 # How to add the wholesale signup form to your theme (legacy customer accounts) Process Wholesale adds a **Wholesale Signup Form** app block to your Shopify theme so visitors can apply for a wholesale (B2B) account. You place it in the theme editor on a page, collection, product or home page template, choose which business fields it asks for, and every submission lands in Process Wholesale under **Customers > Pending** for you to approve. The block is available on every plan and is built for stores on legacy customer accounts; it also works on new customer accounts when **Use new customer flow** is set correctly. **At a glance** - **Plan:** All plans - **Where:** Shopify theme editor > a page, collection, product or home page template > **Add block** > **Wholesale Signup Form** - **Account type:** Legacy customer accounts. Shopify admin labels them **Legacy** under **Settings > Customer accounts**; the newer type is labeled **Customer accounts**. - **Who sees the form:** Guests and logged-in customers who are not yet wholesale or pending - **Result:** A pending customer tagged `B2B_Registeration`, approved by you ## Before you start - In Shopify admin, open **Settings > Customer accounts** and confirm the store uses **Legacy** accounts. For **Customer accounts** (new customer accounts), read [how to add the signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts) first. - Your theme must be an Online Store 2.0 theme (one that supports app blocks). See [blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing) if you cannot find the block. - To ask for your own fields or file uploads, use the custom form instead: [how to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). ## Steps to add the Wholesale Signup Form block 1. In Shopify admin, go to **Online Store > Pages** and create a page for the form, for example "Wholesale signup". Save it. 2. Go to **Online Store > Themes** and select **Customize** on your live theme. 3. Open the page you created from the page selector at the top of the theme editor. 4. In a section on that page, select **Add block**, then select **Wholesale Signup Form** under the apps. 5. Set the block settings described in the next section. 6. Select **Save**. 7. Add a link to the new page in your store navigation or footer so applicants can find it. You can also put the block on a collection, product or home page template. The **Signup form** card on the Process Wholesale Dashboard only detects the block on page templates, so placing it on a page is recommended. Video walkthrough: **Setup Signup Form**, from the Dashboard's quick guide ([watch on Vimeo](https://vimeo.com/1179055704)). ## Wholesale Signup Form block settings | Setting | Default | What it does | | --- | --- | --- | | **Use new customer flow** | **Auto** | **No**: the form asks for a password and Shopify creates the account (legacy customer accounts). **Yes**: no password, and Process Wholesale creates the account (new customer accounts). **Auto**: acts as **Yes** when Process Wholesale recorded new customer accounts when the app was installed or when you last saved **Settings** in the app, and as **No** otherwise. | | **Registration form heading** | "Create wholesale account" | Heading above the form | | **Text to show to logout customers above login button** | "Or login, If you already have an account." | Text above the **Login** button under the form | | **Text to show for pending approval B2B customers** | "Thank you! your wholesale account is currently under review" | Message shown to pending customers and after a successful submission | | **Pending approval message color** | #30383f | Color of the pending message | | **Text to show for already logged in B2B customers** | "You are logged into your wholesale account" | Message shown in place of the form to wholesale customers | | **Browse products link for logged in accounts** | Empty | When set, wholesale customers also see a **Browse products** button to this link | | **Business Name** | **Required** | **Required**, **Optional** or **Hidden** | | **Business Address** | **Optional** | Same choices | | **Phone Number** | **Optional** | Same choices | | **Tax ID** | **Optional** | Same choices | | **Website** | **Optional** | Same choices | | **Additional Info** | **Optional** | Same choices | | **Enable customization** | Off | Turns on the design settings below, which appear only while this is on. Off, the form uses the default styling. | | **Text color** | #5a5a5a | Form text color | | **Background color** | Transparent | Form background | | **Field background color** | #ffffff | Input background | | **Field text color** | #5a5a5a | Input text and labels | | **Field border color** | #c0c0c0 | Input border | | **Field border width** | 1 px (0 to 4) | Input border width | | **Field & button border radius** | 0 px (0 to 24) | Corner rounding | | **Button background color** | #000000 | **Submit** button background | | **Button text color** | #ffffff | **Submit** button text | On a store that uses legacy customer accounts, set **Use new customer flow** to **No** if the form does not show a **Password** field. **Auto** relies on the account types the app recorded, which can be out of date if you switched account types. ## Fields on the standard signup form The fields appear in this order. The ones marked with an asterisk are always on the form and always required: 1. **First Name** \* 2. **Last Name** \* 3. **Business Name** 4. **Business Address**: **Country** (starts at the visitor's country, otherwise your store's country), **Address**, **Apartment, suite, etc (optional)**, **City**, **State** (a list when the country has states or provinces), **Zip Code**. When **Business Address** is required, every part except the apartment line is required. The parts are saved as one line. 5. **Phone Number** (digits only) 6. **Tax ID** 7. **Website** 8. **Additional Info** 9. **Email** \* 10. **Password** \* (only when the form does not use the new customer flow) 11. The built-in captcha, then **Submit** Under the form, visitors see the login text and a **Login** button to your store's login page. The field labels are translated into the storefront languages Process Wholesale supports; the text settings you type are shown as entered. ## What your customers see The block shows different content depending on who is looking: - **Guest, or a logged-in customer who is not wholesale:** the heading and the form. - **Logged-in customer tagged `B2B_Registeration` (pending):** the pending message. - **Logged-in wholesale customer tagged `B2B`:** the message from **Text to show for already logged in B2B customers**, plus a **Browse products** button if you set a link. **After Submit (legacy customer accounts, guest).** The applicant completes the captcha and selects **Submit**. Shopify creates the customer account with the email and password, the page reloads, and the pending message appears in the form. If Shopify rejects the form (for example a missing required field), Shopify's errors are listed under "Please adjust the following:". **After Submit (new customer flow, or any logged-in customer).** The form disappears and the pending message appears without a page reload. If something goes wrong, a red message appears under the form for about eight seconds. See [signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) for each message. ## What Process Wholesale creates in Shopify For each successful application: - **Customer account:** On legacy customer accounts, Shopify creates it from the form. With the new customer flow, Process Wholesale creates it from the email and name, with no password; the phone number answer goes into the note. A logged-in customer keeps their existing account. - **Customer tag:** `B2B_Registeration` (spelled this way). A logged-in customer keeps their existing tags and gets this one added. - **Customer note:** The business answers (Business Name, Business Address, Phone Number, Tax ID, Website, Additional Info). For a logged-in customer, the answers are added under the existing note with a "Last modified" date. You can read them in Process Wholesale under **Customers > Pending > View details** (**Signup notes**). The customer appears in **Customers > Pending**. Approval is always manual: see [how to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ## Emails sent after a submission | Email | Sent to | When | | --- | --- | --- | | **New Wholesale Application** | Your Shopify store email | Right after a successful submission. Always on. | | **Application received** | The applicant | Legacy customer accounts, guest: after a short delay, once the new account exists (checked about 1, 3 and 13 minutes after submitting). New customer flow or logged-in customer: right away. Only when turned on in **Settings > Customer settings**. | See [wholesale emails not being received](https://docs.processwholesale.com/troubleshooting/emails-not-received) and [how to edit wholesale application emails](https://docs.processwholesale.com/customers/wholesale-emails). ## Customers who are logged in or already have an account - **Logged-in customers can apply.** Their first name, last name and email are filled in and locked. On a legacy customer accounts store, the form still shows a **Password** field; the customer enters at least 5 characters with no spaces, and Process Wholesale does not change their account password. - **Already pending:** the block shows the pending message instead of the form. - **Already wholesale:** the block shows the logged-in message instead of the form. - **Guest using an email that already has an account:** with the new customer flow, the form shows "An account already exists with this email." and a link, "Please log in to your existing account to apply for wholesale". After logging in, the customer submits the form again. On legacy customer accounts, ask these customers to log in first and then fill in the form. You can also move existing customers into **Pending** yourself with **Import customers**: see [how to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers). ## Limits and things to know - **Fixed fields.** The standard form cannot add fields, file uploads or a consent checkbox. Use the [custom signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) on Enterprise or Professional. - **New customer flow needs a business field.** With the new customer flow, and for logged-in customers, keep at least one of the six business fields set to **Required** or **Optional**. With all six on **Hidden**, submissions fail with "We couldn't create your wholesale account. Please try again later." (or "We couldn't submit your wholesale application. Please try again later." for a logged-in customer). - **Password rule.** Passwords must be at least 5 characters and contain no spaces. - **Dashboard detection.** The **Signup form** card on the Process Wholesale Dashboard reads ON when this block or the **Wholesale Custom Signup** block is on a page template of your published theme, or when a wholesale signup form is added in new customer accounts. - **Theme editor.** Opening the block in the theme editor marks the **Setup Signup Form** step of the Dashboard's quick guide as done. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | **Wholesale Signup Form** is not in the **Add block** list | The theme is not an Online Store 2.0 theme, or the template is not a page, collection, product or home page template | Use an Online Store 2.0 theme and add the block on one of those templates | | The form has no **Password** field on a store with legacy customer accounts | **Use new customer flow** resolves to **Yes** | Set **Use new customer flow** to **No** and save | | A logged-in customer sees a message instead of the form | The customer is already pending or wholesale | No fix needed. Check the customer's tags in Shopify admin. | | An applicant submitted but is not in **Pending** | Shopify did not accept the form (for example a required field or an email problem) | Ask the applicant to submit again and read the errors under "Please adjust the following:" | | The Dashboard **Signup form** card shows OFF | The block is on a collection, product or home page template, or the theme is not published | Place the block on a page template of the live theme | ## Frequently asked questions ### Which templates can the Wholesale Signup Form block go on? Page, collection, product and home page templates. A dedicated page is recommended, because the Dashboard's **Signup form** card only detects the block on page templates. ### What does the Use new customer flow setting do? It decides whether the form is built for legacy or new customer accounts. **No** shows a password and lets Shopify create the account; **Yes** hides the password and lets Process Wholesale create the account; **Auto** acts as **Yes** when the app recorded new customer accounts at install or at your last **Settings** save. ### Can a customer who already has an account apply for wholesale? Yes, when they are logged in. A logged-in customer sees the form with their name and email filled in, and submitting adds the `B2B_Registeration` tag to their existing account. ### Are applicants approved automatically? No. Every applicant waits in **Customers > Pending** until you select **Accept B2B** or **Reject B2B**. ### Can I translate the signup form? Partly. The field labels and **Submit** button follow the storefront language for the languages Process Wholesale supports. The heading, messages and other text settings are shown exactly as you type them. ## Related articles - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference) - [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) --- Source: https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts Section: Wholesale signup forms Plans: All plans Last verified: 2026-11-11 # How to add the wholesale signup form to new customer accounts On a store that uses Shopify's new customer accounts, Process Wholesale adds a wholesale signup page inside customer accounts. You add the **Wholesale signup Form** extension (or **Wholesale custom signup Form** on Enterprise or Professional) in Shopify's checkout and accounts editor, and the **Wholesaler Information** block on the customer's profile page links to it. Only customers who are signed in can see and submit this form. To take applications from guests too, add the theme block form with **Use new customer flow** set to **Yes**. **At a glance** - **Plan:** **Wholesale signup Form** on all plans. **Wholesale custom signup Form** on Enterprise or Professional. - **Where:** Shopify admin > checkout and accounts editor (while the **Signup form** card on the Process Wholesale Dashboard shows OFF, its **Enable** link opens the theme editor instead) - **Account type:** New customer accounts. Shopify admin labels them **Customer accounts** under **Settings > Customer accounts**; the older type is labeled **Legacy**. - **Who sees the form:** Only signed-in customers who are not yet pending or wholesale - **Result:** A pending customer tagged `B2B_Registeration`, approved by you ## Before you start - In Shopify admin, open **Settings > Customer accounts** and confirm the store uses **Customer accounts** (new customer accounts). For **Legacy**, use the [theme block signup form](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts) instead. - Choose a plan in Process Wholesale. Without a plan, the form answers "Feature not enabled on the store". - For the custom form, build your fields first on the **Custom Signup Form** page. See [how to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). ## Steps to add the customer account signup form 1. In Shopify admin, open the checkout and accounts editor. The **Enable** link on the **Signup form** card of the Process Wholesale Dashboard opens the theme editor, not this editor, while the card shows OFF. 2. In the editor, add the Process Wholesale extension for your form: - **Wholesale signup Form** for the standard form (all plans). - **Wholesale custom signup Form** for the form you built in **Custom Signup Form** (Enterprise or Professional). 3. Set the extension's settings (see the tables in this article). 4. On the customer account **Profile** page, add the **Wholesaler Information** block. Its **Sign up** button opens the signup form. 5. Save in the editor. Opening the signup form in the editor marks the **Setup Signup Form** step of the Dashboard's quick guide as done. In the editor, the form shows "Submitting is not possible in theme editor due to missing customer data!" and cannot be submitted. ## Wholesale signup Form settings (standard form) Each field setting takes one of three values: `show` (optional), `required` or `hide`. An empty field setting shows the field as optional. | Setting | Values or default | What it controls | | --- | --- | --- | | **Customer name** | `show`, `required`, `hide` | First Name and Last Name fields | | **Business name** | `show`, `required`, `hide` | Business Name field | | **Business Address** | `show`, `required`, `hide` | Business Address field | | **Tax ID** | `show`, `required`, `hide` | Tax ID field | | **Phone Number** | `show`, `required`, `hide` | Phone Number field | | **Website** | `show`, `required`, `hide` | Website field | | **Additional Info** | `show`, `required`, `hide` | Additional Info field | | **Registration form heading** | "Create wholesale account" | Heading above the form | | **Text to show for pending approval B2B customers** | "Thank you! your wholesale account is currently under review" | Message for pending customers and after submitting | | **Text to show for existing B2B customers** | "You are logged into your wholesale account" | Message for wholesale customers | | **Browse products link for B2B Members** | Empty | When set, wholesale customers also see a **Browse Products** link | The **Wholesale custom signup Form** has the last four settings only. Its fields come from the **Custom Signup Form** page. ## Fields on the customer account signup form **Standard form.** First Name and Last Name (filled in and read-only when the account already has a name), **Email** (always the customer's account email, read-only), **Phone Number** (locked when the account already has one), **Business Name**, **Tax ID**, **Website**, **Business Address** and **Additional Info**, then **Submit**. **Business Address** lets the customer pick one of their saved addresses or **Use different address**, which opens **Country**, **Address**, **Apartment, suite, etc (optional)**, **City**, **State** and **Zip Code**. When the address is required, every part except the apartment line is required. A missing required field shows " is required", for example "Tax ID is required". **Custom form.** The fields you built on the **Custom Signup Form** page, in the same order, without the password field. Required fields are marked with an asterisk. The custom form also supports file uploads and the consent checkbox; **Submit** stays disabled until the consent box is ticked. On a plan other than Enterprise or Professional, the custom form shows "This feature is only available for Enterprise plan." (it is available on Enterprise or Professional) and no **Submit** button. The customer account forms do not show a captcha. They are only available to customers who are already signed in. ## What your customers see - **Not signed in:** customer accounts require sign-in, so a guest never sees the form. They sign in (or create an account) first. - **Signed in, not wholesale:** the form. - **Pending (`B2B_Registeration`):** an info banner with the pending message. - **Wholesale (`B2B`):** a success banner with the existing-customer message and, if set, a **Browse Products** link. **After Submit.** A spinner shows while the application is sent. On success, the form is replaced by the pending banner. On failure, a red banner shows the reason, for example "There was an error processing your request. Please try again." The customer can correct and submit again. ## What happens when the form is submitted 1. Any uploaded file is stored in your store's Shopify Files (custom form only). See [how file uploads work](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads). 2. The customer's existing account gets the tag `B2B_Registeration` added, keeping their other tags. Empty first name, last name or phone on the account are filled from the form. 3. The answers are added to the customer note as lines such as "Business Name: Acme Supply", with a "Last modified" date. You see them under **View details** on the **Customers** page. 4. You get the **New Wholesale Application** email at your Shopify store email. 5. The customer gets the **Application received** email right away, if it is turned on in **Settings > Customer settings**. A customer who is already pending or wholesale is not changed. Approval is manual: see [how to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ## The Wholesaler Information block on the profile page The **Wholesaler Information** block sits on the customer account **Profile** page. It is available on every plan. | Setting | What it does | | --- | --- | | **Wholesaler information** | Heading shown to every customer. Default "Wholesaler information". | | **Register Wholesaler Header** | Heading for customers who have not applied. Default "Register a wholesaler account". | | **Register Wholesaler Body** | Text for customers who have not applied. Default "To become a wholesaler of the store, please signup via registeration form." | | **Register Wholesaler Button** | Button label. Default "Sign up". | | **Use Custom Registeration Form** | On: the button opens the **Wholesale custom signup Form**. Off: it opens the **Wholesale signup Form**. The custom form needs Enterprise or Professional. | | **Custom Signup URL** | Optional. When set, the button opens this URL instead, for example a theme page with the signup block. | | **Pending Account Message** | Message for pending customers | What the block shows: - **Not applied:** an info banner with the header, body and sign-up button. - **Pending:** the pending message. - **Wholesale:** a table of the customer's discounts with the columns **Discount Tag**, **Amount off / tiers** and **Applies To**. A flat discount reads like "20% OFF", "5 OFF" or "40 (Fixed Price)". A tier discount lists its condition ("Based on cart value", "Based on product quantity", or for loyalty "Based on total orders amount in 90 days") and each range, for example "(10 -> 49) : 10% OFF" and "(50+ ) : 20% OFF". A price list reads "Custom wholesale prices"; cost plus markup reads like "Cost + 30%". Without discounts it shows "No Discounts assigned yet". ## Using the theme block forms on new customer accounts The **Wholesale Signup Form** and **Wholesale Custom Signup** theme blocks also work on new customer accounts, and they accept guests. Use them when you want people to apply before they have an account. Conditions: - The block setting **Use new customer flow** must resolve to **Yes**. Set it to **Yes** explicitly. **Auto** acts as **Yes** only when Process Wholesale recorded new customer accounts at install or the last time you saved **Settings** in the app, so it can be wrong after you switch account types. - With the new customer flow, the form has no password field. Process Wholesale creates the customer account from the email and name, tagged `B2B_Registeration`, and saves the other answers in the customer note. - After **Submit**, the form is replaced by the pending message, with no page reload. The customer later signs in to the store with the same email. - If the email already belongs to an account that has not applied, the form shows "An account already exists with this email." with the link "Please log in to your existing account to apply for wholesale". After signing in, the customer applies again. Setup steps for the theme block are in [how to add the wholesale signup form to your theme](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). ## Limits and things to know - **Sign-in required.** The customer account forms are never shown to guests. Use a theme block form for guest applications. - **No captcha** on the customer account forms. - **File uploads only on the custom form.** The standard customer account form has no upload, consent or custom fields. - **Field order.** If the custom form shows fields in an old order, open **Custom Signup Form** in Process Wholesale and save it again. - **Plan for extra fields.** On plans other than Enterprise or Professional, only the six standard business fields are saved from a customer account application. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | Guests cannot find the signup form | Customer account forms need sign-in | Add a theme block form with **Use new customer flow** set to **Yes**, or link guests to the sign-in page | | The form says "Feature not enabled on the store" | The store has no Process Wholesale plan | Choose a plan under **Plan** in the app | | The custom form shows "This feature is only available for Enterprise plan." | The store is not on Enterprise or Professional | Upgrade, or use the standard **Wholesale signup Form** | | The **Sign up** button opens the wrong form | **Use Custom Registeration Form** or **Custom Signup URL** is set differently than intended | Change the **Wholesaler Information** block settings | | The theme block still asks for a password | **Use new customer flow** resolves to **No** | Set it to **Yes** | ## Frequently asked questions ### Why can't guests see the customer account signup form? Because customer account pages require sign-in. Guests sign in first, or you add a theme block form with **Use new customer flow** set to **Yes** for guest applications. ### Can I use the theme signup block on a store with new customer accounts? Yes. Set **Use new customer flow** to **Yes** on the block. The form then hides the password field and Process Wholesale creates the account from the applicant's email. ### Does the customer account signup form have a captcha? No. The customer account forms do not show a captcha; only signed-in customers can open them. Theme block forms have a built-in captcha. ### What does the Wholesaler Information block show to a wholesale customer? A table of the discounts the customer has, with each discount tag, the amount off or tiers, and what it applies to. Without discounts it shows "No Discounts assigned yet". ### Is the application approved automatically? No. The customer waits in **Customers > Pending** until you select **Accept B2B** or **Reject B2B** in Process Wholesale. ## Related articles - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) - [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts) - [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login) - [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) --- Source: https://docs.processwholesale.com/signup-forms/custom-signup-form Section: Wholesale signup forms Plans: Enterprise, Professional Last verified: 2026-11-11 # How to build a custom wholesale signup form Process Wholesale lets you build your own wholesale signup form on the **Custom Signup Form** page: add, order, require and remove fields, add file uploads, and add a consent checkbox for your terms. The same form is shown by the **Wholesale Custom Signup** theme block (for legacy customer accounts, or guests on new customer accounts) and the **Wholesale custom signup Form** customer account extension (for new customer accounts). The custom form needs the Enterprise or Professional plan. **At a glance** - **Plan:** Enterprise or Professional. The page says "Custom signup is available on the Enterprise plan only."; Professional also has access. - **Where:** Process Wholesale > **Custom Signup Form** - **Shown by:** **Wholesale Custom Signup** theme block and **Wholesale custom signup Form** customer account extension - **Account types:** Both. Shopify admin labels them **Customer accounts** (new customer accounts) and **Legacy** (legacy customer accounts) under **Settings > Customer accounts**. - **Answers appear in:** Process Wholesale > **Customers** > **View details**, and the Shopify customer note ## Before you start - Check your account type in Shopify admin under **Settings > Customer accounts**. It decides where you add the form after building it. See [which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview). - On plans other than Enterprise or Professional, the page shows "Custom signup is available on the Enterprise plan only." with **Upgrade to Enterprise**. Use the standard form instead. ## Steps to build the custom signup form 1. In Process Wholesale, select **Custom Signup Form**. A new form starts with the default fields. 2. To add a field, select **Add new field**. The button at the top adds the field first; the one at the bottom adds it last. 3. For each field: - Type the label in the **Display Name** box (help text "Visible to customer"). - Choose the **Field Type**. - Optionally type a **Placeholder**. - Check **Required ?** to make it required. 4. Drag a field by its handle to change the order. 5. To remove a field, select the **X** on its card. Locked fields cannot be removed. 6. Optionally set up the consent checkbox under **Add Security & Compliance fields (optional)**. 7. Select **Save** in the save bar. The toast "Form updated" confirms the save. 8. Reopen **Custom Signup Form** and check that every field you marked **Required ?** still has the box checked. If a new field shows as not required, check **Required ?** again and select **Save**. 9. Add the form to your store (see "Add the custom form to your store"). The **Note** banner at the top of the page has a **Watch tutorial** link to a video of these steps. ## Custom signup form field types | Field type | What the applicant enters | Notes | | --- | --- | --- | | **Text** | One line of text | | | **Email** | An email address | An extra email, for example accounts payable. It is saved in the customer note, not as the account email. On a theme form, a logged-in customer sees their account email in this field and cannot change it. | | **Number** | A number | | | **Long text** | Several lines of text | Shown as a multi-line box on theme forms and as a single-line field in customer accounts | | **Address** | Country, address, apartment, city, state and zip code | One per form. Saved as one line. In customer accounts the applicant can pick a saved address. | | **File Upload** | One file | See [how file uploads work](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads) | Locked fields show their own types, which you cannot change: **First name**, **Last name**, **Signup Email** (the account email) and **Password**. ## Default fields of the custom signup form | Display Name | Field Type | Required by default | Can be removed | | --- | --- | --- | --- | | First Name | First name | Yes (**Mandatory Field**) | No, only the label can change | | Last Name | Last name | Yes (**Mandatory Field**) | No, only the label can change | | Business Name | Text | Yes | Yes | | Business Address | Address | No | Yes | | Phone Number | Text | No | Yes | | Tax ID | Text | Yes | Yes | | Website | Text | No | Yes | | Additional Info | Text | No | Yes | | Email Address | Signup Email | Yes (**Mandatory Field**) | No, only the label can change | | Password | Password | Yes | Kept on the form; only the label can change | The **Password** row is marked **Legacy Field**. It is used only on legacy customer accounts. On a store with new customer accounts, the row is hidden on the page, and the password is never asked in customer accounts or with the new customer flow. Each field also shows **ID:** with a short code. The ID is used for translating the field text and is not visible to customers. Field labels are not translated automatically. ## How to add a consent checkbox (terms and conditions) Under **Add Security & Compliance fields (optional)** ("These fields are always displayed at the bottom of the form"): 1. Type the consent text, for example "I have read and agree to the terms and conditions". 2. Optionally type a link to your terms in **Link to Terms and Conditions**. It must start with `http`. 3. Check **Enabled ?**. 4. Select **Save**. On the form, the applicant sees a required checkbox with your text and, when a link is set, an icon that opens the link in a new tab. **Submit** stays disabled until the box is checked. ## Add the custom form to your store **Legacy customer accounts (theme block).** 1. In Shopify admin, go to **Online Store > Themes > Customize**. 2. Open the page for your signup form (or a collection, product or home page template). 3. Select **Add block** and choose **Wholesale Custom Signup**. 4. Set the block settings: **Use new customer flow**, **Registration form heading**, **Text to show to logout customers above login button**, **Text to show for pending approval B2B customers**, **Pending approval message color**, **Text to show for already logged in B2B customers**, **Browse products link for logged in accounts**, and the **Design** settings. They work like the [standard block settings](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts#wholesale-signup-form-block-settings); this block has no field settings, because the fields come from **Custom Signup Form**. 5. Select **Save**. The **Wholesale Custom Signup** block appears in the theme editor only on Enterprise or Professional. **New customer accounts (customer account extension).** In Shopify's checkout and accounts editor, add **Wholesale custom signup Form**, and turn on **Use Custom Registeration Form** in the **Wholesaler Information** block so its button opens the custom form. Full steps are in [how to add the signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). To take guest applications on new customer accounts, also add the **Wholesale Custom Signup** theme block with **Use new customer flow** set to **Yes**. ## What your customers see On a theme page, the custom form shows your heading, your fields in your order with an asterisk on required ones, the consent checkbox if enabled, the built-in captcha and **Submit**. The **Password** field appears only on legacy customer accounts for visitors who are not logged in. Logged-in customers see their name and email filled in and locked. Pending and wholesale customers see the same messages as on the standard form. In customer accounts, the custom form shows the same fields without the password, plus the consent checkbox if enabled. ## Where the answers appear Each answer is saved in the Shopify customer note as a line that starts with the field's **Display Name**, followed by the answer, for example "Resale certificate number" and "12345". You can read the note: - In Process Wholesale under **Customers**, with **View details** on the customer (**Signup notes**). File links open in a new tab. - In Shopify admin on the customer's page, in the note. The **New Wholesale Application** email lists the applicant's email and name. For applications from a theme form, it does not include the custom field answers, so open **View details** to review them. ## How saving the custom signup form works Saving checks the form and shows errors in a banner titled "Please correct the following errors to save your changes" (toast "Please correct the form errors to save your changes"): | Message | Cause | | --- | --- | | "Add at least one field to the signup form" | The form has no fields | | "Missing or invalid fields provided" | The field list is empty or invalid | | "The signup form needs exactly one email field" | There is not exactly one **Signup Email** field | | "The signup form supports one address field" | More than one **Address** field | | "The signup form supports one first name field" / "The signup form supports one last name field" | A name field is duplicated | | "Consent is enabled, but no consent text is provided" | **Enabled ?** is checked without consent text | | "Invalid agreement Link Provided" | The consent link does not start with `http` | | "We couldn't save your signup form. Try again in a moment." | The save failed; try again | If the **Password** field is missing when you save, Process Wholesale adds it back and reloads the list. **Example.** You add a **File Upload** field "Resale certificate" and a **Text** field "Resale certificate number", check **Required ?** on both, move them under Tax ID, and select **Save**. You reopen **Custom Signup Form**: both new fields show **Required ?** unchecked, so you check it on both again and select **Save**. After that save, reopening the page shows both boxes checked, and the form is ready. An applicant on your wholesale page now sees the two fields after Tax ID and cannot submit without them. ## Limits and things to know - **Enterprise or Professional only.** The page, the theme block and the customer account custom form all need one of these plans. - **Save once before using the block.** The **Wholesale Custom Signup** block shows no fields until the form has been saved at least once. Select **Save** on **Custom Signup Form** (make any change to enable the save bar). - **Check Required after adding a field.** A field added and marked **Required ?** shows as not required after its first save. The same happens to the default **Business Name** and **Tax ID** fields the first time you save the form. Reopen the page, check **Required ?** again, and save again; if you save again without checking it, the storefront form also treats the field as optional. - **Dashboard card.** The **Signup form** card on the Process Wholesale Dashboard reads ON when the **Wholesale Custom Signup** block or the **Wholesale Signup Form** block is on a page template of your published theme, or when a wholesale signup form is added in new customer accounts. A block on a collection, product or home page template reads OFF. - **Placeholders are not shown** on the storefront form or in customer accounts. - **One address, one signup email, one first name, one last name.** - **Labels are not translated automatically.** The text you type is shown in every storefront language. - **Answers are text in the customer note.** They are not separate Shopify customer fields. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The **Wholesale Custom Signup** block shows no fields | The form was never saved | Open **Custom Signup Form**, make a change and select **Save** | | The block is missing in the theme editor | The store is not on Enterprise or Professional | Upgrade under **Plan** | | A required field can be left empty | **Required ?** did not save on the new field | Reopen the page, check **Required ?** and select **Save** | | Fields appear in an old order in customer accounts | The order changed after the form was loaded | Select **Save** on **Custom Signup Form** again | | The placeholder text does not appear | Placeholders are not shown on the forms | Put the hint in the **Display Name** instead | ## Frequently asked questions ### Does the custom signup form work with new customer accounts? Yes. The same fields are used by the **Wholesale Custom Signup** theme block and the **Wholesale custom signup Form** customer account extension. You edit them in one place, **Custom Signup Form**. ### Which field types can the custom signup form use? Text, Email, Number, Long text, Address and File Upload, plus the locked First name, Last name, Signup Email and Password fields. ### Where do I see the answers from the custom signup form? In Process Wholesale under **Customers** > **View details** (**Signup notes**), and in the customer note in Shopify admin. Each answer is labeled with the field's **Display Name**. ### How do I add a terms and conditions checkbox to the signup form? Under **Add Security & Compliance fields (optional)**, type the consent text, optionally a link starting with `http`, check **Enabled ?** and select **Save**. Applicants must tick the box before **Submit** is enabled. ### Can I remove the Password field? No. Process Wholesale keeps one Password field on the custom form and adds it back if it is missing. It is only shown on legacy customer accounts, to visitors who are not logged in. ## Related articles - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [How file uploads work on the wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads) - [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) - [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) --- Source: https://docs.processwholesale.com/signup-forms/signup-form-file-uploads Section: Wholesale signup forms Plans: Enterprise, Professional Last verified: 2026-11-11 # How file uploads work on the wholesale signup form Process Wholesale can ask wholesale applicants to upload a file, such as a resale certificate, tax exemption certificate or business license, through a **File Upload** field on the custom signup form. The file is stored in your store's Shopify Files, and a link to it is saved in the customer note. You find it in Process Wholesale under **Customers > View details**, in the customer's note in Shopify admin, and in the **B2B Signup Files** block on the Shopify customer page. File uploads need the Enterprise or Professional plan. **At a glance** - **Plan:** Enterprise or Professional (part of the [custom signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form)) - **Forms that support uploads:** **Wholesale Custom Signup** theme block and **Wholesale custom signup Form** customer account extension. The standard forms do not. - **Account types:** Both new customer accounts and legacy customer accounts (Shopify admin labels them **Customer accounts** and **Legacy**) - **Files per field:** One - **Stored in:** Shopify admin > **Content > Files** ## How to add a file upload field 1. In Process Wholesale, select **Custom Signup Form**. 2. Select **Add new field**. 3. Type a label in **Display Name**, for example "Resale certificate". 4. Set **Field Type** to **File Upload**. The **?** button next to it opens **File Upload Field Info**: "Uploaded files will be stored in your store. Links will be available in customer details in the app and in the Shopify customer profile." 5. Check **Required ?** if every applicant must upload a file. 6. Select **Save**, then reopen the page and confirm **Required ?** is still checked. You can add more than one **File Upload** field, for example one for a certificate and one for a business license. ## What the applicant can upload The file picker accepts these types: - Images: JPEG, PNG, GIF, WebP - Documents: PDF, Word (DOC, DOCX), Excel (XLS, XLSX), CSV - Audio: MP3, WAV, OGG - Video: MP4, WebM, OGG video - Archives: ZIP, RAR Each **File Upload** field takes one file. ## What the applicant sees **On a theme page (Wholesale Custom Signup block).** The field is a file input with your label. When the applicant selects **Submit**, the button reads "Uploading..." while the files are sent, and then the application is submitted. If the upload fails, the applicant sees the alert "There was an error uploading your files. Please try again." and can submit again. **In customer accounts (Wholesale custom signup Form).** The field is a drop zone. After choosing a file, the applicant sees the file name with a delete icon (**Remove file**) to change it. A file the drop zone does not accept shows "File type not supported or file is too large". ## Where the uploaded file is stored Process Wholesale uploads the file to your store's Shopify Files when the application is submitted. In Shopify admin, find it under **Content > Files**. The file name starts with `PW_uploaded_file_` and the field name, and ends with the original file name. The link saved for you is a Shopify admin link. Only you and your staff, signed in to Shopify admin, can open it; the applicant does not get a link back. ## Where you find the uploaded file | Place | What you see | | --- | --- | | Process Wholesale > **Customers** > **View details** | In **Signup notes**, a line with the field name followed by "Link" and the file's Shopify admin address (`https://admin.shopify.com/store//content/files/`). The address is clickable and opens in a new tab. | | Shopify admin > the customer's page > note | The same line as plain text | | Shopify admin > the customer's page > **B2B Signup Files** block | One link per uploaded file, named after the field | ### How to add the B2B Signup Files block **B2B Signup Files** is a Process Wholesale admin block for the customer details page in Shopify admin. Open any customer in Shopify admin, and if the **B2B Signup Files** card is not shown, add it from the app blocks available for the customer page. Once added, it appears on every customer page. The block shows only for customers tagged exactly `B2B` (wholesale) or `B2B_Registeration` (pending). It lists every file link found in the customer note. For a rejected customer, who no longer has either tag, the block is hidden; the link stays in the note and the file stays in **Content > Files**. ## Worked example Your custom form has a required **File Upload** field "Resale certificate". An applicant selects a PDF named `certificate.pdf` and selects **Submit**. The button reads "Uploading...", the file is saved to **Content > Files**, and the application is submitted. In **Customers > Pending**, **View details** shows a "Resale certificate Link" line with a link to the file. On the customer's page in Shopify admin, the **B2B Signup Files** card shows a link named after the same line. You open the PDF, check it, and select **Accept B2B**. ## Limits and things to know - **Custom form only.** The standard **Wholesale Signup Form** block and the standard customer account form have no upload field. - **One file per field.** Add another **File Upload** field for a second document. - **Files are kept.** Rejecting or removing a customer does not delete the uploaded file from **Content > Files**. Delete it there if you no longer need it. - **Not in the alert email.** The **New Wholesale Application** email for a theme form does not include file links. Open **View details** to see them. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | No upload field on the form | The form is the standard form, or the custom form was not saved after adding the field | Use the **Wholesale Custom Signup** block or **Wholesale custom signup Form**, and select **Save** on **Custom Signup Form** | | The applicant sees "There was an error uploading your files. Please try again." | The upload did not complete | Ask the applicant to submit again, or send the file another way | | The applicant cannot pick a file | The file type is not in the accepted list | Ask for one of the accepted types, such as PDF or JPEG | | The **B2B Signup Files** card is not on the customer page | The block was not added, or the customer has neither `B2B` nor `B2B_Registeration` | Add the block; for rejected customers, read the link in the customer note | ## Frequently asked questions ### Can wholesale applicants upload documents like a resale certificate? Yes, on the Enterprise or Professional plan. Add a **File Upload** field to the custom signup form, and applicants can upload a PDF, image, Office document, CSV, audio, video or archive file. ### Where are files uploaded on the wholesale signup form stored? In your store's Shopify Files, under **Content > Files** in Shopify admin. The file name starts with `PW_uploaded_file_`. ### Where do I find the files an applicant uploaded? In Process Wholesale under **Customers** > **View details** (**Signup notes**), in the customer note in Shopify admin, and in the **B2B Signup Files** block on the customer page. ### Can the applicant see or download their uploaded file later? No. The saved link is a Shopify admin link that only you and your staff can open. ## Related articles - [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [How to make wholesale customers tax exempt](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers) --- Source: https://docs.processwholesale.com/signup-forms/signup-form-spam-protection Section: Wholesale signup forms Plans: All plans Last verified: 2026-11-11 # How the wholesale signup form blocks spam Process Wholesale protects its theme signup forms with a built-in captcha that is on for every store and needs no setup. An applicant completes the captcha above the **Submit** button before the form can be submitted. The customer account signup forms for new customer accounts have no captcha; only customers who are signed in to their account can open them. The protection is the same on every plan. **At a glance** - **Plan:** All plans - **Setup:** None. There are no captcha settings to configure. - **Forms with the captcha:** **Wholesale Signup Form** and **Wholesale Custom Signup** theme blocks, including the signup form shown by Quick Buy - **Forms without a captcha:** **Wholesale signup Form** and **Wholesale custom signup Form** in customer accounts, which require sign-in - **Language:** The captcha follows the storefront language the visitor is browsing in ## The built-in captcha on theme signup forms Every **Wholesale Signup Form** and **Wholesale Custom Signup** block shows a captcha widget (hCaptcha) above **Submit**, on legacy customer accounts and on new customer accounts alike. Shopify admin labels the two account types **Legacy** and **Customer accounts** under **Settings > Customer accounts**; the captcha works the same with both. The form also opts in to Shopify's own storefront captcha. You do not add keys, turn anything on or pay for the captcha. It is part of Process Wholesale. ## What an applicant sees 1. The applicant fills in the form. The captcha appears above **Submit**. 2. The applicant completes the captcha challenge. 3. The applicant selects **Submit**, and the application goes through. If the applicant selects **Submit** too early, the form stays on the page and shows a red message for about eight seconds: | Message | Meaning | What the applicant does | | --- | --- | --- | | "Please complete the captcha." | The captcha was not completed | Complete the captcha and select **Submit** again | | "The captcha is still loading. Please try again in a moment." | The captcha has not finished loading | Wait a moment and select **Submit** again | | "The captcha couldn't load. Please refresh the page and try again." | The captcha could not load in the browser, often because of an ad blocker, privacy extension or network filter | Refresh the page, or turn off the blocker for your store and try again | On a custom form with a **File Upload** field, the same messages appear in a browser pop-up instead. On forms that use the new customer flow, and for applicants who are logged in, Process Wholesale shows "Captcha verification failed. Please try again." when it cannot confirm the captcha answer, and the application is not submitted. The applicant completes a new captcha and submits again. The captcha resets after each attempt. ## Customer account signup forms The **Wholesale signup Form** and **Wholesale custom signup Form** in new customer accounts do not show a captcha. These pages are shown only to customers who have signed in to their store account, so an application always comes from an existing customer account. ## What you can configure There are no spam settings in Process Wholesale. The built-in captcha is always on for theme signup forms. > **Note:** On some stores, Google reCAPTCHA was set up on the custom signup form earlier. On those stores, the **Wholesale Custom Signup** block shows Google reCAPTCHA in place of the built-in captcha, and applicants may see "Please complete the reCAPTCHA challenge." or "reCAPTCHA verification failed. Please try again." reCAPTCHA settings are not shown in the app. To change them, contact Process Wholesale support. Every application still waits for your approval in **Customers > Pending**, so a spam signup never becomes a wholesale customer on its own. Reject it with **Reject B2B**. See [how to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ## Worked example A visitor opens your wholesale page with an ad blocker that blocks the captcha. They fill in the form and select **Submit**. The form shows "The captcha couldn't load. Please refresh the page and try again." and nothing is submitted. The visitor allows your site in the ad blocker, refreshes, completes the captcha, and selects **Submit**. The application appears in **Customers > Pending** and you receive the **New Wholesale Application** email. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | Applicants report "The captcha couldn't load. Please refresh the page and try again." | A browser extension or network blocks the captcha | Ask the applicant to refresh, or to try another browser or turn off the blocker | | Applicants report "Please complete the captcha." | **Submit** was selected before the captcha was completed | Complete the captcha first | | Applicants report "Captcha verification failed. Please try again." | The captcha answer expired or could not be confirmed | Complete a new captcha and submit again | | Spam applications still arrive | Captchas reduce automated signups but cannot stop a person filling in the form | Reject them in **Customers > Pending** with **Reject B2B**; with the rejection email turned off, nothing is sent | ## Frequently asked questions ### Do I need to set up a captcha for the signup form? No. The built-in captcha is on for every Process Wholesale theme signup form, on every plan, with nothing to configure. ### Does the wholesale signup form have a captcha? Yes, the theme signup forms do. The **Wholesale Signup Form** and **Wholesale Custom Signup** blocks show a captcha above **Submit**. The customer account forms do not, because only signed-in customers can open them. ### What does an applicant see if the captcha does not load? The message "The captcha couldn't load. Please refresh the page and try again." The form cannot be submitted until the captcha loads, so the applicant refreshes or turns off whatever blocks it. ### Can I use my own Google reCAPTCHA keys? No. Process Wholesale does not offer reCAPTCHA settings. Every theme signup form uses the built-in captcha. ### Can spam signups become wholesale customers? No. Every application is tagged `B2B_Registeration` and waits in **Customers > Pending** until you approve it. ## Related articles - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts) --- Source: https://docs.processwholesale.com/storefront/theme-blocks-overview Section: Storefront and theme Plans: All plans Last verified: 2026-11-11 # Process Wholesale theme blocks and app embeds Process Wholesale adds seven items to the Shopify theme editor: six app blocks (Product Wholesale, Quick Buy, Wholesale Signup Form, Wholesale Custom Signup, Lock Content Redirect and B2B Redirect Block) and one app embed (Hide price). It also adds pages and blocks for Shopify's new customer accounts and a card in Shopify admin. Each block goes on specific templates and some need a particular plan. Your theme must be an Online Store 2.0 theme for the blocks to be available. ## Theme blocks | Name in the theme editor | Type | Templates it can be added to | What it does | Plan | Article | | --- | --- | --- | --- | --- | --- | | **Product Wholesale** | App block | Product | Adds wholesale discount tables under the price for logged-in wholesale customers. The theme's retail price stays. | All plans (price list rows: Professional) | [Show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) | | **Quick Buy** | App block | Page | A wholesale order form listing products with wholesale prices, for customers tagged `B2B` | Enterprise or Professional | [Set up the Quick Buy order form](https://docs.processwholesale.com/storefront/quick-buy-setup) | | **Wholesale Signup Form** | App block | Page, collection, home page, product | The standard wholesale application form | All plans | [Add the signup form to your theme](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts) | | **Wholesale Custom Signup** | App block | Page, collection, home page, product | The application form you build in **Custom Signup Form** | Enterprise or Professional | [Build a custom signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) | | **Lock Content Redirect** | App block | Page, collection, product | Sends visitors without access away from every page that uses the template | Enterprise or Professional | [Make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content) | | **B2B Redirect Block** | App block | Customer account page (legacy customer accounts) | Sends logged-in wholesale customers from the account page to the address set in **Settings > Customer settings** | Enterprise or Professional | [Redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login) | | **Hide price** | App embed | Every page (switched on for the whole theme) | Hides prices and buy buttons from visitors who are not wholesale and shows a message | Professional | [Hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices) | "Templates" includes alternate templates of the same type, such as `page.wholesale` or `product.wholesale`. ## Who each theme block acts for | Block | Acts for | | --- | --- | | **Product Wholesale** | Logged-in customers with any tag containing `b2b` who have a discount tag for the product | | **Quick Buy** | Shows the order form to logged-in customers tagged `B2B`. Guests and other customers see the signup form or a lock screen; pending customers see a pending message. | | **Wholesale Signup Form** and **Wholesale Custom Signup** | Everyone. Logged-in `B2B` customers see "You are logged into your wholesale account" and pending customers see the pending message. | | **Lock Content Redirect** | Redirects everyone who is not allowed in. By default, only customers with the exact tag `B2B` are allowed. | | **B2B Redirect Block** | Logged-in customers with any tag containing `b2b`, at most once every 12 hours per browser | | **Hide price** | Hides prices from everyone without a tag containing `b2b` | The rule differs between blocks. Checkout discounts and Quick Buy need the exact tag `B2B`, while the Product Wholesale block, Hide price and the B2B Redirect Block accept any tag containing `b2b`, which includes pending customers tagged `B2B_Registeration`. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ## Customer account and Shopify admin extensions Shopify has two kinds of customer accounts. Shopify admin labels them **Customer accounts** (new customer accounts) and **Legacy** (legacy customer accounts). These extensions are for new customer accounts, except the admin card. | Name | Where it is added | What it does | Plan | | --- | --- | --- | --- | | **Wholesale signup Form** | A full page in new customer accounts, added in Shopify's checkout and accounts editor | The standard wholesale application form for logged-in customers | All plans | | **Wholesale custom signup Form** | A full page in new customer accounts | The application form you build in **Custom Signup Form** | Enterprise or Professional | | **Wholesaler Information** | A block on the **Profile** page of new customer accounts | Shows a sign-up invitation and button to customers who are not wholesale, the pending message to pending customers, and a table of their discounts to wholesale customers | All plans (the **Use Custom Registeration Form** option: Enterprise or Professional) | | **Redirect** | A block on the **Orders** page of new customer accounts | Sends logged-in customers with the tag `B2B` to the redirect address set in **Settings > Customer settings**, at most once every 12 hours | Enterprise or Professional | | **B2B Signup Files** (the card's heading) | A card on the customer details page in Shopify admin | Lists links to files the customer uploaded on the signup form, for customers tagged `B2B` or `B2B_Registeration` | Shows files from the custom signup form, which needs Enterprise or Professional | See [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) and [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). Every setting of these extensions is listed in the [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference). ## App block or app embed | | App block | App embed | | --- | --- | --- | | **Process Wholesale items** | Product Wholesale, Quick Buy, Wholesale Signup Form, Wholesale Custom Signup, Lock Content Redirect, B2B Redirect Block | Hide price | | **Where you add it** | Inside a section of a specific template: **Add block > Apps** | Once for the whole theme: **Theme settings > App embeds** | | **Where it acts** | Only on pages that use that template | On every storefront page | | **How you turn it off** | Remove or hide the block | Switch the embed off | An app embed is never listed under **Add block**, and an app block is never listed under **App embeds**. Select **Save** in the theme editor after adding or changing either. ## Theme requirement: Online Store 2.0 Process Wholesale's blocks work only with Online Store 2.0 themes. App blocks are added to sections of JSON templates, and the app embed needs a theme that supports app embeds. In a vintage theme, or in a section that does not accept app blocks, the blocks are not offered. The in-app FAQ states this: Process Wholesale is compatible only with Shopify 2.0 themes. See [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing). ## Dashboard App Status links The Process Wholesale **Dashboard** has an **App Status** section with six cards. Each card shows **ON** or **OFF** for your published theme, and one link: **Unlock** when your plan does not include the feature (opens **Plan**), **Manage** when it is on, **Enable** when it is off. | Card | ON when | **Enable** opens | **Manage** opens | | --- | --- | --- | --- | | **Product block** | The Product Wholesale block is in the default product template | The theme editor on the default product template, with the Product Wholesale block ready to add | The theme editor on the product template | | **Signup form** | The Wholesale Signup Form block or the Wholesale Custom Signup block is in a page template, or a wholesale signup form is added in new customer accounts. | The theme editor | The template with the block, or the checkout and accounts editor | | **Quick buy** | The Quick Buy block is in a page template | The theme editor | The page template with the block | | **Lock content** | The Lock Content Redirect block is in a page, collection or product template | The theme editor | The template with the block | | **B2B Redirect** | The B2B Redirect Block is in the customer account template, or the Redirect extension is added | Legacy customer accounts: the theme editor on the customer account template with the block ready to add. New customer accounts: the checkout and accounts editor on the Orders page. | The same place | | **Hide price** | The Hide price app embed is on | **Theme settings > App embeds** with Hide price selected | The same place | The links open the editor; select **Save** there to keep a change. Locked cards on Starter: **Quick buy**, **Lock content**, **B2B Redirect** and **Hide price**. The **Hide price** card is not locked on Enterprise and shows **Enable** there, but the Hide price app embed needs Professional and is not listed in the theme editor on other plans. The details of what each card checks are in [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) and [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing). ## Related articles - [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) - [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference) - [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing) - [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) - [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility) --- Source: https://docs.processwholesale.com/storefront/product-page-wholesale-prices Section: Storefront and theme Plans: All plans Last verified: 2026-11-11 # How to show wholesale prices on product pages Process Wholesale shows wholesale prices on product pages with the **Product Wholesale** block, a Shopify app block you add to your product templates in the theme editor. For a logged-in wholesale customer (B2B customer), the block adds up to three tables under the price: the product's wholesale price or quantity breaks, the cart value discounts and the cart quantity discounts. The block adds tables and does not replace the theme's own price, which keeps showing the retail price. It works on product pages only, on every plan. **At a glance** - **Plan:** All plans. Price list rows need Professional, and cost plus markup rows need Professional. - **Where:** Shopify theme editor > a product template > **Add block** > **Apps** > **Product Wholesale** - **Applies to:** Logged-in customers with a customer tag that contains `b2b` in any capitalization, who also have a discount tag that applies to the product. Guests see nothing. - **Pages:** Product pages only. Not collection pages, search results, the home page, the cart or the cart drawer. - **Shows:** Tables under the price. The retail price from your theme stays as it is. - **Called in the app:** **Product block** on the Dashboard, and "Setup Wholesale prices on product page" in the Quick guide. ## Before you start - Create at least one discount in Process Wholesale and give its discount tag to a wholesale customer. The tables show only the discounts a customer has. See [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types) and [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). - Your theme must be an Online Store 2.0 theme, because the Product Wholesale block is an app block. See [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview). ## Steps to add the Product Wholesale block 1. In Shopify admin, go to **Online Store > Themes** and select **Customize** on your live theme. 2. In the template selector at the top of the theme editor, choose the product template you want to change, for example your default product template. 3. In the product information section, select **Add block**, then open the **Apps** tab and select **Product Wholesale**. 4. Drag the block to where you want the tables, usually right under the price. 5. Optional: change the block settings (the table columns and colors). Every setting is described in the section "Product Wholesale block settings". 6. Select **Save**. 7. Repeat steps 2 to 6 for every other product template your products use, such as a `product.wholesale` template. The block appears only on products whose template contains it. **Shortcut from the app.** On the Process Wholesale **Dashboard**, the **App Status** card **Product block** has an **Enable** link. It opens the theme editor on the default product template with the Product Wholesale block ready to add. Select **Save** in the theme editor to keep it. Once the block is found in your published theme, the card shows **ON** and the link changes to **Manage**. Video walkthrough: [PW product wholesale setup](https://vimeo.com/927713040) shows how to add the block. It is the video in the "Setup Wholesale prices on product page" step of the Quick guide on the Dashboard. ## Product Wholesale block settings The settings choose which columns appear and how the tables look. There is no setting for the table headings or for hiding a whole table. | Setting | Default | What it does | | --- | --- | --- | | **Show Quantity Column** | On | Shows the quantity column in the product discount table | | **Show Discount Column** | On | Shows the discount column in the product discount table | | **Show Wholesale Price Column** | On | Shows the wholesale price column in the product discount table | | **Show Cart Amount Column** | On | Shows the cart amount column in the cart discount table | | **Show Cart Discount Column** | On | Shows the discount column in the cart discount table | | **Show Cart Quantity Column** | On | Shows the quantity column in the cart quantity discount table | | **Show Cart Quantity Discount Column** | On | Shows the discount column in the cart quantity discount table | | **Text Color** | #000000 (black) | Text color of all tables | | **Border Color** | #868686 (gray) | Border color of all tables | | **Header Background Color** | Transparent | Background of the header row | | **Body Background Color** | Transparent | Background of the other rows | | **Border Radius** | 10 px | Corner rounding, 1 to 30 px | | **Border Width** | 1 px | Outer border width, 1 to 5 px | Turning a column off removes both its heading and its cells. The full list with types and ranges is in the [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference). ## What your customers see **Wholesale customers.** A logged-in customer whose tags contain `b2b` sees up to three tables under the price, each one only when it has at least one row: | Table | Column headings | What it lists | | --- | --- | --- | | Product discount table | **Minimum Cart Quantity**, **Discount**, **Wholesale Price** | The customer's discount for this product: one row per quantity tier, or one row marked `Any` for a flat discount, price list or cost plus markup | | Cart discount table | **Minimum Cart Amount**, **Cart Discount** | The customer's cart value tiers (discount based on cart total) | | Cart quantity discount table | **Minimum Cart Quantity**, **Cart Discount** | The customer's cart quantity tiers (discount based on total cart quantity), when that discount applies to this product | The tables appear a moment after the page loads. The column headings are translated when the storefront is in German, Spanish, French, Italian, Norwegian, Portuguese (Brazil or Portugal) or Swedish, and are in English otherwise. The word `Any` is always in English. **Everyone else.** Guests and logged-in customers with no tag containing `b2b` see nothing from the block. The product page looks the same as before. **In the theme editor.** In the theme editor, the block always shows three example tables with sample rows, titled "Product discounts example", "Cart discounts example" and "Cart quantity discounts example". The examples do not reflect your discounts. To see the real tables, log in on the live storefront as a wholesale customer who has a discount tag. ## Who can see the Product Wholesale block The Product Wholesale block shows tables to a customer only when all of these are true: - The customer is logged in. - At least one of the customer's tags contains the letters `b2b` in any capitalization. `B2B`, `b2b-gold`, `B2Bnetterms` and the pending tag `B2B_Registeration` (spelled this way) all count. A customer tagged only `Wholesale` does not. - The customer has a discount tag that applies to this product or variant. Discount tags match exactly, ignoring capitalization. A cart value tier is not tied to products, so its table shows on every product page. > **Note:** Checkout is stricter than the Product Wholesale block. Wholesale discounts are applied at checkout only to customers with the exact tag `B2B`. A pending customer tagged `B2B_Registeration` who also has a discount tag can see a table on the product page but does not get the discount at checkout until approved. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ## How the product discount table chooses what to show The product discount table shows one discount for the product at a time. When a customer has several discounts that apply to the same product, the Product Wholesale block uses this order of precedence: 1. **Cost plus markup**: one `Any` row, when the variant has a unit cost. 2. **Price list**: one `Any` row, when the variant has a price in one of the customer's price lists. 3. **Quantity tier or flat discount**: when the customer has both, the **Tag priority** setting decides (see the next section). With only one of them, that one is shown. 4. Nothing applies: the product discount table stays hidden. Within one kind, the table shows a single discount. For flat discounts it uses the one with the highest priority on the **Flat Discounts** tab (1 = highest priority). For quantity tiers, price lists and cost plus markups it shows one matching discount. ### Tag priority between flat discounts and quantity tiers The setting is in Process Wholesale under **Settings > Discount settings > Tag priority**, with the options **Prefer flat tag** (the default) and **Prefer tier tag**. It applies only when the customer has both a flat discount and a quantity tier discount for the same product, and checkout uses the same setting once the **Settings** page has been saved; until the first save, checkout behaves as **Prefer tier tag** while this table follows **Prefer flat tag**. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking#flat-discount-versus-quantity-tier-the-tag-priority-setting). **Example.** A customer has a flat discount of 10% on all products and a quantity tier discount of 20% for 10 or more units. The product costs $20.00. | Tag priority | Product discount table | | --- | --- | | **Prefer flat tag** | `Any` / `10%` / `$18.00` | | **Prefer tier tag** | `10+` / `20%` / `$16.00` | For the full rules at checkout, see [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## How each discount type is displayed All examples use a variant priced at $20.00 in the store currency. | Discount | Quantity column | Discount column | Wholesale Price column | | --- | --- | --- | --- | | Quantity tier, Percentage Off: 1 to 9 units 10%, 10+ units 20% | `1 - 9` then `10+` | `10%` then `20%` | `$18.00` then `$16.00` | | Flat discount, Price Off $5 | `Any` | `$5.00` | `$15.00` | | Fixed price $12 (flat or quantity tier) | `Any` (or the tier range) | `$12.00` | `$12.00` | | Price list price $14.50 | `Any` | `$5.50` | `$14.50` | | Cost plus markup: unit cost $8.00, markup 50% | `Any` | `$8.00` | `$12.00` | The rules behind the numbers: - **Percentage Off**: the wholesale price is the variant price minus the percentage. - **Price Off**: the discount column shows the amount off per item. The wholesale price is the variant price minus that amount, and never below $0.00. - **Fixed Price**: both columns show the fixed price itself. The discount column does not show the amount saved. - **Price list**: the discount column shows the variant price minus the price list price. - **Cost plus markup**: the wholesale price is the unit cost plus the markup percentage, here $8.00 + 50% = $12.00. The discount column shows the difference from the variant price. - **Tier ranges**: each row shows "minimum - maximum", and the last row shows "minimum+". Amounts show two decimals with the currency symbol of the customer's cart. **Cart discount table example.** Cart value tiers of 5% from $100 to $249 and 10% from $250 show as `$100.00 - $249.00` / `5%` and `$250.00+` / `10%`. **Cart quantity discount table example.** Cart quantity tiers of 5% for 1 to 9 units and 10% for 10 or more show as `1 - 9` / `5%` and `10+` / `10%`. A cart quantity discount limited to selected products or collections appears only on the product pages of those products. ## Variant changes The Product Wholesale block recalculates the tables for the selected variant. It reads the variant from the page address first, then from the variant selected in the theme's product form, and otherwise uses the product's first variant. It updates the tables when the variant in the page address changes, when the theme announces a variant change, or when the variant selected in the product form changes. Most themes do one of these. A theme or page builder that changes the variant some other way leaves the tables showing the variant the page opened with. ## Currency conversion When a customer browses in another currency, the Product Wholesale block converts Price Off amounts, fixed prices and cart amount thresholds at the storefront's conversion rate, and applies percentages to the variant price. All amounts show the currency symbol of the customer's cart. > **Important:** Price list prices and cost plus markup prices in the table are not converted. A customer who browses in another currency sees those amounts as they are in your store currency, next to their own currency symbol. Checkout converts them, so the price paid can differ from the table. If you sell to wholesale customers in several currencies, tell them the table shows price list and cost plus prices in your store currency. ## What the tables do not show - **Loyalty discounts.** Loyalty tiers are never shown on the product page. They are added at checkout. - **The total the customer will pay.** The tables show one product discount. At checkout, cart value, cart quantity and loyalty discounts can be added on top of it. - **Shopify discount codes and other apps' discounts.** - **Discounts that do not apply to this product.** A discount limited to other products, collections or variants is not shown. ## Limits and things to know - **The retail price stays.** The Product Wholesale block does not change or hide the theme's price. The wholesale price appears only in the table. To hide prices from retail customers, see [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). - **Product pages only.** The block can be added only to product templates. Collection pages, search results, the home page, the cart and the cart drawer never show wholesale prices from this block. For a list of products with wholesale prices, use the [Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) (Enterprise or Professional). - **One template at a time.** Each product template needs its own Product Wholesale block. The Dashboard **Product block** card checks the default product template only, so a block on an alternate product template does not turn the card **ON**. - **The prices are applied at checkout.** The tables are a display. Process Wholesale applies the wholesale price at checkout with its automatic discounts, for customers tagged `B2B`. See [How Process Wholesale works](https://docs.processwholesale.com/getting-started/how-process-wholesale-works). - **The quantity column of the product table is headed "Minimum Cart Quantity".** For a quantity tier, it is the number of units of this product in the cart, counting all its variants together. - **Price list rows need Professional.** On other plans, price list rows never appear. - **Fixed text is in English.** `Any` and the theme editor example titles are not translated, and the block settings are labeled in English. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The product page still shows the retail price | The Product Wholesale block adds a table and never changes the theme price | No fix needed. The wholesale price is in the table and is applied at checkout. | | No table for a logged-in customer | The customer has no tag containing `b2b`, has no discount tag, or the discount does not apply to this product | In Shopify admin, check the customer's tags. In Process Wholesale, check the discount's **Applies to**. | | No table on some products | Those products use a product template without the block | Add the Product Wholesale block to that template too. | | The table shows a flat discount instead of tiers, or the reverse | The **Tag priority** setting | Change **Settings > Discount settings > Tag priority**. | | Price list row missing | The store is not on Professional, or the variant has no price in the customer's price list | Check the plan and the price list. | | The table does not change when another variant is selected | The theme changes variants in a way the block does not detect | Check with your theme developer, or reload the page with the variant selected. | More cases are in [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing). ## Frequently asked questions ### Does the Product Wholesale block replace the retail price? No. The Product Wholesale block adds wholesale tables under the price and leaves the theme's retail price as it is. The customer pays the wholesale price at checkout, where Process Wholesale applies it as a discount. ### Can wholesale prices show on collection pages or search results? No. The Product Wholesale block works on product templates only. To give wholesale customers a list of products with their prices, use the Quick Buy order form on Enterprise or Professional. ### Which discount does the table show when a customer has several? One product discount, in this order: cost plus markup, then price list, then the flat discount or quantity tier chosen by **Tag priority**. Cart value and cart quantity tiers have their own tables. ### Why does the theme editor show example tables? In the theme editor, the Product Wholesale block always shows sample tables, whatever discounts you have, to help you place and style it. Check the real tables on the storefront while logged in as a wholesale customer. ### Does the Product Wholesale block show loyalty discounts? No. Loyalty discounts are not shown on the product page. Process Wholesale adds them at checkout. ### Who can see the Product Wholesale block? Logged-in customers with a tag containing `b2b` who also have a discount tag that applies to the product. Guests and retail customers see nothing. ## Related articles - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference) - [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing) - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) --- Source: https://docs.processwholesale.com/storefront/quick-buy-setup Section: Storefront and theme Plans: Enterprise, Professional Last verified: 2026-11-11 # How to set up the Quick Buy wholesale order form Quick Buy is the wholesale bulk order form in Process Wholesale: a table of your products with each wholesale customer's own prices, quantity boxes and an order summary, so a buyer can order many products from one page. It is also called a quick order form, bulk order form or order table. You add it as the **Quick Buy** app block on a page template in the Shopify theme editor, then publish a page that uses that template. Quick Buy needs the Enterprise or Professional plan, and only logged-in customers tagged `B2B` see the form. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Shopify admin > **Online Store > Themes > Customize**, on a **page** template, **Add block > Apps > Quick Buy** - **Applies to:** Logged-in customers with the `B2B` customer tag (wholesale customers, also called B2B customers). Everyone else sees a signup form, a lock screen or a pending message. - **Templates:** Page templates only. Quick Buy cannot be added to product, collection or home page templates. - **Default:** All products, 10 per page, original price and stock shown, **Buy again** tab and last order card on ## Before you start - The store is on the Enterprise or Professional plan. On Starter the block shows nothing on the storefront. - You have at least one wholesale discount and a test customer tagged `B2B` plus that discount's tag, so you can check prices. See [how to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ## Steps to add Quick Buy to your store 1. In Shopify admin, go to **Online Store > Themes** and select **Customize** on your theme. 2. In the template selector at the top of the theme editor, open **Pages** and create a new page template. Name it `Wholesale` (or any name you like). Using a separate template keeps the form off your other pages. 3. In the new template, select **Add block**. In the **Apps** section, select **Quick Buy**. 4. Select the Quick Buy block and adjust its settings (see [Quick Buy block settings](#quick-buy-block-settings)). Select **Save**. 5. In Shopify admin, go to **Online Store > Pages** and add a page, for example "Wholesale order form". In the page's template setting, choose the template you created. Save the page. 6. Go to **Online Store > Navigation** and add the page to a menu, for example your main menu or the account menu, so wholesale customers can find it. The Process Wholesale home page shows a **Quick buy** item ("Bulk order form for B2B customers") under App Status. When the block is not yet in your live theme, that item links to the theme editor with the block ready to add. See [the Process Wholesale dashboard and App Status](https://docs.processwholesale.com/getting-started/dashboard-and-app-status). Video walkthrough: [PW quickbuy table setup](https://vimeo.com/1106923084) shows the theme editor steps. ## Quick Buy block settings The settings appear in the theme editor in this order. The labels are in English in every store language. | Setting | What it controls | Default and allowed values | | --- | --- | --- | | **Wholesale Collection** | Limits the form, its search and the reorder features to the products in one collection. Empty means all products. | Empty (all products). Any one collection. | | **Products sort order** | Sorts the products of the chosen collection. Works only when **Wholesale Collection** is set. | **None** (default), **Collection default**, **Manual (set in Shopify admin)**, **Best selling**, **Relevance**, **Price**, **Creation time**, **Alphabetically** | | **Show original price** | Shows the regular price struck through under the wholesale price when the two differ. Also shows the original subtotal struck through in the order summary. | On (default) or off | | **Show stock quantity** | Shows "units left", "Out of stock" and "Not available" under each quantity box. When off, the reorder review also leaves stock counts out of its messages. | On (default) or off | | **Show Buy again tab** | Shows the **All products** and **Buy again** tabs, which list what the customer ordered before. | On (default) or off | | **Show last order** | Shows the "Your last order" card with a button to reorder it after a stock and price check. | On (default) or off | | **Products per page** | Number of products per page of the form. | 10 (default). The setting's help text gives 50 as the maximum. | | **Border** (under **Quick Buy Colors**) | Border color of the table and boxes. | `#bbc5cd` | | **Background color** | Background of the form. | `#fff` | | **Table Text Color** | Text color of the table. | `#000000` | | **Button Background** | Background of buttons and accents. | `#30383f` | | **Button Text** | Text color on buttons. | `#ffffff` | | **What to show for non B2B?** | What visitors who are not wholesale customers see on the page. | **Signup Form** (default) or **Lock Screen** | | **Use new customer flow** | Which signup flow the signup form uses. See [which signup form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview). | **Auto** (default), **Yes**, **No** | | **Text to show to invite customers to sign up** (under **Configure Lock Message**) | Message on the lock screen. Used only with **Lock Screen**. | "This is section is only accessible by Wholesale customers." (edit it to your own wording) | | **Create Wholesale customer signup page** | Link for the **Create wholesale account** button on the lock screen. Point it to the page that has your signup form. Left empty, the lock screen shows no button. | Empty | | **Registration form heading** (under **Configure Signup Text**) | Heading of the signup form. Used only with **Signup Form**. | "Create wholesale account" | | **Text to show to logout customers above login button** | Text above the **Login** button under the signup form. | "Or login, If you already have an account." | | **Text to show for pending approval B2B customers** | Message for customers who applied and are waiting for approval. | "Thank you! your wholesale account is currently under review" | | **Pending approval message color** | Color of the pending message. | `#30383f` | | **Business Name** (under **Configure Signup Fields**) | Whether the signup form asks for this field. | **Required** (default), **Optional**, **Hidden** | | **Business Address** | Same as above. | **Optional** (default), **Required**, **Hidden** | | **Phone Number** | Same as above. | **Optional** (default), **Required**, **Hidden** | | **Tax ID** | Same as above. | **Optional** (default), **Required**, **Hidden** | | **Website** | Same as above. | **Optional** (default), **Required**, **Hidden** | | **Additional Info** | Same as above. | **Optional** (default), **Required**, **Hidden** | The color settings, the stock and price display settings and **Products per page** change only how Quick Buy looks. They do not change prices. ## How to limit Quick Buy to one collection Set **Wholesale Collection** to a collection, for example a "Wholesale catalog" collection that holds only the products you sell wholesale. With a collection set: - The form lists only the products of that collection that are active and published to the Online Store. - Search finds products in that collection whose title or any variant SKU contains the search words. Search looks through the first 2,000 products of the collection. - The **Buy again** tab and the reorder review offer only products in that collection. A past item outside it shows "Not sold on this page. Skipped." in the review. - Pages are browsed with **« Prev** and **Next »**. Without a collection, the form lists all products available on your Online Store, with numbered page links, and search uses Shopify's product search. **Sort order.** Choose a **Products sort order** other than **None** to sort the collection, for example **Best selling** or **Alphabetically**. When a sort order is set, the form also lists draft products of the collection. They show "Not available" and cannot be added. To keep drafts out of a sorted form, remove them from the collection. ## What visitors who are not wholesale customers see Quick Buy decides what to show on each visit: | Visitor | What the Quick Buy page shows | | --- | --- | | Logged-in customer tagged `B2B` (any capitalization: `B2B`, `b2b`, `B2b`, `b2B`) | The Quick Buy form | | Logged-in customer tagged `B2B_Registeration` (a pending customer; the tag is spelled this way) and not `B2B` | The pending message from **Text to show for pending approval B2B customers** | | Visitor who is not logged in | The signup form with a login link, or the lock screen, depending on **What to show for non B2B?** | | Any other logged-in customer | The signup form or the lock screen, depending on **What to show for non B2B?** | The tag must be exactly `B2B`. A tag that only contains those letters, such as `B2B-gold`, does not count. Quick Buy uses a stricter rule than the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), which also shows wholesale content to pending customers. **Lock Screen** shows your message from **Text to show to invite customers to sign up** and, when **Create Wholesale customer signup page** has a link, a **Create wholesale account** button that opens that page. **Signup Form** shows the wholesale signup form on the same page. See [how to add the wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). ## What wholesale customers see A logged-in wholesale customer sees the **Quick Buy Form** heading, a search box, the product table with their wholesale prices, the cart discount tiers they qualify for, and an order summary with **View Order**. When reorder is on and they have past orders, they also see "Your last order" and the **Buy again** tab. See [how wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering) and [how reordering works](https://docs.processwholesale.com/storefront/quick-buy-reorder). ## How to test Quick Buy 1. In Shopify admin, create a test customer with an email address you can use. Add the tags `B2B` and the tag of one of your discounts. 2. Log in to your storefront as that customer and open the Quick Buy page. 3. Check that prices match the discount, add a product with **Add to order**, select **View Order** and go to checkout to compare the price there. 4. Log out and open the page again. You should see the signup form or the lock screen. > **Note:** In the theme editor, Quick Buy always shows the form with a warning that discounts are not applied there, because the theme editor has no logged-in customer. Buttons and inputs do not respond in the theme editor, and the reorder features do not appear. Test prices and ordering on the live storefront while logged in. ## Limits and things to know - **Page templates only.** Quick Buy is an app block for page templates. It is not an app embed and cannot be added to product, collection or home page templates. - **Plan.** On Starter the block shows nothing to customers. In the theme editor it shows "Please upgrade your plan to access this feature." - **Products per page.** The setting's help text gives 50 as the maximum. Keep the value at 50 or lower. - **Collection search depth.** With a collection set, search covers the first 2,000 products of the collection. - **Draft products with sorting.** A sort order other than **None** also lists draft products, marked "Not available". - **Only one wholesale tag rule.** The form is shown only to logged-in customers tagged exactly `B2B`. Pending customers never see the form. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The page is blank for wholesale customers | The store is on Starter | Upgrade to Enterprise or Professional under **Plan**. | | **Quick Buy** is not in the **Apps** list | You are editing a product, collection or home template | Switch to a page template. | | A wholesale customer sees the signup form | The customer is not logged in, or has no `B2B` tag | Approve the customer in Process Wholesale under **Customers**, or add the `B2B` tag. | | Draft products appear in the form | **Products sort order** is set with a collection | Set the sort order to **None**, or remove drafts from the collection. | | Prices show without discounts in the theme editor | The theme editor has no logged-in customer | Test on the storefront while logged in as a wholesale customer. | For more cases, see [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems). ## Frequently asked questions ### Which plan do I need for Quick Buy? Quick Buy needs the Enterprise or Professional plan. On Starter the block does not show on the storefront. Net payment terms in Quick Buy need Enterprise or Professional, and price lists in Quick Buy need Professional. Current prices are shown on the Shopify plan page that opens from **Plan** in the app. ### Can I limit Quick Buy to one collection? Yes. Choose the collection in **Wholesale Collection**. The form, its search, the **Buy again** tab and the reorder review then use only products in that collection. ### What do visitors who are not wholesale customers see on the Quick Buy page? Visitors who are not logged in, and logged-in customers without the `B2B` tag, see the signup form or the lock screen, depending on **What to show for non B2B?**. Pending customers tagged `B2B_Registeration` see the pending approval message. ### Why are no discounts shown in the theme editor? The theme editor has no logged-in customer, so Quick Buy cannot know which discounts apply. It shows retail prices and a warning there. Log in on the storefront as a wholesale customer to see wholesale prices. ### Can I add Quick Buy to a product page or the home page? No. Quick Buy can only be added to page templates. Create a page that uses the template and link to it from your menu. ## Related articles - [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering) - [How Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices) - [How reordering works in Quick Buy (Buy again)](https://docs.processwholesale.com/storefront/quick-buy-reorder) - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems) --- Source: https://docs.processwholesale.com/storefront/quick-buy-ordering Section: Storefront and theme Plans: Enterprise, Professional Last verified: 2026-11-11 # How wholesale customers order with Quick Buy Process Wholesale Quick Buy lets a logged-in wholesale customer (B2B customer) order many products from one page: they search or browse the product table, enter quantities, select **Add to order**, then review everything on the order details page and check out. The order is completed either through the normal Shopify cart and checkout, or, when the customer picks a net payment term, as a Shopify draft order with payment terms. Quick Buy needs the Enterprise or Professional plan; payment terms need Enterprise or Professional. **At a glance** - **Plan:** Enterprise or Professional. Net payment terms: Enterprise or Professional. - **Who can order:** Logged-in customers with the `B2B` customer tag - **Order steps:** **Add to order** > **View Order** > **Add to cart** (normal checkout) or a payment term > **Checkout** (draft order) - **Saved order:** Kept by Process Wholesale for that browser until checkout, separate from the Shopify cart - **Setup:** [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) ## Who can see the Quick Buy form Only a customer who is logged in and has the customer tag `B2B` (in any capitalization) sees the Quick Buy form. A pending customer tagged `B2B_Registeration` sees the pending approval message. Visitors who are not logged in, and other customers, see the signup form or a lock screen, as chosen in the block settings. See [what visitors who are not wholesale customers see](https://docs.processwholesale.com/storefront/quick-buy-setup#what-visitors-who-are-not-wholesale-customers-see). ## The Quick Buy product table The form is headed **Quick Buy Form** and has these columns: | Column | What it shows | | --- | --- | | **Product** | Image, product title, variant title (for products with more than one variant) and "SKU: ..." when the variant has a SKU | | **Price** | The customer's wholesale unit price, with the regular price struck through under it when they differ | | **Discount** | The discount that applies, for example "20% off", "$5.00 off", "Fixed $30.00", or the list of quantity tiers such as "1-9 10% off" and "10+ 20% off" | | **Quantity** | A quantity box with **-** and **+** buttons, and the stock line under it | | **Subtotal** | Price multiplied by the quantity typed in the row | | **Action** | **Add to order**, or **Select variant** for products with more than one variant | Each row starts on the first variant that is available for sale. On screens 768 pixels wide or narrower, the price moves into the product cell. How the price is worked out is explained in [how Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices). When the customer qualifies for a cart value, cart quantity or loyalty discount, a **Cart Discount Tiers** box at the top and bottom of the form lists its levels. ## Searching and browsing products - **Search.** The **Search products...** box filters the table as the customer types. **Clear** returns to page 1. When the block is limited to a collection, search matches the product title or any variant SKU within that collection. Otherwise it uses Shopify's product search over the store. When nothing matches, the table shows "No results found". - **Pages.** The form shows the number of products set in **Products per page** (10 by default). Without a collection, the customer moves between numbered pages. With a collection, or while searching, the customer uses **« Prev** and **Next »**. ## Choosing a variant For a product with several variants, **Select variant** opens a small panel with one drop-down per option, such as Size and Color, and its own **Add to order** button. When the customer changes an option, the row updates its image, SKU, stock line and price to that variant. If no variant has the chosen combination, the row stays as it was. The panel closes after the product is added. ## Quantities and stock - Quantity boxes start at 0 and cannot go below 0. - For a variant that tracks inventory and does not allow selling when out of stock, the stock line shows "{n} units left", **+** stops at the stock level, and a typed number above stock is lowered to the stock level. - A variant that is not available for sale shows "Out of stock", and its quantity box and button are disabled. - A draft product (shown only when the block uses a sort order) shows "Not available" and cannot be added. - When **Show stock quantity** is off, the stock line is hidden, but the stock limits still apply. ## Adding products to the order **Add to order** saves the row's quantity to the customer's Quick Buy order. - With a quantity of 0, the cursor moves to the quantity box and the hint "Enter quantity" appears for 2 seconds. - If the quantity is more than the stock left, the customer sees "Cannot add {qty} items. Only {stock} available." If the variant is out of stock: "{title} is out of stock." - When the product is already in the order, the quantity is added to the saved quantity. - On success, a message titled **Item added to order:** shows "{quantity} x {product} - {variant} added to order" for 5 seconds, and the row's quantity goes back to 0. - If the order cannot be saved, the customer sees "Couldn't update your order. Please try again." - If the same order was changed in another browser tab, the customer sees "Your order was changed somewhere else, so it's been refreshed. Check it and try again." and the page shows the up-to-date order. When reorder is turned on, each row also shows "✓ {n} in your order" with the units of that product already saved. > **Note:** **Add to order** compares the typed quantity with stock, but does not count units of that variant already in the order. A customer who adds 3 of a variant with 3 in stock, twice, has 6 in the order. The order details page and the reorder tools do count what is already in the order. ## The order summary The summary box at the bottom of the form shows: - **Wholesale discount:** the total saved on product prices - **Cart discount:** the cart value, cart quantity or loyalty discount - **Final price** with the original total struck through when it is lower - **View Order**, which opens the order details page The summary counts saved order lines plus any quantities typed but not yet added. Quantities typed but not added are not saved: select **Add to order** before leaving the page or selecting **View Order**. ## The order details page **View Order** opens the **Order details** page, with a **Back to form** link. Its columns are **Product**, **Price**, **Discount**, **Quantity**, **Amount** and **Action**, followed by the same summary. - **Change a quantity.** Type a new number or use **-** and **+**. The lowest quantity is 1. A **✓** and a **✕** appear: **✓** saves the change and reloads the page, **✕** puts the old number back. **+** stops at the stock level with "Cannot add more than {n} items.", and a typed number above stock is lowered with "Only {n} items are available in stock." - **Remove a line.** **Remove** deletes the line and reloads the page. - **Empty order.** The page shows "Your cart is empty. Add products to your order." and an **Add products** button back to the form. ## Payment terms and the order note When you turn on [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) (Enterprise or Professional), the order details page shows a **Payment terms** row with one button per term you selected, in this order: **Due on Receipt**, **Due on Fulfillment**, **Net 7**, **Net 15**, **Net 30**, **Net 45**, **Net 60**, **Net 90**. An information icon explains that with a term the customer completes the order now and pays later, and that to pay now they leave terms unselected and use **Add to cart**. - The customer can select one term at a time. Selecting it again clears it. - While a term is selected, an **Order note** box appears ("Do you want to add any note to your order?") and the checkout button reads **Checkout** instead of **Add to cart**. - With **Allow net terms for specific customers only** on, only customers tagged `B2Bnetterms` see the terms. - With **Force Payment Terms** on, the checkout button is hidden and the page shows "Please select a payment term to proceed with your order." until a term is selected. The setting's help text in the app says the "Add to Order" button is hidden; the button that is hidden is the order details page's checkout button. Product rows keep their **Add to order** buttons. You set all of this in Process Wholesale under **Settings > Net terms**. Up to 3 terms can be selected. ## How a Quick Buy order is completed ### Without a payment term: the normal Shopify cart When no term is selected, **Add to cart** does this: 1. Adds every line of the Quick Buy order to the customer's Shopify cart, together with anything already in that cart. 2. Sets the cart attribute `Added Via` to `processwholesale`. 3. Clears the saved Quick Buy order. 4. Opens the cart page, where the customer checks out as usual. The wholesale prices at checkout come from the Process Wholesale discounts in Shopify checkout, not from the form. The order note is not sent in this path. ### With a payment term: a draft order When a term is selected, **Checkout** does this: 1. Creates a Shopify draft order with the order's products and quantities, the selected payment terms, the order note and the customer's email address. 2. Clears the saved Quick Buy order. 3. Sends the customer to the draft order's invoice checkout. If no invoice link comes back, the customer is sent to their account page. What to do with the draft order afterwards is covered in [how to offer net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms). ## What you see in Shopify admin for a Quick Buy order | Path | What appears in Shopify admin | | --- | --- | | Without a payment term | A normal order from the customer's checkout. Process Wholesale adds the order tag `processwholesale` when a Process Wholesale discount was applied to the order. | | With a payment term | A draft order tagged `processwholesale`, with the custom attribute **Added Via: processwholesale**, the customer's email address, the order note and the selected payment terms | For the draft order, Process Wholesale sends the products and quantities only. It does not copy the prices shown in the form; the draft order accepts automatic discounts. Process Wholesale does not email you when a draft order is created, so check your draft orders in Shopify admin. See [which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) for how the `processwholesale` tag is used. ## The saved Quick Buy order - **Where it is kept.** Process Wholesale keeps the order for the customer, separate from the Shopify cart. Products added with **Add to order** do not appear in the Shopify cart until the customer selects **Add to cart**. - **It follows the browser, not the customer account.** The saved order is linked to the browser where it was created. On another device or browser, the customer sees a different (often empty) order. Anyone who logs in to the store on that same browser sees the same saved order. - **When it is restored.** Every time the Quick Buy page loads in that browser. The form uses it for the summary, tier quantities and "in your order" notes. - **When it is cleared.** At checkout, in both paths, before the customer reaches the cart or the invoice. Otherwise it is kept with no time limit. - **Deleted products.** Lines whose product or variant was deleted in Shopify are removed from the order automatically. - **Lines that cannot be loaded.** If product details cannot be loaded for some lines, those lines stay in the order but are not shown, and checkout is blocked with "Some items in your order couldn't be loaded, so it can't be checked out yet. Reload the page to try again." > **Important:** Quick Buy clears the saved order during checkout even when the next step fails. If a customer who picked a payment term lands on their account page instead of an invoice, the draft order was not created and the saved order is already cleared. In the same way, if adding the lines to the Shopify cart fails, the saved order is still cleared. In both cases the customer has to add the products again. If it happens more than once, contact Process Wholesale support. ## What Quick Buy does not have - **No minimum quantities, quantity increments, case packs or maximum quantities** in the form. To require a minimum, use a [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) or a [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount), which are checked in Shopify checkout. - **No PO number, requested delivery date or shipping address fields.** The only extra field is the order note, and it is sent only with a payment term. - **No option to email the order** or send it as a quote. - **No sharing of the saved order** between devices or browsers. ## Limits and things to know - **Stock check on Add to order.** Units already in the order are not counted, so an order can hold more than the stock. On the order details page, **+** stops at the stock level and a typed number above stock is lowered to it. - **Summary when a product is both saved and typed.** If a variant is already in the order and the customer types a quantity for it in a visible row, the summary counts only the typed quantity until it is added. - **Some messages are always in English**, including the stock messages, "Enter quantity", "No results found", "« Prev" and "Next »". See [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems#text-in-quick-buy-is-not-translated). - **The saved order has no expiry.** An order left on a browser stays there until checkout. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The customer's order is empty on a new device | The saved order belongs to the browser where it was created | Ask the customer to finish the order on the original browser, or add the products again. | | Products added in Quick Buy are not in the Shopify cart | The Quick Buy order is separate until **Add to cart** | Ask the customer to open **View Order** and select **Add to cart**. | | Checkout shows "Some items in your order couldn't be loaded..." | Product details for some lines did not load | Reload the page. If it continues, contact Process Wholesale support. | | No payment term buttons | Net terms are off, no terms are selected, or the customer lacks `B2Bnetterms` with customer-based terms on | Check **Settings > Net terms**. | | The checkout button is missing | **Force Payment Terms** is on and the customer cannot see any term | Turn off **Force Payment Terms** or **Allow net terms for specific customers only**, or tag the customer `B2Bnetterms`. | ## Frequently asked questions ### Where is the Quick Buy order saved, and when is it cleared? Process Wholesale saves the Quick Buy order for the browser where the customer created it, separate from the Shopify cart. It is restored each time the Quick Buy page loads in that browser and is cleared when the customer starts checkout. There is no expiry. ### What happens when a customer chooses net payment terms in Quick Buy? Quick Buy creates a Shopify draft order with the selected payment terms, the order note and the customer's email address, clears the saved order and sends the customer to the draft order's invoice checkout. The draft order is tagged `processwholesale`. ### Why can't a customer see their Quick Buy order on another device? The saved Quick Buy order is linked to the browser, not to the customer account. On another device or browser the customer starts with a different order. ### Does Quick Buy support minimum quantities, case packs or PO numbers? No. Quick Buy has no minimum or increment rules and no PO number field. Use a minimum order quantity or amount rule for minimums, and the order note (available with payment terms) for references. ### Do I get an email when a customer places a draft order through Quick Buy? No. Process Wholesale does not send a notification for Quick Buy draft orders. Check draft orders in Shopify admin. ## Related articles - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) - [How Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices) - [How reordering works in Quick Buy (Buy again)](https://docs.processwholesale.com/storefront/quick-buy-reorder) - [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms) - [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems) --- Source: https://docs.processwholesale.com/storefront/quick-buy-prices Section: Storefront and theme Plans: Enterprise, Professional Last verified: 2026-11-11 # How Quick Buy calculates the prices it shows Process Wholesale Quick Buy shows each logged-in wholesale customer (B2B customer) one wholesale price per product, worked out from the discounts whose tags the customer has. Cost plus markup comes first, then a price list, then a flat discount or a quantity tier discount, decided by the **Tag priority** setting. The cart discount and loyalty discount appear in the order summary. The form's prices are a preview: Shopify checkout calculates the price the customer pays, and in some situations the two differ. **At a glance** - **Plan:** Quick Buy needs Enterprise or Professional. Price lists and cost plus markup need Professional; loyalty tiers need Enterprise or Professional. - **Applies to:** Logged-in customers tagged `B2B` who also have a discount tag - **Order of precedence per product:** cost plus markup > price list > flat or quantity tier (by **Tag priority**) > no discount - **Cart-level discounts:** shown in the summary as **Cart discount:**, not in the product price - **Final price:** set in Shopify checkout ## Which wholesale price Quick Buy shows for a product For each product and variant, Quick Buy looks at the customer's discount tags (capitalization does not matter) and uses the first of these that applies: 1. **Cost plus markup**: a cost plus discount whose products include this product. 2. **Price list**: a price list that has a price for this variant. 3. **Flat discount or quantity tier**: when both apply, **Tag priority** decides. With **Prefer flat tag** (the default), the flat discount wins. With **Prefer tier tag**, the quantity tier wins. When only one applies, that one is used. At checkout, checkout follows **Tag priority** only after the **Settings** page has been saved once; until then it behaves as **Prefer tier tag**. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking#flat-discount-versus-quantity-tier-the-tag-priority-setting). 4. **No discount**: the regular price. Only one of these applies to a product in the form. Among several flat discounts, price lists or cost plus discounts, the one with the highest priority (priority 1 first) that covers the product wins. Among several quantity tiers, the level with the lowest price wins. A discount can cover all products, chosen products, chosen collections or, for some types, chosen variants. **Tag priority** is set in Process Wholesale under **Settings > Discount settings > Tag priority**. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## Worked examples for each discount type All examples use a regular price of $50.00 unless stated. | Discount | Setting | Price shown | **Discount** column | | --- | --- | --- | --- | | [Flat discount](https://docs.processwholesale.com/discounts/flat-discounts), percentage off | 20% | $40.00 | 20% off | | Flat discount, price off | $5 | $45.00 | $5.00 off | | Flat discount, fixed price | $30 | $30.00 | Fixed $30.00 | | [Price list](https://docs.processwholesale.com/discounts/price-lists) | List price 7.50 on a $10.00 product | $7.50 | $2.50 | | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | Unit cost $8.00, markup 50% | $12.00 | The difference from the regular price | | [Quantity tier](https://docs.processwholesale.com/discounts/quantity-tier-discounts) | 1-9 = 10% off, 10+ = 20% off, $10.00 product, 12 units | $8.00 each, subtotal $96.00 | 1-9 10% off, 10+ 20% off | - **Price off** never takes a price below $0.00. - **Cost plus markup** uses the variant's unit cost in Shopify. A variant with no unit cost shows the regular price. - **Price lists** show a price only for variants that have a price in that list. ## How quantity tiers are counted in Quick Buy The quantity for a tier is the total number of units of the **product** in the order: all its variants, the quantities typed in the form and the units already saved in the order. The **Discount** column lists every level of every tier that covers the product, for example "1-9 10% off" and "10+ 20% off", so the customer sees the breaks before reaching them. Fixed-price levels show as "{min}-{max} $X.XX each". When several tiers cover the same product, Quick Buy uses the level that gives the lowest price. Tier prices are rounded to the cent. **Example.** Tier "1-9 = 10% off, 10+ = 20% off" on a $10.00 product. The customer has 4 units saved in the order and types 8 more. Quick Buy counts 12 units and shows $8.00 each. ## Cart discounts and loyalty in the order summary Cart value tiers, cart quantity tiers and loyalty tiers do not change product prices. They appear in the summary as **Cart discount:**, and the **Final price** is the discounted subtotal minus that amount. - **[Cart value tier](https://docs.processwholesale.com/discounts/cart-value-tier-discounts).** Compared with the subtotal after product discounts. Example: a subtotal of $600.00 and a level "$500-$999 = 5% off" give a cart discount of $30.00. - **[Cart quantity tier](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts).** Compared with the total units in the order. A tier limited to products or collections counts and discounts only those products. Example: 2 units at $50.00 and 8 units at $10.00 (10 units, $180.00) with "10+ = 10% off" give $18.00. - **One cart discount at a time.** When levels from several cart value or cart quantity tiers match, Quick Buy shows only the largest single discount. - **[Loyalty](https://docs.processwholesale.com/discounts/loyalty-discounts).** Added on top of the cart discount for customers who have earned a loyalty level. See the loyalty notes under "Why the Quick Buy price can differ from checkout". The **Cart Discount Tiers** box lists the levels the customer can reach: cart value levels as amounts (for example "$500.00-$999.99 5% off" and "$1,000.00+"), otherwise cart quantity levels as unit counts, otherwise the customer's loyalty level under **Eligible Loyalty discount :**. ## Prices in other currencies When a customer shops in another currency through Shopify Markets, Quick Buy converts amounts at the rate Shopify uses for that customer: regular prices, unit costs, **Price off** and fixed-price amounts, and cart value thresholds. Percentages are not converted. Two values behave differently: - **Price list prices are not converted.** The number you entered is shown as it is, next to converted regular prices. Example: a $10.00 product with a list price of 7.50, viewed at a rate of 0.9, shows a regular price of 9.00 and a price list price of 7.50. - **The cost plus markup percentage is also multiplied by the rate.** Example: unit cost $8.00, markup 50%, rate 1.3. Quick Buy shows 10.40 × 1.65 = 17.16. Checkout uses the 50% markup: 10.40 × 1.5 = 15.60. Amounts are formatted with your store's money format. ## Why the Quick Buy price can differ from checkout Quick Buy shows a preview. The price the customer pays is set by the Process Wholesale discounts in Shopify checkout, which follow their own rules. These are the situations where the two can differ, and what to do. 1. **Several discount types on one product.** The form shows one discount per product. At checkout, cost plus markup, price lists and flat or tier discounts are separate Shopify automatic discounts, and whether they apply together depends on **Settings > Discount settings** combinations. Give each customer one product-level discount type, or check the combinations. See [using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). 2. **Several quantity tiers on one product.** The form uses the level with the lowest price across all tiers. Checkout uses the first tier that covers the product. Give a customer only one quantity tier per product. 3. **Quantity tiers limited to variants.** The form counts all units of the product. Checkout counts only the variants the tier covers. When the customer mixes covered and other variants of one product, the form can show a higher level than checkout gives. To keep them the same, limit the tier to whole products or collections instead of variants. 4. **Cart value and cart quantity tiers together.** The form shows only the largest single cart discount. At checkout, a cart value tier and a cart quantity tier are separate discounts, so the checkout total can be lower than the form's **Final price**. Checkout also uses one cart value tier per customer. To keep them the same, give a customer either one cart value tier or one cart quantity tier, not several. 5. **Cart value thresholds.** Checkout rounds the subtotal down to a whole number before comparing it with cart value levels; the form does not. Example: levels "0-100 = $13 off" and "101+ = $24 off" with a subtotal of $100.50: the form shows no cart discount, checkout takes $13.00 off. The difference appears only for subtotals between one level's maximum and the next level's minimum; the checkout amount is the one that applies. 6. **Loyalty level.** The summary picks the loyalty level by the number of units in the current order, while checkout uses the level the customer earned from past spend or order count. For a loyalty level that starts at 2,000 in spend, the summary shows no loyalty discount until the order holds 2,000 units, but checkout applies it to a customer who earned it. Tell loyalty customers that the loyalty discount is applied at checkout. 7. **Loyalty percentages in the Cart Discount Tiers box.** A percentage loyalty level is shown as an amount: a 10% level appears as "$10.00 off". Checkout applies 10%. Tell loyalty customers that the percentage of their loyalty level is what checkout applies. 8. **Other currencies.** Price list prices are not converted in the form, and the cost plus markup is increased by the exchange rate (see "Prices in other currencies"). Checkout converts the price list price and uses the markup you set. For customers who shop in another currency, compare prices at checkout, not in the form. 9. **Cost plus markup on the order details page.** The order details page can show the regular price for products priced with cost plus markup, while the form page shows the cost plus price. Checkout applies cost plus markup. Check cost plus prices on the form page or at checkout. 10. **Cost plus markup limited to variants.** When a cost plus discount covers chosen variants, the form shows the cost plus price on every variant of that product. Checkout discounts only the chosen variants. To keep them the same, cover whole products or collections instead of variants. 11. **A product both saved and typed.** When a variant is in the order and the customer also types a quantity for it in a visible row, the summary counts only the typed quantity until it is added. Ask the customer to select **Add to order** and check the summary again. 12. **Cents.** Quick Buy rounds tier prices per unit; checkout rounds the order total. Large quantities can differ by a few cents. The checkout amount is the one charged. 13. **Discount codes and other Shopify discounts.** Quick Buy shows only Process Wholesale discounts. Discount codes and other automatic discounts appear at checkout, as allowed by **Settings > Discount settings** combinations. 14. **Net terms draft orders.** With a payment term, Quick Buy sends only products and quantities to the draft order. The draft order's prices are set by Shopify and the automatic discounts it accepts, not by the form. Check the draft order in Shopify admin. > **Important:** Checkout is authoritative. When a customer reports a price difference, compare it with the checkout or draft order total, not with the form. To see what checkout applies, read [why a wholesale discount is not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). ## Limits and things to know - **Plans.** Price list prices appear in Quick Buy only on the Professional plan. Cost plus markup needs Professional and loyalty tiers need Enterprise or Professional. - **The theme editor shows no discounts.** There is no logged-in customer there. - **Discount labels are in English.** "% off", "off" and "each" are not translated. - **One product-level discount per product.** The form never shows two discounts stacked on one product. ## Frequently asked questions ### How does Quick Buy decide which wholesale price to show? Quick Buy uses cost plus markup first, then a price list price, then a flat or quantity tier discount (decided by **Tag priority**), and otherwise the regular price. Among discounts of the same type, the highest priority wins, except quantity tiers, where the lowest resulting price wins. ### Why is the price in Quick Buy different from the price at checkout? Quick Buy calculates a preview in the browser, while Shopify checkout applies the Process Wholesale discounts with its own rules. Common reasons are combined discount types, several tiers, loyalty discounts, cart discounts that stack at checkout and other currencies. Checkout is the price the customer pays. ### Which discount wins when a customer has a flat discount and a quantity tier? The **Tag priority** setting decides. **Prefer flat tag** (the default) shows the flat discount; **Prefer tier tag** shows the quantity tier price. Example: a 10% flat discount and a tier "10+ = 20% off" on 12 units show 10% off with **Prefer flat tag** and 20% off with **Prefer tier tag**. ### Does Quick Buy show prices in the customer's currency? Quick Buy converts most amounts at the exchange rate Shopify uses for the customer. Regular prices, unit costs, amounts off and cart thresholds are converted. Price list prices are shown as entered, and checkout converts them. The cost plus markup percentage is multiplied by the rate in the form, while checkout uses the markup you set. ### Does Quick Buy show discount codes? No. Quick Buy shows Process Wholesale discounts only. Discount codes are entered and applied in Shopify checkout. ## Related articles - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types) - [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) - [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems) --- Source: https://docs.processwholesale.com/storefront/quick-buy-reorder Section: Storefront and theme Plans: Enterprise, Professional Last verified: 2026-11-11 # How reordering works in Quick Buy (Buy again) Process Wholesale Quick Buy lets a logged-in wholesale customer (B2B customer) order again from their past orders in two ways: the "Your last order" card reorders the most recent order, and the **Buy again** tab lists everything they ordered recently with the last quantity of each item. Before anything is added, Quick Buy checks each item against today's stock, availability and prices and shows a review. Reordering is part of Quick Buy, so it needs the Enterprise or Professional plan, and both features are on by default. **At a glance** - **Plan:** Enterprise or Professional - **Where:** On the Quick Buy form page, above the product table - **Settings:** **Show Buy again tab** and **Show last order** in the Quick Buy block, both on by default - **History used:** The customer's 10 most recent orders recorded by Process Wholesale, without cancelled orders - **Limits:** 50 items in **Buy again**, 2 earlier orders listed, 60 products checked per load - **Languages:** English only ## When the reorder features appear The last order card and the **Buy again** tab appear only when all of these are true: - The customer is logged in and sees the Quick Buy form (tagged `B2B`). - **Show last order** or **Show Buy again tab** is on in the [Quick Buy block settings](https://docs.processwholesale.com/storefront/quick-buy-setup#quick-buy-block-settings). - The customer has at least one past order that Process Wholesale recorded. - The page is the form page. Reorder does not appear on the order details page or in the theme editor. If the past orders cannot be loaded, nothing is shown and the form works as usual. ## Which past orders are included - **Source.** Process Wholesale records every order that is linked to a customer, wholesale or not, from the time the app started receiving the store's orders. Older orders are not imported, and orders without a customer are not recorded. - **How many.** The 10 most recent recorded orders of that customer. There is no date limit within those 10. - **Cancelled orders.** Quick Buy looks up each of those 10 orders in Shopify and leaves out cancelled ones, so fewer than 10 can be used; older orders do not take their place. Process Wholesale can look up orders from the last 60 days only, so for an older order Quick Buy cannot see the order number or whether it was cancelled: such an order appears without a number, and a cancelled one is still included. - **Items.** One line per variant; quantities of the same variant in one order are added together. Custom items without a product variant are left out. - **Collection.** When the block is limited to a **Wholesale Collection**, only items in that collection are offered. ## The last order card The "Your last order" card shows the most recent included order: - The order number (when known), the date, "[n] items" (the number of different variants), the order total and a status badge: **Fulfilled**, **Partly fulfilled** or **Not fulfilled yet**. - **Earlier:** up to 2 earlier orders with number, date and total. - **Reorder these [n] items**, which opens the review for that order. ## The All products and Buy again tabs With **Show Buy again tab** on, two tabs appear above the form: **All products** (the normal form, shown first) and **Buy again**, with a count of the items it lists. The **Buy again** tab hides the search box and the product table and shows its own table: - An intro line, "Everything you've ordered, the items you buy most often first.", and the **Add all at last quantities** button. - Columns: **Product**, **Last ordered**, **Price**, **Discount**, **Quantity**, **Subtotal**, **Action**. - **Order of items.** The items ordered in the most orders come first, then the most recently ordered. Up to 50 items. - **Last ordered** shows the last quantity and date, and how often: "In every order" or "In [n] of your last [total] orders" (only when more than one order is included). - **Use last ([n])** fills in the last quantity, lowered to the stock still available after what is already in the order. - **Add to order** adds the row. Prices use the same rules as the form, and the tier quantity includes units already in the order. See [how Quick Buy calculates prices](https://docs.processwholesale.com/storefront/quick-buy-prices). - Items that are not available are moved to the bottom, dimmed, marked "Not available" or "Out of stock", and have no **Add to order** button. When a row's **Add to order** is selected, Quick Buy checks the item again first: | Situation | What the customer sees | | --- | --- | | Quantity is 0 | The hint "Enter quantity" | | Quantity is more than the stock left, now or after today's check | "Not enough stock" | | Today's product data cannot be loaded | "Couldn't load your past orders. Please refresh the page." | | The item is no longer available or no longer in the collection | "This item is no longer available." | | The price changed since the tab loaded | "Price is now [new] (was [old])." The item is not added; the customer can add it again at the new price. | | Everything matches | The item is added with the usual "added to order" message | If the tab cannot load, it shows "Couldn't load your past orders. Please refresh the page." If none of the past items is available, it shows "None of the products you've ordered before are available right now." ## The reorder review **Reorder these [n] items** opens the review titled "Reorder your last order", with the order number and date. **Add all at last quantities** opens "Add your usual quantities", using each **Buy again** item's last quantity and last price. Quick Buy loads today's product data each time a review opens and checks each item in this order: | Check | Icon | Message | What is added | | --- | --- | --- | --- | | The product or variant no longer exists | ✕ | "No longer available. Skipped." (named "An item that's no longer sold") | Nothing | | Outside the block's collection | ✕ | "Not sold on this page. Skipped." | Nothing | | Draft, archived or not published to the Online Store | ✕ | "No longer available. Skipped." | Nothing | | Not available for sale | ✕ | "Out of stock. Skipped." | Nothing | | The order already holds all the stock | ✕ | "Your order already has all [n] in stock. Skipped." (with stock hidden: "Your order already has all that's in stock. Skipped.") | Nothing | | Less stock left, after what is already in the order, than the past quantity | ! | "Only [stock] in stock. Adding [add] of [qty]." (with stock hidden: "Limited stock. Adding [add] of [qty].") | The stock still left | | The regular price changed since that order | ✓ | "Price is now [new] (was [old])." | The full quantity | | Already in the order | ✓ | "Adds to the [n] already in your order." | The full quantity, added to the existing line | The last three checks can apply together, and the item then shows each message. Stock limits apply to variants that track inventory and do not allow selling when out of stock. **Example:** a variant with 3 in stock, none of it in the order yet, that was last ordered in a quantity of 5 shows "Only 3 in stock. Adding 3 of 5." and the quantity as ~~5~~ × 3. The top of the review says "[ready] of [total] items are ready. Prices and stock are checked against today's catalog." Each item shows its image, name, variant, message, quantity and amount, or **Skipped**. The footer shows "Adds [n] items · [amount] before cart discounts". When the added units move items already in the order to a lower tier price, the amount includes that saving and the note "Includes lower prices on items already in your order." appears. **What the customer can do:** - **Add [n] items to order** adds the ready items. It is disabled when no item is ready. - **Cancel**, the close button or a click outside the review closes it without changes. **After confirming:** - Success: "[n] items added to your order". - Some items sold out in the meantime: "[n] items added to your order. [skipped] sold out before they could be added." - Nothing could be added: "Not enough stock" inside the review. - The order was changed in another tab: the review closes and "Your order was changed somewhere else, so it's been refreshed. Check it and try again." appears. - Any other failure: "Couldn't update your order. Please try again." inside the review. While items are being saved, the reorder buttons are disabled. ## When an item cannot be reordered A past item cannot be reordered when it was deleted, is a draft or archived, is not published to the Online Store, is out of stock, is outside the block's collection, or is not among the 60 products Quick Buy checks for one load (the last order's products first, then the **Buy again** items). In the review such items are skipped with the messages listed in the review table; in the **Buy again** tab they are dimmed or not listed. ## Languages The reorder texts (the last order card, the tabs, the **Buy again** table, the review and its messages) are in English in every store language. Dates follow the language of the storefront page. The rest of Quick Buy is translated into German, Spanish, French, Italian, Norwegian, Portuguese (Brazil and Portugal) and Swedish. See [languages supported by Process Wholesale](https://docs.processwholesale.com/account/languages). ## Limits and things to know - **10 orders, 2 earlier orders, 50 items, 60 products.** Older orders and items beyond these numbers are not offered. - **No import of past orders.** Orders placed before Process Wholesale started recording the store's orders are not included. - **60-day window.** Orders older than 60 days show no number, and cancellations among them are not detected. - **Retail orders count.** Every recorded order linked to the customer is included, not only wholesale orders. - **The price check in the review compares regular prices.** The review shows "Price is now ..." when the regular price changed; the wholesale price is worked out with today's discounts. ## Frequently asked questions ### Which past orders does Buy again use? **Buy again** uses the customer's 10 most recent orders recorded by Process Wholesale, without cancelled orders, and lists up to 50 items, the most frequently ordered first. Orders placed before the app started recording the store's orders are not included. ### Why is a past item skipped when reordering? Quick Buy skips an item that no longer exists, is a draft or archived, is not on the Online Store, is out of stock, has no stock left after what is already in the order, or is outside the block's collection. The review shows the reason next to each item. ### Why is the Buy again tab missing or empty? The tab is missing when **Show Buy again tab** is off, the customer is not logged in, or Process Wholesale has no recorded orders for the customer. It is empty when none of the past items is available today. ### Can I turn off the Buy again tab or the last order card? Yes. Turn off **Show Buy again tab** or **Show last order** in the Quick Buy block settings in the theme editor. Each can be turned off on its own. ### Are the reorder features translated? No. The reorder texts are in English in every store language. Dates follow the storefront language. ## Related articles - [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering) - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) - [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) - [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems) --- Source: https://docs.processwholesale.com/storefront/hide-prices Section: Storefront and theme Plans: Professional Last verified: 2026-11-11 # How to hide prices from customers who are not wholesale Process Wholesale can hide prices and buy buttons on your storefront from everyone who is not a wholesale customer (B2B customer), and show a message such as "Log in to see price" in place of the add to cart button. It needs two switches, both on: the **Hide price** app embed in your theme, and **Hide prices and buy buttons from non-B2B customers** in Process Wholesale under **Settings > Customer settings**. Hide price is part of the Professional plan. It changes what the storefront displays; it does not stop a purchase. **At a glance** - **Plan:** Professional - **Where:** Process Wholesale > **Settings > Customer settings > Hide prices for non-B2B customers**, and Shopify theme editor > **Theme settings > App embeds > Hide price** - **Hidden from:** Guests and logged-in customers with no tag containing `b2b` - **Shown to:** Logged-in customers with any tag containing `b2b`, including pending customers tagged `B2B_Registeration` - **Pages:** Every storefront page, including the home page, collection pages, search, product pages and the cart. Shopify checkout is not changed. - **Default message:** "Log in to see price" - **Default:** Off ## Before you start - Your store must be on the Professional plan. On other plans the settings are disabled with a link **Upgrade to Professional**, and the **Hide price** app embed is not listed in your theme. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). - Your theme must support app embeds (an Online Store 2.0 theme). See [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview). ## Steps to hide prices **Part 1: turn on the setting in Process Wholesale** 1. In Shopify admin, open the **Process Wholesale** app. 2. Select **Settings**, then **Customer settings** in the list on the left. 3. In the **Hide prices for non-B2B customers** card, check **Hide prices and buy buttons from non-B2B customers**. 4. In the text field under it, enter the message shown in place of the add to cart button. Leave it as "Log in to see price" or write your own, for example "Apply for a wholesale account to see prices". 5. Select **Save**. Nothing changes on the storefront until you save. **Part 2: switch on the Hide price app embed** 1. In the same **Hide prices for non-B2B customers** card, select the **Hide price** link in the banner "Enable the Hide price app embed in your theme customizer to begin hiding prices." It opens the theme editor at **App embeds** with **Hide price** selected. You can also go to **Online Store > Themes > Customize > Theme settings > App embeds**. 2. Switch **Hide price** on. 3. Select **Save** in the theme editor. **Part 3: check the result** 1. Open your store in a private browser window, where you are not logged in. 2. Open a collection page and a product page. Prices should be hidden and the add to cart button should show your message. 3. Log in as a wholesale customer tagged `B2B` and confirm prices show. The Process Wholesale **Dashboard** also has a **Hide price** card in **App Status**. It shows **ON** when the Hide price app embed is on in your published theme. The card does not check the setting in Part 1, so a card showing **ON** still needs the checkbox saved. On the Enterprise plan the card is not locked and shows **Enable**, but the Hide price app embed needs Professional and is not listed in the theme editor on Enterprise. ## What your customers see **Visitors without wholesale access** (guests, and logged-in customers with no tag containing `b2b`): - Prices are hidden on every page where the theme shows them, as long as the theme uses one of the selectors Hide price looks for (listed in "How Hide price finds prices and buttons"). - **Buy it now** and other dynamic checkout buttons are hidden. - In each product form and product card, the first add to cart button stays visible and its text is replaced by your message. Any other add to cart buttons in the same form or card are hidden. - The message is plain text on the button. It is not a link, and it shows in one language: the text you saved. - Products that appear later on the page, such as in a quick view, a drawer or a "load more" list, are hidden too when they use the same selectors. **Wholesale customers** (any customer tag containing `b2b`) see the storefront as usual, with all prices and buttons. **Example** | Visitor | Tags | Prices | | --- | --- | --- | | Guest, not logged in | none | Hidden | | Retail customer | `newsletter` | Hidden | | Customer | `Wholesale` | Hidden, because the tag does not contain `b2b` | | Approved wholesale customer | `B2B`, `wholesale15` | Shown | | Pending applicant | `B2B_Registeration` | Shown, because the tag contains `b2b` | | Customer | `b2b-gold` | Shown | > **Note:** Hide price uses a broader rule than checkout. Any tag containing `b2b` counts, so pending applicants tagged `B2B_Registeration` see prices before you approve them. Wholesale discounts at checkout still need the exact tag `B2B`. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ## How Hide price finds prices and buttons Hide price looks for page elements by CSS selector. The defaults match many themes, including Dawn-style themes: | What | Default selectors | | --- | --- | | Prices | `.price`, `.price__regular`, `.price__sale`, `.price__container`, `[data-product-price]`, `.product__price`, `.card-information .price`, `.card__information .price`, `.product-card__price`, `.product-card-price` | | Add to cart buttons | `button[name="add"]`, `input[name="add"]`, `.product-form__submit`, submit buttons in an add to cart form, submit buttons in `product-form` | | Buy it now buttons | `.shopify-payment-button`, `.shopify-payment-button__button`, `.buy-buttons__dynamic`, `[data-shopify="payment-button"]` | Add to cart and Buy it now buttons are changed only inside a product form or a product card: an add to cart form, a `product-form` element, or an element with the class `product-form`, `product-card` or `card-wrapper`. Prices are hidden wherever they match, on any part of the page. ## Custom selectors for themes that need them If some prices or buttons stay visible, your theme uses different class names. Add them in the theme editor under **Theme settings > App embeds > Hide price**: | Setting | Use it for | | --- | --- | | **Price on product page** | The price on the product page | | **Add to cart on product page** | The add to cart button on the product page | | **Buy it now on product page** | The Buy it now button, or the element around it | | **Price on collection page** | Prices on collection pages and product cards | | **Quick buy on collection page** | Quick add or add to cart buttons on product cards | - Leave a field blank to use only the defaults. Your selectors are added to the defaults; they never replace them. - Separate several selectors with commas, for example `.product-price, .money-sale`. - The two price fields are applied together on every page, and so are the two add to cart fields. Putting a price selector in the product field or the collection field gives the same result. - Select **Save** in the theme editor after changing a field. **How to find a selector in your browser** 1. Open your storefront in Chrome, Edge or Firefox while logged out. 2. Right-click the price (or button) that stays visible and choose **Inspect**. 3. In the panel that opens, look at the highlighted element and its parents for a `class` attribute, for example `class="product-price money"`. 4. Turn one class into a selector by putting a period in front of it: `.product-price`. For an `id`, put `#` in front: `#ProductPrice`. 5. Paste the selector into the matching field, save the theme, and reload the storefront in a private window. > **Tip:** Choose a class that is used only for prices. Every element with a matching class is hidden on every page, so a very general class can hide other content too. The default `.price` already hides any element with the class `price`. ## What Hide price does not do - **It does not prevent a purchase.** The add to cart button that shows your message still works as an add to cart button. A visitor who clicks it adds the product to the cart, and the cart and Shopify checkout show the price. - **It does not remove prices from the page.** Prices stay in the page source, and they can appear for a moment while the page loads, before Hide price runs. - **It does not change checkout.** Shopify checkout always shows prices. - **It does not restrict who can open a page.** To send visitors away from wholesale-only pages, collections or products, use [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) (Enterprise or Professional). ## Limits and things to know - **Both switches must be on.** With the app embed on and the setting off, or the setting on and the app embed off, nothing is hidden. - **Professional only.** Hide price is part of the Professional plan. The **Hide price** app embed is not listed in the theme editor on Starter or Enterprise. - **One message for every language.** The message is not translated per storefront language. - **Elements outside a product form or card keep their buttons.** A theme that places its add to cart button outside a form or card that Hide price recognizes keeps that button as it is. - **The rule is "a tag containing `b2b`".** Any customer with a tag such as `B2B_Registeration`, `B2Bnetterms` or `b2b-vip` sees prices. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | Prices still visible to guests | The app embed is off, or the setting was not saved | Switch on **Hide price** in **App embeds** and save the theme. Check the box in **Settings > Customer settings** and select **Save**. | | Some prices or buttons still visible | The theme uses different class names | Add custom selectors in the Hide price app embed. | | Hide price is not in **App embeds** | The store is not on Professional | Upgrade to Professional under **Plan**. | | The settings in **Customer settings** are grayed out | The store is not on Professional | Upgrade to Professional. | | Pending applicants can see prices | Their tag `B2B_Registeration` contains `b2b` | No setting changes this. Use [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) for pages that only approved customers may open. | | A customer tagged `Wholesale` cannot see prices | The tag does not contain `b2b` | Approve the customer in Process Wholesale so they get the `B2B` tag. | | A visitor added a product to the cart despite hidden prices | The message button still adds to cart | Expected. Hide price changes the display only. | ## Frequently asked questions ### Can customers still buy when prices are hidden? Yes. Hide price changes the add to cart button's text but does not disable it, and the cart and checkout show prices. Hide price is a display setting, not a purchase restriction. ### Do pending wholesale applicants see prices? Yes. Pending applicants are tagged `B2B_Registeration`, which contains `b2b`, so Hide price shows them prices. They do not get wholesale discounts at checkout until they are approved and tagged `B2B`. ### What if my theme still shows some prices or buttons? Add your theme's CSS selectors in the theme editor under **Theme settings > App embeds > Hide price**. Custom selectors are added to the defaults, and you can enter several separated by commas. ### Which plan includes Hide price? Professional. Current prices are shown on the Shopify plan page that opens from **Plan** in Process Wholesale. ### Can I show a link or a different message per language? No. The message is plain text in a single language, shown on the add to cart button. ## Related articles - [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content) - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference) - [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) --- Source: https://docs.processwholesale.com/storefront/lock-content Section: Storefront and theme Plans: Enterprise, Professional Last verified: 2026-11-11 # How to make pages, collections or products wholesale-only Process Wholesale makes pages, collections and products wholesale-only with the **Lock Content Redirect** block, an app block you add to a page, collection or product template in the Shopify theme editor. Every storefront page that uses that template sends visitors without access to another address, by default the account login page `/account/login`. By default only logged-in customers with the exact tag `B2B` are let in, and you can switch to your own customer tags instead. Lock Content Redirect needs the Enterprise or Professional plan. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Shopify theme editor > a page, collection or product template > **Add block** > **Apps** > **Lock Content Redirect** - **Locks:** Every page that uses the template the block is in - **Allowed in by default:** Logged-in customers with a tag exactly `B2B` (any capitalization) - **Redirect to by default:** `/account/login` - **Called in the app:** **Lock content** on the Dashboard ## Before you start - Your store must be on the Enterprise or Professional plan. On other plans **Lock Content Redirect** is not listed under **Apps** in the theme editor. - Your theme must be an Online Store 2.0 theme. See [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview). - Decide which template to lock. Lock Content Redirect locks **every** page using the template it is in. If you add it to your default product template, every product using that template is locked. To lock only some products, pages or collections, create a separate template for them (for example a product template named `wholesale`), add the block to that template only, and assign that template to the wholesale-only items in Shopify admin. ## Steps to lock a template 1. In Shopify admin, go to **Online Store > Themes** and select **Customize** on your live theme. 2. In the template selector, choose the page, collection or product template to lock, for example your `wholesale` product template. 3. In a section of that template, select **Add block**, open the **Apps** tab and select **Lock Content Redirect**. 4. Set **Redirect URL**: where visitors without access are sent. Keep `/account/login`, or enter another address such as `/pages/wholesale-application`. 5. Set **Tag access mode**, and **Customer tags** if the mode needs them (see "Who is allowed in"). 6. Select **Save**. 7. Test on the live storefront in a private browser window: open a page that uses the template while logged out, then again while logged in as a wholesale customer. Video walkthrough: [How to hide specific products & pages from retail customers](https://vimeo.com/944940074) (5 minutes) shows how to set up the Lock Content Redirect block. > **Important:** Never leave **Redirect URL** empty. With an empty Redirect URL, a visitor without access is sent back to the same page, over and over. Also make sure the Redirect URL does not point to a page that uses a locked template, or the visitor is redirected again from that page. ## Lock Content Redirect settings | Setting | Default | What it does | | --- | --- | --- | | **Redirect URL** | `/account/login` | The address visitors without access are sent to. A path on your store, such as `/pages/apply`, or a full URL. | | **Tag access mode** | **Default: Hide content from non B2B customers** | Chooses who is allowed in. Options below. | | **Customer tags** | Empty | One or more customer tags separated by commas, for example `VIP, Bulk, Pro`. Needed for the two tag modes. | ## Who is allowed in Lock Content Redirect compares the customer's tags with a list. When **Customer tags** is empty, the list is the single tag `B2B`. When **Customer tags** is filled in, the list is those tags. Tags match exactly, ignoring capitalization and spaces around the commas. | Tag access mode | Allowed in | Redirected | | --- | --- | --- | | **Default: Hide content from non B2B customers** | Logged-in customers with a matching tag | Guests and everyone else | | **Show only for customers with specified tags** | Logged-in customers with a matching tag | Guests and everyone else | | **Hide from customers with specified tags** | Guests, and logged-in customers without a matching tag | Logged-in customers with a matching tag | **Examples** | Mode | Customer tags field | Visitor | Result | | --- | --- | --- | --- | | Default | Empty | Guest | Redirected | | Default | Empty | Customer tagged `B2B` | Allowed | | Default | Empty | Customer tagged `b2b` | Allowed | | Default | Empty | Pending customer tagged `B2B_Registeration` | Redirected | | Default | Empty | Customer tagged `b2b-gold` | Redirected | | Show only for customers with specified tags | `VIP, Bulk` | Customer tagged `vip` | Allowed | | Show only for customers with specified tags | `VIP, Bulk` | Customer tagged `B2B` | Redirected | | Hide from customers with specified tags | `Retail` | Guest | Allowed | | Hide from customers with specified tags | `Retail` | Customer tagged `Retail` | Redirected | | Hide from customers with specified tags | Empty | Customer tagged `B2B` | Redirected, because an empty list means `B2B` | | Hide from customers with specified tags | Empty | Guest | Allowed | > **Note:** In the default mode, Lock Content Redirect lets in only the exact tag `B2B`. This differs from the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) and [Hide price](https://docs.processwholesale.com/storefront/hide-prices), which accept any tag containing `b2b`. Pending customers tagged `B2B_Registeration` are redirected until you approve them. > **Note:** If you fill in **Customer tags** while the mode is **Default: Hide content from non B2B customers**, the block works exactly like **Show only for customers with specified tags**. `B2B` then counts only if it is in your list. ## What visitors see - **Visitors with access** see the page as usual. The block itself shows nothing. - **Visitors without access** are sent to the Redirect URL as the page opens. With the default Redirect URL they land on the account login page. - **In the theme editor** the block never redirects, so you can keep editing a locked template. Test on the live storefront. ## What Lock Content Redirect does not do - **The redirect happens in the visitor's browser.** The page starts to load, and the browser is sent to the Redirect URL when it reaches the block. - **It acts only on pages that use the locked template.** A locked product still appears on collection pages and in search results unless those pages are locked too. Search results cannot be locked, because the block can only be added to page, collection and product templates. - **It does not change prices or buttons on other pages.** To hide prices from retail customers everywhere, use [Hide price](https://docs.processwholesale.com/storefront/hide-prices) (Professional). ## Limits and things to know - **Templates:** page, collection and product templates, including alternate templates such as `page.wholesale`. Not the home page, search, cart, blog or account templates. - **Plan:** Enterprise or Professional. The in-app FAQ calls it an Enterprise block; Professional includes it too. - **Dashboard card:** The **Lock content** card in **App Status** on the Process Wholesale Dashboard shows **ON** when the block is found in any page, collection or product template of your published theme. Its **Enable** link opens the theme editor, where you choose the template. - **Exact tag match:** In the default mode, tags such as `b2b-gold` or `B2Bnetterms` do not count unless the customer also has `B2B`. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | Approved wholesale customers are redirected | **Customer tags** is filled in and does not include `B2B`, the customer lacks the exact tag `B2B`, or the mode is **Hide from customers with specified tags** with **Customer tags** empty | Clear **Customer tags** or add `B2B` to it. In the "Hide from" mode, enter the tags to keep out. Check the customer's tags in Shopify admin. | | The page reloads over and over | **Redirect URL** is empty, or points to a page that uses a locked template | Enter a Redirect URL that uses an unlocked template, such as `/account/login`. | | No redirect in the theme editor | The block does not redirect in the theme editor | Test on the live storefront in a private window. | | Every product is locked, not only wholesale ones | The block is on the template all products use | Move the block to a separate template assigned only to the wholesale-only products. | | **Lock Content Redirect** is not under **Apps** | The store is not on Enterprise or Professional, or the template is not a page, collection or product template | Check the plan under **Plan** and the template type. | | Retail customers still see the product in a collection | The collection page is not locked | Lock the collection's template too, or remove the product from public collections. | ## Frequently asked questions ### Can I hide specific products from retail customers? Yes. Create a separate product template, add the Lock Content Redirect block to it, and assign that template only to the wholesale-only products. Visitors without access who open those product pages are sent to the Redirect URL. ### Who can open a page with the Lock Content Redirect block? In the default mode, only logged-in customers with the exact tag `B2B`, in any capitalization. With **Customer tags** filled in, the customers with one of those tags, or in the "Hide from" mode, everyone except them. ### Why are approved wholesale customers being redirected? Most often **Customer tags** is filled in without `B2B`, which makes the block ignore the `B2B` tag. Clear the field or add `B2B` to it. ### Why does the Lock Content Redirect block not redirect in the theme editor? The block skips the redirect in the theme editor so you can keep editing the template. It redirects on the live storefront. ### Can I lock pages for customers with a VIP tag instead of B2B? Yes. Choose **Show only for customers with specified tags** and enter `VIP` in **Customer tags**. Only logged-in customers tagged `VIP` can open the page. ## Related articles - [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices) - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference) - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing) --- Source: https://docs.processwholesale.com/checkout/minimum-order-amount Section: Checkout rules, payment and shipping Plans: Enterprise, Professional Last verified: 2026-11-11 # How to set a minimum order amount for wholesale customers Process Wholesale can stop a wholesale customer (B2B customer) from completing checkout until the order total reaches an amount you choose, such as $200. Turn it on in the Process Wholesale app under **Settings > Checkout rules > Minimum order amount**. The rule applies only to logged-in customers tagged `B2B`, it is checked against the cart total after discounts, and it needs the Enterprise or Professional plan. A minimum order amount is also called a minimum order value (MOV) or a minimum spend. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Process Wholesale > **Settings > Checkout rules > Minimum order amount** - **Applies to:** Logged-in customers with the `B2B` customer tag. Retail customers, guests and pending customers are never blocked. - **Checked:** In Shopify checkout, against the cart total after discounts - **Default:** Off ## Steps to set a minimum order amount 1. In Shopify admin, open the **Process Wholesale** app. 2. Select **Settings**, then select **Checkout rules** in the list on the left. 3. In the **Minimum order amount** card, check **Set a minimum order amount for B2B customers**. 4. In **Min. amount**, enter the minimum in your store currency. The field label shows the currency, for example **Min. amount (USD)**. The field starts at 100. Enter a number greater than 0. 5. Select **Save**. The minimum order amount is enforced as soon as it is saved. To turn it off, clear the checkbox and select **Save**. Video walkthrough: [How to set up a MOQ, minimum order amount, and hide payment methods](https://vimeo.com/1136273904) (4 minutes) shows these steps in the app. ## What wholesale customers see A wholesale customer whose order is under the minimum can still browse and add products to the cart. The message appears in Shopify checkout, not on the cart page. In checkout, the customer sees this error and cannot complete the order until the total reaches the minimum: > Minimum order amount for wholesale customers is: 200.00 USD The message shows the minimum with two decimals, followed by the code of the currency the customer is paying in. Process Wholesale shows the message in the language of the checkout when that language is German, Spanish, French, Italian, Norwegian, Portuguese (Brazil or Portugal) or Swedish. Every other language gets the English message. ## How the minimum order amount is checked Process Wholesale enforces the minimum order amount only when all of these are true: - The customer is logged in and has the customer tag `B2B`. - The store is on the Enterprise or Professional plan. - **Set a minimum order amount for B2B customers** is checked and the amount is greater than 0. - The customer is in checkout. The rule compares the minimum with the cart total **after discounts**. An order that is exactly equal to the minimum passes. **Example.** The minimum order amount is $500. A wholesale customer adds $600 of products and receives a 20% wholesale discount, so the total is $480. Checkout is blocked, because $480 is under $500. The customer has to add more products until the discounted total is at least $500. **Other currencies.** You enter the minimum in your store currency. When a customer pays in another currency, Process Wholesale converts the minimum at the exchange rate Shopify uses for that checkout. With a minimum of 200 and an exchange rate of 1.5, the customer has to reach 300.00 in their currency, and the message shows 300.00. ## Limits and things to know - **One amount for all wholesale customers.** Process Wholesale does not support a different minimum order amount for each customer, discount tag, product or market. - **No warning before checkout.** The cart page and cart drawer do not show the minimum. The customer finds out in checkout. - **Only customers tagged `B2B` are checked.** Pending customers tagged `B2B_Registeration`, customers without the tag and customers who check out without logging in are never blocked. - **The amount must be greater than 0.** With the box checked and an empty or 0 amount, no minimum is enforced. - **The rule needs the Enterprise or Professional plan.** On Starter the controls are disabled, and a minimum saved earlier is not enforced after a downgrade. The saved amount is kept. - **A quantity minimum is a separate rule.** To require a number of units instead of an amount, use a [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity). Both rules can be on together, and a customer who misses both sees both messages. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A customer under the minimum can check out | The customer is not logged in, or does not have the `B2B` tag | In Shopify admin, open the customer and confirm the tag `B2B`. Approve the customer in Process Wholesale under **Customers** if they are still pending. | | No customer is blocked | The store is not on Enterprise or Professional, the amount is empty or 0, or the change was not saved | Check the plan under **Plan**, enter an amount greater than 0 and select **Save**. | | The customer sees no message in the cart | The minimum order message appears only in checkout | No fix needed. Tell wholesale customers about the minimum on your wholesale page or in your approval email. | | The message shows a different number than the one entered | The customer is paying in another currency, and the minimum was converted | No fix needed. The converted amount is the same minimum in the customer's currency. | ## Frequently asked questions ### Is the minimum order amount checked before or after discounts? After discounts. Process Wholesale compares the minimum with the cart total that remains once wholesale discounts and any other discounts are applied. A $600 cart with a 20% discount counts as $480. ### Does the minimum order amount apply to retail customers? No. The minimum order amount applies only to logged-in customers who have the `B2B` customer tag. Retail customers and guests check out with no minimum. ### Can I set a different minimum order amount for each customer or product? No. Process Wholesale has one minimum order amount for all wholesale customers. For a per-product requirement, a [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) can apply to specific products. ### Where does the customer see the minimum order message? In Shopify checkout. The cart page does not show the message, so the customer sees it after starting checkout. ### Can I change the wording of the minimum order message? No. The wording of the minimum order message is fixed. Process Wholesale shows it in German, Spanish, French, Italian, Norwegian, Portuguese or Swedish when the checkout is in one of those languages, and in English otherwise. ## Related articles - [How to set a minimum order quantity for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-quantity) - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [Checkout and storefront messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) --- Source: https://docs.processwholesale.com/checkout/minimum-order-quantity Section: Checkout rules, payment and shipping Plans: Enterprise, Professional Last verified: 2026-11-11 # How to set a minimum order quantity for wholesale customers Process Wholesale can stop a wholesale customer (B2B customer) from completing checkout until the order contains enough units. You choose one quantity and apply it to the whole cart, to each of a set of products you select, or to every product in the cart. Turn it on in the Process Wholesale app under **Settings > Checkout rules > Minimum order quantity**. The rule applies only to logged-in customers tagged `B2B` and needs the Enterprise or Professional plan. A minimum order quantity is also called an MOQ or a minimum number of units. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Process Wholesale > **Settings > Checkout rules > Minimum order quantity** - **Applies to:** Logged-in customers with the `B2B` customer tag. Retail customers, guests and pending customers are never blocked. - **Apply to modes:** **Cart** (total units), **Specific products** (each selected product), **All products** (each product in the cart) - **Checked:** In Shopify checkout, not on the cart page - **Default:** Off ## Steps to set a minimum order quantity 1. In Shopify admin, open the **Process Wholesale** app. 2. Select **Settings**, then select **Checkout rules** in the list on the left. 3. In the **Minimum order quantity** card, check **Set a minimum order quantity for B2B customers**. 4. In **Min. order quantity**, enter a whole number greater than 0, for example `5`. 5. In **Apply to**, select **Cart**, **Specific products** or **All products**. If **Apply to** already shows the option you want, select a different option first and then the one you want. Selecting the option that is already showing does not register, and on a store that has never saved an **Apply to** value the list shows **Cart** although no value is saved. A rule saved without an **Apply to** value is not enforced. 6. If you selected **Specific products**, select **Select products**, choose the products in the Shopify product picker and confirm. The button then shows the count, for example **3 products selected**. 7. Select **Save**. The rule is enforced as soon as it is saved. To turn it off, clear the checkbox and select **Save**. If a value is missing, the page shows an **Errors** banner and does not save: - "• Minimum order quantity must be greater than 0" - "• Select at least one product when applying to specific products" Video walkthrough: [How to set up a MOQ, minimum order amount, and hide payment methods](https://vimeo.com/1136273904) (4 minutes) shows these settings in the app. ## What wholesale customers see A wholesale customer can add any quantity to the cart. The minimum order quantity message appears in Shopify checkout, not on the cart page, and the customer cannot complete the order until the rule is met. The message depends on the **Apply to** mode: | Apply to | Message (English) | | --- | --- | | **Cart** | Minimum order quantity for wholesale customers is: 5 | | **Specific products** | Mug: Minimum order quantity for the selected products is: 4 | | **All products** | Mug: Minimum order quantity for all products is: 2 | The number at the end is the minimum you entered. In the two product modes, the message starts with the product's title, and the customer sees one message for each product that is under the minimum. Process Wholesale shows the message in the language of the checkout when that language is German, Spanish, French, Italian, Norwegian, Portuguese (Brazil or Portugal) or Swedish. Every other language gets the English message. All translations are listed in the [checkout messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference). ## How the minimum order quantity is counted Process Wholesale enforces the minimum order quantity only when all of these are true: - The customer is logged in and has the customer tag `B2B`. - The store is on the Enterprise or Professional plan. - **Set a minimum order quantity for B2B customers** is checked, the quantity is greater than 0 and an **Apply to** option is saved. - The customer is in checkout. A quantity equal to the minimum passes. The three modes count differently. ### Cart: total units in the cart **Cart** adds up the quantity of every line in the cart and compares the total with the minimum. Different products count together. **Example.** The minimum is 5. The cart has 2 mugs and 2 caps, 4 units in total. Checkout is blocked with "Minimum order quantity for wholesale customers is: 5". Adding one more unit of anything passes. ### Specific products: each selected product on its own **Specific products** checks each product you selected, separately. All variants of one product are added together, so 2 small mugs and 1 large mug count as 3 mugs. A selected product that is not in the cart is ignored, and products you did not select are never counted. **Example.** The minimum is 4 and you selected Mug and Cap. The cart has the Mug in two lines (2 + 1 = 3 units) and no Cap. Checkout is blocked with "Mug: Minimum order quantity for the selected products is: 4". The Cap is not in the cart, so it gives no message. ### All products: every product in the cart on its own **All products** checks every product in the cart, separately, with the same minimum. Variants of one product are added together. **Example.** The minimum is 2. The cart has 1 Mug and 2 Caps. Checkout is blocked with "Mug: Minimum order quantity for all products is: 2". The Cap meets the minimum and gives no message. ## Limits and things to know > **Important:** On a store that has never saved an **Apply to** value, the list shows **Cart** although nothing is saved, and a rule saved that way is not enforced at all. Selecting the option that is already showing does not register: select a different option first, then the one you want, and then select **Save**. - **One quantity for all selected products.** Every product the rule covers has the same minimum. Process Wholesale does not support a different minimum for each product, customer, discount tag or market. - **Nothing per variant.** The product picker selects whole products, and variants of a product are always counted together. - **No increments, case packs or multiples.** The rule checks a minimum only. It cannot require units in multiples of 6, for example. - **No maximum.** Process Wholesale does not limit how many units a customer can order. - **No warning before checkout.** The cart page and cart drawer do not show the minimum. - **Only customers tagged `B2B` are checked.** Pending customers tagged `B2B_Registeration`, customers without the tag and customers who check out without logging in are never blocked. - **The rule needs the Enterprise or Professional plan.** On Starter the controls are disabled, and a minimum saved earlier is not enforced after a downgrade. - **An amount minimum is a separate rule.** To require a spend instead of a number of units, use a [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount). Both rules can be on together, and a customer who misses both sees both messages. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | No wholesale customer is ever blocked | No **Apply to** option was saved | Select a different **Apply to** option, then the one you want, and select **Save**. | | A customer under the minimum can check out | The customer is not logged in, or does not have the `B2B` tag | In Shopify admin, open the customer and confirm the tag `B2B`. Approve pending customers in Process Wholesale under **Customers**. | | A selected product is not checked | The product is not in the cart, or **Apply to** is not **Specific products** | No fix needed when the product is not in the cart. Otherwise confirm the mode and the selected products, then select **Save**. | | Two variants were counted as one product | Variants of the same product are added together | No fix needed. Process Wholesale counts per product, not per variant. | | The page does not save and shows **Errors** | The quantity is empty or 0, or no products are selected for **Specific products** | Enter a quantity greater than 0, or select at least one product. | | The controls are greyed out | The store is not on Enterprise or Professional | Upgrade under **Plan**, or select **Upgrade to Enterprise** in the card. | ## Frequently asked questions ### Are variants of the same product counted together? Yes. In the **Specific products** and **All products** modes, Process Wholesale adds up the quantities of all variants of a product. 2 small and 1 large of the same mug count as 3 units of that mug. ### What happens if a selected product is not in the cart? Nothing. With **Specific products**, Process Wholesale checks only the selected products that are in the cart. A customer who does not buy a selected product is not asked to buy the minimum of it. ### Can I set a different minimum for each product or variant? No. Process Wholesale has one minimum order quantity, applied to the cart, to the selected products or to every product. It has no per-variant or per-product minimum. ### Can I require case packs or multiples of a quantity? No. The minimum order quantity checks only that a quantity is reached. It does not check increments, multiples or case packs, and it does not set a maximum. ### Where does the customer see the minimum order quantity message? In Shopify checkout. The cart page does not show the message, so tell wholesale customers about the minimum on your wholesale page or in your approval email. ### Does the minimum order quantity apply to retail customers? No. The rule applies only to logged-in customers with the `B2B` customer tag. Retail customers, guests and pending customers check out with no minimum. ## Related articles - [How to set a minimum order amount for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-amount) - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [Checkout and storefront messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/checkout/net-payment-terms Section: Checkout rules, payment and shipping Plans: Enterprise, Professional Last verified: 2026-11-11 # How to offer net payment terms to wholesale customers Process Wholesale lets wholesale customers (B2B customers) check out now and pay later with a payment term such as Net 30. You turn it on under **Settings > Net terms**, choose up to three terms, and the customer picks one on the Quick Buy order details page. Choosing a term creates a Shopify draft order with those payment terms. Net payment terms need the Enterprise or Professional plan and work only through the [Quick Buy order form](https://docs.processwholesale.com/storefront/quick-buy-ordering). Net terms are also called deferred payment, pay-later terms or invoice terms. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Process Wholesale > **Settings > Net terms > Net payment terms** - **Applies to:** Logged-in customers tagged `B2B` who order through Quick Buy. Optionally, only customers who also have the tag `B2Bnetterms`. - **Terms available:** Due on Receipt, Due on Fulfillment, Net 7, Net 15, Net 30, Net 45, Net 60, Net 90. Up to 3 at a time. - **Default:** Off. When first turned on, Net 15, Net 30 and Net 90 are selected. - **Where customers choose:** The Quick Buy order details page only, never on product pages or in the Shopify cart ## Before you start - Add the Quick Buy block to your theme. Net terms appear nowhere else. See [how to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). - Quick Buy is shown only to logged-in customers with the `B2B` tag. ## Steps to turn on net payment terms 1. In Shopify admin, open the **Process Wholesale** app. 2. Select **Settings**, then select **Net terms** in the list on the left. 3. Check **Enable net payment terms in the Quick buy table.** 4. Under **Select payment terms (maximum 3):**, open the list and select up to three terms. Remove a term from the selection to make room for another. A fourth term cannot be added. 5. Optional: check **Force Payment Terms** to require a term on every Quick Buy order. 6. Optional: check **Allow net terms for specific customers only** to offer terms only to customers you choose. See [how to offer net terms to specific customers only](#how-to-offer-net-terms-to-specific-customers-only). 7. Select **Save**. Video walkthrough: [How to enable net payment terms](https://vimeo.com/1106922278) (3 minutes) shows how to set up net payment terms. ## How to offer net terms to specific customers only With **Allow net terms for specific customers only** checked, only wholesale customers who also have the customer tag `B2Bnetterms` see payment terms in Quick Buy. You give customers the tag with the **Select Customers** picker or in Shopify admin. When you select **Save** in the picker, Process Wholesale adds `B2Bnetterms` to every customer selected in the picker and removes it from every other wholesale customer, straight away. Customers who already have the tag (spelled exactly `B2Bnetterms`) are selected automatically, but only on the pages of the list that you open, and they are selected again each time their page loads. Follow these steps so no customer loses net terms by accident: 1. Under **Settings > Net terms**, check **Allow net terms for specific customers only**, then select **Save** in the save bar to store the setting. 2. Select **Select Customers**. The **Select customers for Net Terms** window lists customers with the `B2B` tag, 20 per page, with **Name** and **Email**. 3. Open every page of the list with **Next** before you change anything, so that every customer who already has `B2Bnetterms` is loaded and stays selected. 4. Check or clear customers one by one. Use the **Search customers...** box to find a customer. A customer you clear is selected again if you reopen their page or search for them before saving, so check your clears last. 5. Do not use **Select all** when your selection spans more than one page. **Select all** works on the page you are looking at: it replaces the selection you made on other pages with the customers on this page, and when it is already checked, clearing it clears the whole selection. The label shows how many customers are selected in total and how many are on the page, for example **Select all (12 of 20 selected)**. 6. Select **Save** in the window. A message confirms the change, for example "Customer net terms updated: 3 added, 1 removed". **Cancel** closes the window without changing tags, but your checks and clears stay in the picker until you reload the Settings page. To start over, reload the page. > **Tip:** For a single customer, edit the tag in Shopify admin instead: open the customer and add or remove the tag `B2Bnetterms`, spelled exactly that way. This changes only that customer. The picker saves tags as soon as you select **Save** in the window. The **Allow net terms for specific customers only** checkbox is saved separately, with the page's save bar. ## What wholesale customers see On the Quick Buy form, the customer selects **View Order** to open the **Order details** page. When net terms are on, that page shows a **Payment terms** row with one button for each term you offered, such as **Net 30**. An information icon explains: "When checking out with payment terms, you will be able to complete your order now and pay within the selected time frame. If you would like to pay for your order now, do not select any payment terms, and click 'add to cart' to add all of your items to the cart and checkout normally." - Selecting a term highlights it. Only one term can be active, and selecting it again clears it. - With a term selected, an **Order note** box appears ("Do you want to add any note to your order?") and the button at the bottom reads **Checkout**. - With no term selected, the button reads **Add to cart** and the order goes to the normal Shopify cart, where the customer pays at checkout as usual. When the customer selects **Checkout** with a term, Process Wholesale creates a draft order in your store and sends the customer to that draft order's invoice page, where they complete the order. If the draft order cannot be created, the customer is taken to their account page and the saved Quick Buy order is cleared. ## What is created in Shopify A Quick Buy checkout with a payment term creates a **draft order** in Shopify admin with: - The products and quantities from the Quick Buy order - The payment terms the customer chose - The customer's email address and their order note - The tag `processwholesale` and the additional detail **Added Via: processwholesale** Automatic discounts are accepted on the draft order. Process Wholesale does not email you about a new net terms order, so check draft orders in Shopify admin. ## How to collect payment After the customer checks out with a net term, the order is created in your store with the payment due date set to the term the customer selected. To collect payment, send the customer an invoice from the order in Shopify admin. If you collect payment outside Shopify, mark the order as paid in Shopify when the payment arrives. Process Wholesale does not send payment reminders or mark orders as paid. ## How Force Payment Terms works With **Force Payment Terms** checked, the checkout button on the Quick Buy order details page is hidden until the customer selects a term, and the page shows "Please select a payment term to proceed with your order." Customers then cannot send a Quick Buy order to the normal cart and pay at checkout. The setting's help text names the "Add to Order" button. The button that is hidden is the checkout button at the bottom of the order details page, the one labeled **Add to cart** or **Checkout**. > **Important:** Do not turn on **Force Payment Terms** and **Allow net terms for specific customers only** together. A wholesale customer without the `B2Bnetterms` tag then sees no payment terms and no checkout button, and cannot check out from Quick Buy. The app shows this warning when both are on: "We do not recommend enabling both "force payment terms" and "allow net terms for specific customers" simultaneously, this could lead to some customers being unable to check out. Please disable one." ## Limits and things to know - **Quick Buy only.** Process Wholesale offers payment terms only on the Quick Buy order details page, not on product pages or in the cart. - **Three terms at a time.** You can offer at most three of the eight terms. - **No other order fields.** The order note is the only extra field, and it is sent only with a payment term. There is no PO number or delivery date field. - **One term per order.** The customer chooses one term for the whole order. - **The tag must be `B2Bnetterms`.** Customers who should see terms when **Allow net terms for specific customers only** is on need this tag in addition to `B2B`. - **The plan is Enterprise or Professional.** On Starter the controls are disabled and show **Upgrade to Enterprise**. The in-app text names Enterprise; Professional includes net terms too. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | No payment terms on the order details page | Net terms are off, the customer is not tagged `B2B`, or the customer lacks `B2Bnetterms` while specific-customers mode is on | Check the settings and save. Add the missing tag to the customer. | | Customer sees terms only on the order details page | Terms appear only there | No fix needed. The customer selects **View Order** on Quick Buy to reach them. | | A customer cannot check out from Quick Buy | **Force Payment Terms** and **Allow net terms for specific customers only** are both on, and the customer lacks `B2Bnetterms` | Turn one of the two settings off, or add `B2Bnetterms` to the customer. | | Customers lost net terms after using the picker | Saving the picker removes `B2Bnetterms` from every wholesale customer not selected | Re-add the tag in the picker after opening every page, or in Shopify admin. | | A fourth term cannot be added | The limit is three terms | Remove one term, then add the other. | | You were not told about a net terms order | Process Wholesale sends no notification | Check draft orders tagged `processwholesale` in Shopify admin. | ## Frequently asked questions ### Where does a wholesale customer choose a payment term? On the Quick Buy order details page, reached with **View Order**. Process Wholesale does not offer payment terms on product pages or in the Shopify cart. ### Which payment terms can I offer? Due on Receipt, Due on Fulfillment, Net 7, Net 15, Net 30, Net 45, Net 60 and Net 90. You can offer up to three of them at the same time. ### What happens when a customer checks out with net terms? Process Wholesale creates a Shopify draft order with the chosen payment terms and sends the customer to its invoice page to complete the order. The order then has a payment due date matching the term. ### How do I collect payment for a net terms order? Send the customer an invoice from the order in Shopify admin, or mark the order as paid in Shopify when you receive payment outside Shopify. ### Can I offer net terms to only some wholesale customers? Yes. Check **Allow net terms for specific customers only** and give those customers the `B2Bnetterms` tag, with **Select Customers** or in Shopify admin. ### Can a customer still pay at checkout when net terms are on? Yes, unless **Force Payment Terms** is on. With no term selected, **Add to cart** sends the order to the Shopify cart and the customer pays at checkout as usual. ## Related articles - [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering) - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) --- Source: https://docs.processwholesale.com/checkout/hide-payment-methods Section: Checkout rules, payment and shipping Plans: Enterprise, Professional Last verified: 2026-11-11 # How to hide payment methods from wholesale customers Process Wholesale can hide specific payment methods from wholesale customers (B2B customers) at checkout, for example a cash on delivery option you do not want to offer on large orders. You type the name of each payment method in the Process Wholesale app under **Settings > Checkout rules > Hide payment methods**. The name must match the payment method's name at checkout exactly, including capitalization. The rule applies only to logged-in customers tagged `B2B` and needs the Enterprise or Professional plan. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Process Wholesale > **Settings > Checkout rules > Hide payment methods** - **Applies to:** Logged-in customers with the `B2B` customer tag. Retail customers, guests and pending customers see every payment method. - **Matching:** Exact name, case-sensitive - **Default:** Off, no names ## Steps to hide payment methods 1. Start a test checkout on your store and write down the payment method's name exactly as checkout shows it, including capital letters, spaces and punctuation. 2. In Shopify admin, open the **Process Wholesale** app. 3. Select **Settings**, then select **Checkout rules** in the list on the left. 4. In the **Hide payment methods** card, check **Hide specific payment methods from B2B customers**. 5. Click in the field "Enter payment methods name then press 'enter' (must be exact)", type the name and press Enter. The name appears below the field as a tag. There is no add button: Enter adds the name. 6. Repeat for each payment method to hide. 7. Select **Save**. To remove a name, select the **x** on its tag and select **Save**. To stop hiding all methods, clear the checkbox and select **Save**; the names stay in the list for later. Video walkthrough: [How to set up a MOQ, minimum order amount, and hide payment methods](https://vimeo.com/1136273904) (4 minutes) shows these settings in the app. ## What wholesale customers see A logged-in wholesale customer does not see the hidden payment methods in Shopify checkout. No message is shown; the method is not in the list. Every other payment method stays available. Customers who are not tagged `B2B` see all payment methods as usual. ## How names are matched Process Wholesale hides a payment method when its name at checkout is identical to a name in your list. Spaces at the start and end of what you type are removed. Everything else must match. The payment method names in the table and the example are illustrations only. Your checkout may name its methods differently: always copy the name exactly as your own checkout shows it. | Name in your list | Payment method at checkout | Hidden for wholesale customers? | | --- | --- | --- | | `Cash on Delivery (COD)` | Cash on Delivery (COD) | Yes | | `cash on delivery (cod)` | Cash on Delivery (COD) | No, capitalization differs | | `Cash on Delivery` | Cash on Delivery (COD) | No, the name is incomplete | | `Bank Deposit` | Bank Deposit | Yes | **Example.** Suppose your checkout shows methods named "Cash on Delivery (COD)" and "Bank Deposit", and your list is `Cash on Delivery (COD)` and `Bank Deposit`. A wholesale customer sees every payment method except those two. A retail customer sees all of them. ## How to test the setting 1. Save the setting. 2. Log in on the storefront as a customer with the `B2B` tag, add a product and go to checkout. The listed methods should be missing. 3. Log out, or log in as a customer without the tag, and repeat. All methods should appear. If a method still shows for the wholesale customer, compare its name at checkout with your entry character by character. ## Limits and things to know - **Hide only.** The setting hides methods from wholesale customers. It cannot show a payment method only to wholesale customers or hide one from retail customers. - **Exact names.** Partial names and different capitalization do not match. - **Only customers tagged `B2B`.** Pending customers tagged `B2B_Registeration`, guests and retail customers are not affected. - **No duplicate check.** The field accepts the same name twice. Remove duplicates with the **x** on the tag. - **The plan is Enterprise or Professional.** On Starter the controls are disabled and show **Upgrade to Enterprise**. - **Payment terms are separate.** To let wholesale customers pay later, use [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) in Quick Buy. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The method still shows for a wholesale customer | The name does not match exactly | Copy the name from checkout, including capitalization, add it again and select **Save**. | | The method still shows for a wholesale customer | The customer is not logged in or lacks the `B2B` tag | Log in as a customer with the `B2B` tag and test again. | | The method still shows for everyone | **Hide specific payment methods from B2B customers** is not checked, or the change was not saved | Check the box and select **Save**. | | A method is missing for a wholesale customer that should see it | Its name is in the list | Remove the name with the **x** and select **Save**. | | The field is greyed out | The checkbox is off, or the plan is not Enterprise or Professional | Check the box, or upgrade under **Plan**. | ## Frequently asked questions ### Is the payment method name case sensitive? Yes. For example, `cash on delivery (cod)` does not hide a method named "Cash on Delivery (COD)". Type the name exactly as your own checkout shows it. ### Does hiding a payment method affect retail customers? No. Process Wholesale hides the listed methods only for logged-in customers with the `B2B` tag. Retail customers and guests see every method. ### Can I show a payment method only to wholesale customers? No. The setting only hides methods from wholesale customers. It has no option to hide a method from retail customers. ### How do I find the exact name of a payment method? Start a test checkout on your store and read the name in the payment section, then type it exactly into the field and press Enter. ## Related articles - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) --- Source: https://docs.processwholesale.com/checkout/wholesale-shipping Section: Checkout rules, payment and shipping Plans: Enterprise, Professional Last verified: 2026-11-11 # How to show shipping methods only to wholesale customers Process Wholesale can give wholesale customers (B2B customers) their own shipping options. On the **Shipping** page of the app you select shipping rates, local pickup locations and local delivery. At checkout, logged-in customers tagged `B2B` see only the options you selected, and every other customer sees every option except those. Process Wholesale does not create rates or change their prices: it shows and hides the rates you already have in Shopify. The Shipping page needs the Enterprise or Professional plan. **At a glance** - **Plan:** Enterprise or Professional - **Where:** Process Wholesale > **Shipping** - **Wholesale customers** (logged in, tagged `B2B`): see only the selected options - **Everyone else** (retail customers, guests, pending customers): see every option except the selected ones - **Matching:** Exact names with **Select from existing shipping methods**, "contains" with **Manual entry** - **Default:** Off ## How wholesale shipping works The Shipping page divides your existing shipping options into two groups. - **Selected options are wholesale options.** They are shown to wholesale customers and hidden from everyone else. - **Unselected options are retail options.** They are shown to everyone else and hidden from wholesale customers. Process Wholesale only shows and hides options that Shopify returns at checkout. It never creates a rate and never changes a rate's price. > **Important:** If none of the selected options is available for a wholesale customer's address, that customer gets no shipping options at all. The same applies to retail customers: if every option for an address is selected as wholesale, retail customers there get no shipping options. Make sure every shipping zone or market you sell to has at least one selected option and at least one unselected option, unless you sell there to only one group. ## Steps to set up wholesale shipping 1. In Shopify admin, open the **Process Wholesale** app and select **Shipping**. 2. Check **Enable shipping methods**. 3. Under **Shipping rate configuration**, choose **Select from existing shipping methods** or **Manual entry (recommended for stores with many rates)**. 4. Choose the wholesale options, as described in the sections that follow. 5. Select **Save** in the save bar. The message "Settings updated" confirms it. To stop filtering shipping, clear **Enable shipping methods** and select **Save**. Every customer then sees every option. Your selections are kept. Video walkthrough: the Shipping page links to a [shipping demo video](https://vimeo.com/841684352) (4 minutes) that shows how to choose wholesale shipping options. ## How to select existing shipping methods With **Select from existing shipping methods** ("Choose from your Shopify shipping methods, pickup locations and local delivery"), the page lists your options in four tabs. | Tab | What it lists | | --- | --- | | **General Shipping Methods** (or **Markets**) | Rates in your general shipping profile, one table per zone, or one table per market on stores that use Shopify's market-based shipping | | **Custom Shipping Methods** (or **Additional shipping methods**) | Rates in your other shipping profiles; on stores that use market-based shipping, rates from all your shipping profiles | | **Local Pickup** | The table **Local pickup locations**: every location with local pickup turned on | | **Local Delivery** | One checkbox, **Local delivery** | Each shipping table is headed " shipping options" and lists one row per rate name. Select the rows to mark them as wholesale, or use the table's select-all box. - **Names, not rows.** A selection is stored by name. Selecting "Wholesale Freight" in one zone selects every rate named "Wholesale Freight" in every zone and market, on both shipping rate tabs. Pickup locations are a separate list. - **Exact matching.** At checkout, a shipping rate counts as wholesale when its name is exactly a selected name, including capitalization. Pickup locations match the same way against the locations you select in **Local Pickup**. - **Local pickup per location.** Select each location wholesale customers may pick up from. Pickup locations you do not select are hidden from wholesale customers and shown to everyone else. - **Local delivery is one switch.** Shopify does not share individual local delivery settings with apps, so **Local delivery** covers every local delivery option at checkout: when checked, wholesale customers can use local delivery and other customers cannot. When unchecked, other customers can use it and wholesale customers cannot. On stores that use market-based shipping, the tabs are named **Markets** and **Additional shipping methods**. A market whose carrier can return more rates than the list shows has the note "This carrier can return additional rates at checkout. To match a rate that is not listed, use manual entry with its checkout name." ## How to enter shipping names manually **Manual entry (recommended for stores with many rates)** matches rates by part of their name instead of a list. It suits stores with many zones or carrier rates that are not listed. 1. Select **Manual entry (recommended for stores with many rates)**. 2. In **Shipping method name**, type a name or part of one, for example `Ground Advantage`, and select **Add** or press Enter. 3. Repeat for each name. The list is headed **Active wholesale shipping methods** with the count. 4. Select **Save**. Manual entry uses "contains" matching and ignores capitalization: an option is wholesale when its name contains any entered name. `Ground Advantage` matches "USPS Ground Advantage". Manual entry covers shipping rates, pickup locations and local delivery together, so enter pickup location names and "local delivery" the same way. An empty manual list hides every option from wholesale customers. > **Note:** Short words match widely. Entering `Ground` makes every option whose name contains "ground" a wholesale option, hidden from retail customers. ## What your customers see **Example.** Checkout offers Standard, Wholesale Freight, pickup at Downtown Store, pickup at Warehouse, and Local delivery. You selected Wholesale Freight, the Downtown Store pickup location and **Local delivery**. | Customer | Sees at checkout | | --- | --- | | Wholesale customer (logged in, tagged `B2B`) | Wholesale Freight, Downtown Store pickup, Local delivery | | Retail customer, guest or pending customer | Standard, Warehouse pickup | With **Local delivery** unchecked, the retail customer also sees Local delivery and the wholesale customer does not. **Manual example.** The list is `wholesale`, `Downtown`, `local delivery`. A wholesale customer sees Wholesale Freight, Downtown Store pickup and Local delivery. A retail customer sees Standard and Warehouse pickup. Customers see no message about the filtering; options are present or missing. ## How to give wholesale customers free shipping Process Wholesale has no free shipping feature and does not change shipping prices. To offer free wholesale shipping: 1. In Shopify admin, create a shipping rate with a price of 0 in each zone or market you sell to, with a clear name such as "Wholesale Free Shipping". 2. On the Process Wholesale **Shipping** page, select that rate (or enter its name in manual entry) and select **Save**. Wholesale customers then see the free rate, and retail customers do not. Add any other rates wholesale customers may use, such as an express option, the same way. ## Messages on the Shipping page | Message | Meaning and what to do | | --- | --- | | "Shipping settings could not be loaded. Please retry before making changes." | Select **Retry**. Saving is blocked until the settings load. | | "Shipping methods could not be loaded. Reopen the app to refresh its permissions, then reload this page. Your saved selections are preserved." | Close and reopen Process Wholesale, then reload the page. The shipping tables stay empty until then. | | "Pickup locations could not be loaded. Reopen the app to refresh its permissions, then reload this page. Your saved pickup selections are preserved." | Same fix as above, for pickup locations. | | "No locations with local pickup enabled were found. Enable local pickup on a location in Shopify, then reload this page." | Turn on local pickup for a location in Shopify, then reload. | | "No shipping methods were found." | The table has no rates. Check your shipping settings in Shopify. | | "Shipping feature is available on the Enterprise plan only." | The store is not on Enterprise or Professional. Select **Upgrade to Enterprise**; Professional also includes the Shipping page. | ## Limits and things to know - **Renamed rates stop matching.** Selections are names. After you rename a rate in Shopify, select it again on the Shipping page (or update the manual entry) and select **Save**. - **One list for all zones and markets.** A selected name is wholesale wherever a rate with that name appears. - **Only customers tagged `B2B` count as wholesale.** Pending customers tagged `B2B_Registeration`, guests and customers who are not logged in see the retail options. - **No price changes.** Process Wholesale cannot discount or reprice a rate. - **Unlisted carrier rates.** Rates a carrier returns only at checkout are not in the tables. Use manual entry with the rate's checkout name. - **The plan is Enterprise or Professional.** ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | Wholesale customers see no shipping options | No selected option exists for their address, or the manual list is empty | Select at least one rate for every zone or market, or add names to manual entry. | | Wholesale customers do not see pickup or local delivery | Pickup locations and **Local delivery** are selected separately | Select the locations in **Local Pickup** and check **Local delivery**, then save. | | A rate disappeared for retail customers | It is selected as wholesale, or its name contains an entered manual name | Clear the selection or use a more specific manual name, then save. | | A rate stopped appearing for wholesale customers | The rate was renamed in Shopify | Select the new name and save. | | Retail customers see the wholesale rate | The customer is tagged `B2B`, or **Enable shipping methods** is off | Check the customer's tags and the checkbox. | | The shipping tables are empty | The app could not read shipping methods | Reopen the app and reload the page. | ## Frequently asked questions ### Can I give wholesale customers free shipping? Yes, with a free rate you create in Shopify. Process Wholesale has no free shipping setting; create a rate priced at 0 in Shopify, then select it on the Shipping page so only wholesale customers see it. ### Why do wholesale customers see no shipping options? Because no option selected on the Shipping page is available for their address. Wholesale customers see only selected options, so every zone or market they ship to needs at least one. ### What is the difference between selecting methods and manual entry? **Select from existing shipping methods** matches the exact names you pick from your Shopify rates. **Manual entry** matches any option whose name contains a word you type, ignoring capitalization, which suits stores with many rates. ### Does Process Wholesale change shipping prices? No. Process Wholesale only shows or hides existing Shopify shipping options for wholesale and retail customers. Prices come from your Shopify shipping settings. ### What happens when I rename a shipping rate? The renamed rate no longer matches your selection. Select it again on the Shipping page and save. ## Related articles - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/checkout/cart-and-checkout-experience Section: Checkout rules, payment and shipping Plans: All plans Last verified: 2026-11-11 # What wholesale customers see in the cart and at checkout With Process Wholesale, a wholesale customer (B2B customer) shops in your normal Shopify store and checks out in normal Shopify checkout. What changes is applied at checkout to customers who are logged in and tagged `B2B`: wholesale discounts labeled with "PW", and the checkout rules you turned on, such as minimum orders, hidden payment methods, wholesale-only shipping options and tax exemption. Pending customers, guests and retail customers check out at regular prices, and none of those rules apply to them except that wholesale-only shipping options are hidden from them. Discounts work on every plan and tax exemption needs no particular plan; minimums, hidden payment methods and wholesale shipping need Enterprise or Professional. **At a glance** - **Who counts as wholesale at checkout:** A logged-in customer with the tag `B2B`, in any capitalization (`B2B`, `b2b`, `B2b`, `b2B`) - **Wholesale prices:** Applied as Shopify automatic discounts named "PW: ..." or "PW : ..." - **Minimum order messages:** In checkout only, never on the cart page - **Payment methods, shipping options:** Filtered in checkout for wholesale customers - **Net terms:** Only through the Quick Buy order form - **Plans:** Discounts on all plans (price lists and cost plus markup on Professional); minimums, hidden payment methods, wholesale shipping and net terms on Enterprise or Professional ## Who gets the wholesale checkout Every checkout feature of Process Wholesale checks one thing first: is the customer logged in, and do they have the customer tag `B2B`? A customer who checks out as a guest, even with a wholesale email address, gets the retail checkout. Ask wholesale customers to log in before they add products to the cart. To receive a specific discount, the customer also needs that discount's tag. See [how to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ## Where wholesale prices appear - **Product pages.** The [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) shows wholesale prices and tiers on the product page. - **Quick Buy.** The [Quick Buy order form](https://docs.processwholesale.com/storefront/quick-buy-ordering) shows wholesale prices in its table and order summary. - **Cart and checkout.** Process Wholesale gives the price reduction as Shopify automatic discounts. Orders sent from Quick Buy to the cart are priced the same way. ## Discount labels the customer sees Each wholesale discount carries a label that starts with "PW" followed by the discount tag name: | Discount | Label | Applied to | | --- | --- | --- | | Flat discounts, quantity tiers, cart value tiers, loyalty tiers | `PW: `, for example `PW: cartvalue1324 & prodqtyall` | The order, as one discount combining every applied tag | | Cart quantity tiers | `PW: ` | The order, for the eligible products | | Price lists | `PW : `, for example `PW : wholesale` | Each product line on the price list | | Cost plus markup | `PW : ` | Each eligible product line | For price lists, Process Wholesale's own help text says the name "will be visible as discount in the cart & checkout under the line item". In the combined label, a cart value tier's tag comes first and the tags are joined with " & ". When a loyalty discount applies without a cart value tier, its tag follows the other tag names with no separator, for example `PW: wholesale10loyaltytag`. **Example.** A customer with a price list `wholesale` buys 3 units of a $20.00 product whose list price is $12.50. The line shows a `PW : wholesale` discount of $7.50 per unit, $22.50 in total, and the customer pays $12.50 per unit. The discount types are explained in [wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types), and which one applies in [discount priority and stacking](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ## Minimum order messages A [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) or [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) never stops a customer from adding products to the cart. The message appears in Shopify checkout, and the customer cannot complete the order until the minimum is met, for example "Minimum order amount for wholesale customers is: 200.00 USD". Every message is listed in the [checkout messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference). ## Payment methods With [hidden payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods) set up, a wholesale customer does not see the payment methods you listed. No message explains it; the methods are not in the list. Other customers see every method. ## Shipping options With [wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping) turned on, a wholesale customer sees only the shipping rates, pickup locations and local delivery you selected, and everyone else sees all the other options. If no selected option exists for the address, the wholesale customer gets no shipping options. ## Net payment terms Wholesale customers choose [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) such as Net 30 only on the Quick Buy order details page. Choosing a term sends them to a Shopify draft order invoice page instead of the cart. Process Wholesale does not offer payment terms in the cart or in ordinary checkout. ## Tax exemption With [tax exemption for wholesale customers](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers) turned on, Process Wholesale marks wholesale customers as tax exempt in Shopify, the setting the app describes as "dont collect tax". **Accept B2B**, **Reject B2B**, **Return to pending**, **Remove B2B access** and **Manage discount tags** on the **Customers** page set that customer's tax-exempt status to match the setting, and changing the setting updates your existing wholesale customers when you save. ## Pending and approved customers compared A pending customer has applied for wholesale and has the tag `B2B_Registeration` (spelled this way). An approved customer has the tag `B2B`. | Point in the journey | Pending customer (`B2B_Registeration`) | Approved customer (`B2B`) | | --- | --- | --- | | Product Wholesale block | Shown, because the block accepts any tag containing "b2b" | Shown | | Quick Buy order form | Not available | Available on Enterprise and Professional | | Wholesale discounts in cart and checkout | None, regular prices | Applied for the customer's discount tags | | Minimum order amount and quantity | Not checked | Checked in checkout | | Hidden payment methods | Sees every method | Listed methods hidden | | Shipping options | Sees the retail options | Sees the wholesale options | | Net payment terms | Not offered | Offered in Quick Buy when turned on | | Tax exemption | Not changed by applying | Set to match the tax exemption setting on approval | Because the Product Wholesale block accepts the pending tag, approve or reject applications promptly so pending customers are not surprised by regular prices at checkout. See [how to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ## Frequently asked questions ### What does the PW label on a discount mean? "PW" marks a discount from Process Wholesale. The text after it is the discount tag, for example `PW: wholesale15` for a flat discount or `PW : wholesale` for a price list. ### Do pending wholesale customers get wholesale prices at checkout? No. Checkout discounts and checkout rules apply only to customers with the `B2B` tag. Pending customers tagged `B2B_Registeration` pay regular prices until you approve them. ### Does the wholesale customer need to log in? Yes. Process Wholesale recognizes a wholesale customer by the tags on their customer account, so a guest checkout always gets retail prices and retail rules. ### Where do minimum order messages appear? In Shopify checkout. The cart page does not show minimum order amount or minimum order quantity messages. ### Can wholesale customers choose net terms at regular checkout? No. Net payment terms are offered only on the Quick Buy order details page. ## Related articles - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [Checkout and storefront messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) --- Source: https://docs.processwholesale.com/analytics/wholesale-analytics Section: Orders and analytics Plans: All plans Last verified: 2026-11-11 # Wholesale analytics: metrics, definitions and export The Process Wholesale **Analytics** page reports on your wholesale orders: revenue, number of orders, average order value (AOV), items per order, your top wholesale customers and your top products. Open it from **Analytics** in the Process Wholesale app menu. The **Overview** tab shows real data on every plan for the last 30 days. Real data on the **Customers** and **Products** tabs, the other time ranges and the CSV export need the Professional plan. Every figure counts only [wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders): orders that received a Process Wholesale discount. **At a glance** - **Where:** Process Wholesale > **Analytics** (subtitle "Insights for B2B revenue, customers, & products") - **Tabs:** **Overview**, **Customers**, **Products** - **Counts:** Wholesale orders only, from install onward, with refunds and cancellations not subtracted - **Currency:** Your store currency (the **Overview** tab always shows a `$` sign) - **Plan:** **Overview** on all plans; full analytics on Professional ## Plan differences | Part of the page | Starter, Enterprise | Professional | | --- | --- | --- | | **Overview** tab | Real data, **Last 30 days** only | Real data, all time ranges | | Time range button | Locked at **Last 30 days**. Hovering shows "Upgrade to Professional for custom timeframes". | All five ranges | | **Customers** tab | Sample data with the notice "This is sample data. Upgrade to Professional for real customer insights." | Real data | | **Products** tab | Sample data with the notice "This is sample data. Upgrade to Professional for real product insights." | Real data | | **Export** button | Locked. Hovering shows "Upgrade to Professional to export data". | CSV download | | **At-risk customers** card and **Take action** link | Sample value, no link | Real value with **Take action** | The sample data is fixed and the same for every store. The **Customers** tab sample shows the cards 47, 68%, 23 and 5 and the customers "Acme Corp", "Global Trades" and "Summit Retail". The **Products** tab sample shows the cards 142, 18 and 24 and the products "Premium Widget", "Deluxe Gadget" and "Standard Tool". None of these values come from your store. Enterprise is not enough for real data on these tabs; it needs Professional. Current plan prices are on the plan page that opens from **Plan** in the app. See [Process Wholesale plans](https://docs.processwholesale.com/account/plans-and-pricing). ## Time ranges The time range button sits at the top of the page and starts at **Last 30 days** each time you open the page. One range applies to all three tabs. Each range is counted back from the moment you load the page, using the date Process Wholesale recorded each order. | Range | Orders included | Chart points on **Overview** | | --- | --- | --- | | **Last 7 days** | Recorded in the 7 days up to now | One per day, 8 points (the start day through today) | | **Last 30 days** | Recorded in the 30 days up to now | One per day, 31 points | | **Last 90 days** | Recorded in the 90 days up to now | One per 7-day group, labeled with the group's first day | | **This year** | Recorded in the last 12 months up to today. This is a rolling 12 months, not the calendar year. | One per calendar month, labeled like "Mar 2026" | | **All time** | Every recorded wholesale order | One per calendar month, from the month of the first order | Daily chart points use UTC days, so an order placed late in the evening in a time zone behind UTC appears on the next day's point. ## Overview tab metrics The **Overview** tab has four chart cards. Each shows a headline number for the whole range and a chart over the range. | Card | Headline number | Each chart point | | --- | --- | --- | | **Revenue** | Sum of the order totals of all wholesale orders in the range | Sum of order totals in that day, week or month | | **Orders** | Number of wholesale orders in the range | Number of wholesale orders in that period | | **AOV** | Revenue divided by orders for the whole range | Revenue divided by orders in that period, 0 when there are none | | **Avg. Items per Order** | Average number of units per wholesale order, one decimal | Units divided by orders in that period | The order total is the order's total as Process Wholesale recorded it, updated when the order is edited. Process Wholesale does not subtract refunds, and cancelled orders stay counted. "Items" are units: an order with 3 of one product counts as 3 items. **Example.** On **Last 30 days**, two wholesale orders were recorded yesterday: $100 with 3 units and $50 with 1 unit. The cards show **Revenue** $150, **Orders** 2, **AOV** $75 and **Avg. Items per Order** 2.0. ## Customers tab metrics The four cards on the **Customers** tab cover **all time**. They do not change with the time range. | Card | Definition | | --- | --- | | **Active wholesale customers** | Customers with at least one wholesale order ever | | **Repeat order rate** | Share of active wholesale customers with two or more wholesale orders, rounded to a whole percent | | **Avg days to reorder** | For every customer with two or more wholesale orders, the number of whole days between each order and their next one, averaged over all those gaps and rounded | | **At-risk customers** | Active wholesale customers whose latest wholesale order is more than 45 days old. **Take action** opens the [at-risk customers](https://docs.processwholesale.com/customers/at-risk-customers) page. | ## Customers tab table The table lists **10 customers**, with no further pages. | Column | Definition | | --- | --- | | **Name** | The customer's name, or the email address if there is no name | | **Revenue** | Sum of the customer's wholesale order totals in the time range, whole currency units | | **Orders** | Number of the customer's wholesale orders in the time range | | **AOV** | Revenue divided by orders in the time range, whole currency units | | **Last order** | Date of the customer's latest wholesale order ever, not limited to the range, as month/day/year | - **Who is listed:** every active wholesale customer can appear, including customers with no orders in the range, who show $0. - **Sorting:** **Revenue** (Highest, Lowest), **Orders** (Highest, Lowest), **AOV** (Highest, Lowest), **Last order** (Newest, Oldest). The default is **Revenue**, Highest. The 10 rows shown are the first 10 in the chosen order. - **Search:** **Search customers...** matches any part of the name shown in the **Name** column, ignoring capitalization. - **Empty messages:** "No customers with orders yet" and, when searching, "No customers match your search". **Example.** On **Last 30 days**, three customers ordered: Small $50 (3 days ago), Big $400 (10 days ago) and $600 (11 days ago), Medium $200 (1 day ago). The table lists Big ($1,000), Medium ($200), Small ($50). Sorted by **Last order**, Newest, the order is Medium, Small, Big. The cards show **Active wholesale customers** 3, **Repeat order rate** 33%, **Avg days to reorder** 1 and **At-risk customers** 0. ## Products tab metrics The **Products** tab covers wholesale orders in the time range. Products are counted per variant. | Card | Definition | | --- | --- | | **SKUs Sold** | Number of different variants in wholesale orders in the range | | **Avg qty / SKU** | Total units sold divided by **SKUs Sold**, one decimal | | **Avg qty / order** | Total units sold divided by the number of wholesale orders, one decimal | ## Products tab table The table lists **20 variants**, with no further pages. | Column | Definition | | --- | --- | | **Product** | The product and variant name from Shopify. A deleted variant shows "Unknown Variant". | | **SKU** | The variant SKU, or "N/A" | | **Revenue** | Sum of item price times quantity on wholesale order lines in the range, whole currency units. It is based on the line items, not the order total, so shipping is not included. | | **Avg purchase qty** | Units of the variant divided by the number of orders that contain it, one decimal | | **Frequently orders with** | Up to 3 other variants that appear most often in the same wholesale orders, or "—" | - **Sorting:** **Revenue** (Highest, Lowest), **Qty sold** (Highest, Lowest), **Avg purchase qty** (Highest, Lowest). **Qty sold** is the total units of the variant; it has no column of its own. The default is **Revenue**, Highest. - **Search:** **Search products...** matches the product name or the SKU, ignoring capitalization. - **Empty messages:** "No product data available yet" and "No products match your search". **Example.** Order 1 has 1 unit of a $10 variant and 5 units of a $100 variant. Order 2 has 2 units of a $30 variant. The table lists the $100 variant ($500), the $30 variant ($60) and the $10 variant ($10). The cards show **SKUs Sold** 3, **Avg qty / SKU** 2.7 (8 units / 3) and **Avg qty / order** 4 (8 units / 2 orders). ## Export | Item | Detail | | --- | --- | | Plan | Professional | | Where | **Export** button on the **Customers** and **Products** tabs. The **Overview** tab has no export. | | Format | CSV file, UTF-8 | | File name | `customers__.csv` or `products__.csv`, for example `customers_30d_2026-11-11.csv` | | Customers file | A `Metric,Value` section with the four cards, a blank line, then `Name,Revenue,Orders,AOV,Last Order` | | Products file | A `Metric,Value` section with the three cards, a blank line, then `Product,SKU,Revenue,Avg Purchase Qty,Frequently Orders With` | | Rows | The top 10 customers or top 20 variants, the same limit as the table | | Respects | The selected time range | | Ignores | Your on-screen sort and search. The file is always sorted by revenue, highest first. | | Amounts | Formatted text in whole currency units, for example `$1,000` | | Messages | "Export downloaded successfully" or "Export failed" | ## Home page analytics tiles The Process Wholesale home page has an **Analytics** section, "Key metrics for your wholesale program". Its tiles relate to the Analytics page as follows. | Tile | What it shows | Relation to the Analytics page | | --- | --- | --- | | **Revenue (last 30 days)** | Sum of wholesale order totals recorded in the last 30 days, in your store currency, no decimals. Tooltip: "Total wholesale order revenue from orders placed in the last 30 days through the wholesale app". All plans. | Same definition as **Revenue** on the **Overview** tab with **Last 30 days** | | **Active B2B customers** | Customers in Shopify with the tag `B2B`, counted up to 2,500 | Not the same as **Active wholesale customers**, which counts customers with a wholesale order | | **Pending B2B customers** | Customers in Shopify with the tag `B2B_Registeration` (spelled this way), waiting for approval | Not on the Analytics page | | **Active discounts** | Flat and tier discounts compared with your plan's maximum, for example 1/1. Price lists and cost plus markup are not counted. | Not on the Analytics page | | **B2B tax exemption**, **B2B shipping**, **Net terms**, **Minimum order amount**, **MOQ** | Whether each setting is on, or its value. Below Enterprise, the last four show a lock and **Unlock**. | Not on the Analytics page | See [the Process Wholesale dashboard](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) for the rest of the home page. ## Related articles - [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) - [Why wholesale analytics differ from Shopify reports](https://docs.processwholesale.com/troubleshooting/analytics-numbers-differ) - [At-risk customers and recovery emails](https://docs.processwholesale.com/customers/at-risk-customers) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/analytics/wholesale-orders Section: Orders and analytics Plans: All plans Last verified: 2026-11-11 # Which orders count as wholesale orders Process Wholesale counts an order as a wholesale order only when a Process Wholesale discount was applied to it. Being placed by a wholesale customer (B2B customer) is not enough: an order from a customer tagged `B2B` that received no Process Wholesale discount is not a wholesale order. This definition applies on every plan and drives every wholesale number in the app: the Analytics page, the at-risk customers list and the **Revenue (last 30 days)** tile on the home page. Wholesale orders also receive the order tag `processwholesale` in Shopify admin. **At a glance** - **Plan:** All plans - **Counts as wholesale:** An order with a customer, recorded after Process Wholesale was installed, where the name of a discount on the order contains one of your discount tags - **Not counted:** Orders without a Process Wholesale discount, orders without a customer, orders placed before install or before January 7, 2026 - **Order tag:** `processwholesale` (lower case, one word), added to new wholesale orders - **Amount recorded:** The order total; refunds and cancellations are not subtracted - **History:** Starts when Process Wholesale is installed; no import of older orders ## How Process Wholesale recognizes a wholesale order Process Wholesale recognizes a wholesale order by the names of the discounts on it. When an order is recorded, Process Wholesale compares the name of every discount on the order with the names of all your discount tags: flat discounts, tier discounts, price lists and cost plus markup. An order is a wholesale order when **at least one discount name contains at least one discount tag name**, with these rules: - **Contains, not equals.** The tag name only has to appear somewhere inside the discount name. - **Capitalization matters.** Discount tags are always lower case. The tag `gold` matches a discount named "gold customer thanks" but does not match "Gold customer thanks". - **Customer tags are not checked.** The customer's `B2B` tag plays no part. A customer without the `B2B` tag whose order carries a matching discount name is counted. - **No discount, no wholesale order.** An order with no discounts at all is never a wholesale order. **Worked example.** Your store has a flat discount with the discount tag `gold` and a price list with the discount tag `distributor`. | Order | Wholesale order? | Why | | --- | --- | --- | | Received the `distributor` price list discount at checkout | Yes | The Process Wholesale discount on the order carries the tag name `distributor` | | Has a manual discount you named "gold customer thanks" | Yes | The discount name contains `gold` | | Has a manual discount you named "Gold customer thanks" | No | The capital G means the name does not contain `gold` | | Placed by a customer tagged `B2B` for products no Process Wholesale discount covers | No | No discount on the order carries a discount tag name | ## Orders from wholesale customers that are not counted Process Wholesale does not count these orders, even when a wholesale customer placed them: - **Orders with no Process Wholesale discount.** For example, a wholesale customer buys a product that none of their discounts covers. The order is not counted even if the customer used net payment terms, wholesale shipping or Quick Buy for it. - **Orders paid only with a Shopify discount code** whose name does not contain one of your discount tags. - **Orders without a customer.** An order that is not linked to a customer record in Shopify is never recorded. - **Orders placed before Process Wholesale was installed**, and anything before January 7, 2026. - **Orders placed while Process Wholesale was uninstalled.** Draft orders, manual orders, POS orders and Quick Buy orders follow the same rule. They count only when a discount on the order contains a discount tag name, and only when the order has a customer. ## How to name discount tags so orders are recognized Because recognition depends on discount names, the name you give a discount tag affects which orders count. - **Use a distinctive discount tag name.** A short tag such as `vip` also matches any other discount whose name contains those letters, such as a manual discount called "vip thank you". Those orders are then counted as wholesale orders. A name like `wholesalegold` is unlikely to appear by accident. - **Do not reuse a discount tag name inside your own discount codes or manual discounts** unless you want those orders counted as wholesale orders. - **Mind the capitalization.** Discount tags are lower case, and recognition is case-sensitive, so a manual discount named "Gold" does not match the tag `gold`. - **To count a draft order or manual order as wholesale,** apply the wholesale discount to it. See [how to apply wholesale discounts to a Shopify draft order](https://docs.processwholesale.com/discounts/draft-orders). ## The `processwholesale` order tag Process Wholesale adds the order tag `processwholesale` (lower case, one word) to each new order it records as a wholesale order. Existing tags on the order are kept. Process Wholesale does not add notes, attributes or other changes to the order. To see these orders in Shopify admin, open **Orders** and filter the list by the tag `processwholesale`. The tagged orders and the numbers in Process Wholesale analytics can differ: - **The tag is added only when the order is first recorded.** An order that becomes a wholesale order later through an edit is counted in analytics but not tagged. - **The tag is not removed.** If an edit removes the wholesale discount, analytics stops counting the order, but the tag stays. - **Tags you add or remove by hand** change the Shopify filter but not analytics. Analytics never reads the tag. - **Quick Buy net-terms draft orders are tagged at creation.** When a wholesale customer checks out from Quick Buy with a payment term, Process Wholesale creates a draft order tagged `processwholesale`, whether or not a discount was applied. A draft order is not counted in analytics. If it is completed as an order, that order counts only if a Process Wholesale discount was applied to it. See [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms). - **Refunds and cancellations** do not remove the tag, and they do not remove the order from analytics either. ## What Process Wholesale records about an order For each order with a customer, Process Wholesale records: - The customer's name and email address - The order total - Each line item: product, variant, quantity and price - Whether the order is a wholesale order - The fulfillment status - The date and time Process Wholesale recorded the order Process Wholesale does not record the order number, currency, taxes, shipping, discounts, refunds, payment status, cancellation or sales channel. ## When a new order appears A new order appears in Process Wholesale as soon as it has been recorded. There is no daily or hourly refresh: reload the Analytics page to see the latest orders. Analytics dates an order by the moment Process Wholesale recorded it, not by the order date shown in Shopify. If an order is recorded later than it was placed, it is counted on the day it was recorded. ## Order history starts at install Process Wholesale does not import past orders. Order history starts when Process Wholesale is installed in your store, and no store has data from before January 7, 2026, the date Process Wholesale started recording orders. Uninstalling Process Wholesale deletes the recorded orders, analytics and recovery email history. A reinstall starts again from zero. See [uninstalling Process Wholesale](https://docs.processwholesale.com/account/uninstalling). ## Refunds, edits and cancellations - **Refunds are not subtracted.** Process Wholesale keeps the order total it recorded. A $400 wholesale order that is fully refunded still adds $400 to wholesale revenue. - **Cancelled orders keep counting.** Cancelling an order in Shopify does not remove it from analytics or from the at-risk calculation. - **Edits update the order.** When an order is edited, Process Wholesale updates its line items and checks again whether it is a wholesale order. Line items removed in the edit disappear from the Products tab. - **Orders not recorded at first stay out.** Editing an order that Process Wholesale never recorded, such as an order from before install, does not add it. ## Currency Process Wholesale records order amounts without a currency and shows them in your store currency. The **Customers** and **Products** tabs and the home page tile use your store currency code. The **Overview** tab shows a `$` sign on every amount, whatever your store currency is. Because the currency is not stored, changing your store currency later changes how older amounts are labeled but does not convert them. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | A wholesale customer's order is not counted | No Process Wholesale discount was applied to the order | Check the discounts on the order in Shopify admin. Make sure the customer has a discount tag that covers the products they buy. | | An order is missing everywhere in Process Wholesale | The order has no customer, or it was placed before install or before January 7, 2026 | No fix in the app. Process Wholesale does not import older orders or orders without a customer. | | A retail order is counted as wholesale | A discount on the order has a name that contains one of your discount tag names | Give the discount tag a more distinctive name, or rename the other discount. | | A refunded or cancelled order is still counted | Refunds and cancellations are not subtracted | No fix in the app. Account for refunds separately when you compare with Shopify reports. | | The `processwholesale` filter in Shopify shows a different number of orders | The tag is added only at first recording, is never removed, and is also on Quick Buy net-terms draft orders | Use Process Wholesale analytics for wholesale totals and the tag as a quick filter. | ## Frequently asked questions ### Does an order from a wholesale customer always count as a wholesale order? No. An order counts as a wholesale order only when a Process Wholesale discount was applied to it. A wholesale customer's order with no Process Wholesale discount is not counted. ### Does Process Wholesale import orders placed before I installed the app? No. Process Wholesale has no import of older orders. History starts at install, and nothing before January 7, 2026 is available for any store. ### Are refunded or cancelled orders removed from wholesale revenue? No. Process Wholesale keeps the order total it recorded. Refunds are not subtracted and cancelled orders stay counted. ### Why does a non-wholesale order show as a wholesale order? The order has a discount whose name contains one of your discount tag names. For example, the discount tag `vip` matches a manual discount called "vip thank you". Rename the discount tag to something more distinctive to avoid this for future orders. ### Can I mark an order as wholesale by adding the `processwholesale` tag? No. Analytics does not read the order tag. Adding or removing `processwholesale` by hand changes only the Shopify order filter. ### Do loyalty discounts use the same orders? No. [Loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts) measure a customer's spend from their Shopify orders directly, not from Process Wholesale analytics, so loyalty spend can include orders that analytics does not count. ## Related articles - [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics) - [Why wholesale analytics differ from Shopify reports](https://docs.processwholesale.com/troubleshooting/analytics-numbers-differ) - [Wholesale discount types compared: flat, tier, price list and cost plus markup](https://docs.processwholesale.com/discounts/discount-types) - [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference) --- Source: https://docs.processwholesale.com/account/plans-and-pricing Section: Plans, account and data Plans: All plans Last verified: 2026-11-11 # Process Wholesale plans and what each plan includes Process Wholesale has three plans: Starter, Enterprise and Professional. Each plan includes everything in the plan before it and adds more discounts or features: Enterprise adds the Quick Buy order form, checkout rules, wholesale shipping and the custom signup form, and Professional adds price lists, cost plus markup, Hide price and full analytics. You choose a plan on Shopify's own plan page, which opens when you select **Plan** in the Process Wholesale app, and current prices are shown on that page. **At a glance** - **Plans:** Starter, Enterprise, Professional - **Where to choose:** Process Wholesale > **Plan**, which opens Shopify's plan page - **Prices:** Shown on Shopify's plan page. Billing goes through Shopify. - **Plan required to use the app:** Yes. Until you choose a plan, the app sends you to the plan page. - **Shopify Plus:** Not required. No Process Wholesale feature is limited to Shopify Plus stores. ## Process Wholesale plan comparison | | Starter | Enterprise | Professional | | --- | --- | --- | --- | | Discounts you can create (flat and tier together) | 1 | 100 | 100 | | Product Wholesale block and signup form | Yes | Yes | Yes | | Quick Buy order form | No | Yes | Yes | | Loyalty tier discounts | No | Yes | Yes | | Choose individual variants for a discount | No | Yes | Yes | | Custom signup form | No | Yes | Yes | | Lock Content Redirect | No | Yes | Yes | | Redirect after login | No | Yes | Yes | | Net payment terms | No | Yes | Yes | | Minimum order amount and quantity | No | Yes | Yes | | Hide payment methods | No | Yes | Yes | | Wholesale shipping | No | Yes | Yes | | Price lists | No | No | Yes | | Cost plus markup | No | No | Yes | | Hide price | No | No | Yes | | Full Analytics (Customers and Products tabs, time ranges, export) | No | No | Yes | The complete feature-by-plan table, including every smaller option, is in [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference). ## What the Starter plan includes The Process Wholesale Starter plan includes one discount in total (flat and tier together): a [flat discount](https://docs.processwholesale.com/discounts/flat-discounts), or a tier discount of any type except Loyalty with as many tier rows as you need, so you can set real quantity breaks such as 10% off at 5 units and 20% off at 10 units. It also includes the [wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-forms-overview), customer approval, the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), the wholesale application emails, tax exemption, auto assign discount tags, draft order discounts and the Analytics **Overview** tab for the last 30 days. ## What the Enterprise plan adds The Process Wholesale Enterprise plan raises the discount limit to 100 discounts and adds: - The [Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup), the theme block that lets wholesale customers order many products from one page - [Loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts) for repeat wholesale customers - Choosing individual variants, not only products or collections, for a flat, tier or cost plus markup discount - The [custom signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) - The [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) block for wholesale-only pages, collections and products - [Redirect after login](https://docs.processwholesale.com/customers/redirect-after-login) for wholesale customers - [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) in Quick Buy - A [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) and a [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) - [Hiding payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods) from wholesale customers - [Wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping) on the **Shipping** page - The B2B shipping, Net terms, Minimum order amount and MOQ tiles on the Dashboard ## What the Professional plan adds The Process Wholesale Professional plan includes everything in Enterprise, with the same limit of 100 discounts, and adds: - [Price lists](https://docs.processwholesale.com/discounts/price-lists) with fixed wholesale prices, including [CSV import and export](https://docs.processwholesale.com/discounts/price-list-csv-import) - [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) pricing - The discount combination settings for price lists and cost plus markup - [Hide price](https://docs.processwholesale.com/storefront/hide-prices) for customers who are not wholesale - Full [wholesale analytics](https://docs.processwholesale.com/analytics/wholesale-analytics): real data on the **Customers** and **Products** tabs, custom time ranges, **Export**, and the link to [at-risk customers](https://docs.processwholesale.com/customers/at-risk-customers) ## How to choose a Process Wholesale plan In the Process Wholesale app, select **Plan** in the app menu. After about a second the app opens Shopify's own plan page for Process Wholesale, where each plan's current price is shown. Select a plan there and approve it in Shopify. When Shopify returns you to the app, Process Wholesale records the plan and opens the Dashboard. Every **Upgrade** and **Unlock** button in the app opens the same plan page. To change a plan later, see [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan). ## What happens when no plan is selected Process Wholesale needs a plan before you can set it up. When the store has no active plan, opening the **Dashboard**, **Discounts** or **Settings** page sends you to Shopify's plan page. This happens on a new install and after a reinstall. Choose any plan to open the app normally. ## Limits and things to know - **Prices are on Shopify's plan page only.** Process Wholesale does not show prices inside the app. Billing for Process Wholesale plans is handled through Shopify. - **Discount limits count flat and tier discounts together.** On Starter you can have one flat discount or one tier discount, not one of each. At the limit, the create button reads **Upgrade to create more** on Starter, and **Discount limit reached** on Enterprise and Professional. - **A feature needs its plan.** Saved settings for a higher-plan feature are kept after a downgrade, but the feature is not available on the lower plan. - **No Shopify Plus requirement.** No Process Wholesale feature checks whether the store is on Shopify Plus. ## Frequently asked questions ### How much does Process Wholesale cost? Current prices are shown on Shopify's plan page for Process Wholesale, which opens when you select **Plan** in the app. Prices are not listed inside the app or in this help center. ### Which Process Wholesale plan includes Quick Buy? Enterprise and Professional include the Quick Buy wholesale order form. Starter does not. ### Why does Process Wholesale keep opening the plan page? The store has no active plan. Process Wholesale sends you to Shopify's plan page from the Dashboard, Discounts and Settings until you choose a plan. Select any plan and approve it. ### Does Process Wholesale require Shopify Plus? No. No Process Wholesale feature is limited to Shopify Plus stores. ### Which plan do I need for price lists? Professional. Price lists, cost plus markup, Hide price and full analytics are available only on the Professional plan. ## Related articles - [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference) - [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan) - [What is Process Wholesale?](https://docs.processwholesale.com/getting-started/what-is-process-wholesale) --- Source: https://docs.processwholesale.com/account/change-or-cancel-your-plan Section: Plans, account and data Plans: All plans Last verified: 2026-11-11 # Changing or canceling your Process Wholesale plan You change your Process Wholesale plan on Shopify's plan page, which opens when you select **Plan** in the Process Wholesale app. Process Wholesale has three plans: Starter, Enterprise and Professional. Choose a higher plan to upgrade or a lower plan to downgrade. When you downgrade, Process Wholesale keeps your discounts and settings saved, but any feature that needs a higher plan is no longer available until you upgrade again. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Plan**, which opens Shopify's plan page - **Billing:** Handled through Shopify on the plan page. Prices are shown there. - **On a downgrade:** Nothing is deleted. Features above the new plan are not available. - **On an upgrade:** The new plan's features unlock once Shopify confirms the plan. ## Steps to change your Process Wholesale plan 1. In Shopify admin, open the **Process Wholesale** app. 2. Select **Plan** in the app menu. After about a second, Shopify's plan page for Process Wholesale opens. You can also get there from any **Upgrade** or **Unlock** button in the app. 3. On the plan page, select the plan you want: Starter, Enterprise or Professional. Current prices are shown on this page. 4. Approve the plan in Shopify. 5. Wait for Shopify to return you to Process Wholesale. The app records the new plan and opens the Dashboard. Do not close the tab before you are back in the app: Process Wholesale records your choice when Shopify returns you to it. ## How to stop using Process Wholesale Process Wholesale has no cancel control of its own. To stop using Process Wholesale, uninstall the app. Uninstalling deletes the app's discount configuration and customer and order history. Read [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling) first. ## What changes when you upgrade When you move to a higher plan, the features of the new plan become available as soon as Shopify confirms the plan to Process Wholesale: - **Discount limit:** You can create up to the new plan's number of discounts: 100 on Enterprise and Professional. - **Locked features unlock:** Settings and pages that showed an upgrade message, such as **Shipping**, **Checkout rules** or price lists, become available. Settings you saved on a higher plan earlier are still there. - **Theme blocks:** Blocks that need the new plan, such as Quick Buy or Lock Content Redirect on Enterprise, can be added in the theme editor. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) for what each plan adds. ## What happens to your discounts and settings when you downgrade Nothing is deleted when you move to a lower Process Wholesale plan. Your flat and tier discounts, price lists, cost plus markup discounts, settings and customer tags stay saved. Features that need a higher plan than your new one are not available on the lower plan: | Feature | Available after downgrading to | | --- | --- | | Price lists, cost plus markup, Hide price, full Analytics | Professional only | | Quick Buy, loyalty tier discounts, variant selection, custom signup form, Lock Content Redirect, redirect after login, net payment terms, minimum order amount and quantity, hide payment methods, wholesale shipping | Enterprise or Professional | For example, a store moving from Enterprise to Starter keeps its minimum order amount of 200 saved in **Settings > Checkout rules**, but the minimum order amount is not available on Starter. Moving back to Enterprise makes the saved amount available again. **Discount count after a downgrade.** If you have more discounts than the new plan allows, your existing discounts stay saved and listed. You cannot create new discounts: the create button reads **Upgrade to create more**. **Price list tags on customers.** Customer tags for price lists and cost plus markup stay on your customers in Shopify after a downgrade. ## Limits and things to know - **Plan changes happen on Shopify's plan page.** Process Wholesale has no plan controls inside the app. The **Plan** menu item only opens Shopify's page. - **A plan is always required.** If the store has no active plan, the **Dashboard**, **Discounts** and **Settings** pages send you to the plan page until you choose one. - **Downgrading does not remove customer tags.** Customers keep their `B2B` and discount tags. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The app opens the plan page every time | The store has no active plan recorded | Choose a plan on the plan page and approve it, then wait until Shopify returns you to the app. | | The app still shows the old plan after a change | The plan page was closed before Shopify returned you to the app | Select **Plan** again. Confirm the new plan is current on Shopify's page, then let it return you to Process Wholesale. | | Features are still locked in the app after upgrading | The plan was not recorded, or Shopify has not confirmed it yet | Select **Plan**, confirm the plan, and reopen the app. If the feature is still locked, [contact support](https://docs.processwholesale.com/account/contact-support) with your store URL and the plan you chose. | | A feature disappeared after a downgrade | The feature needs a higher plan | Check [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference) and upgrade to use it again. Its settings are still saved. | ## Frequently asked questions ### Do I lose my discounts if I downgrade my Process Wholesale plan? No. Discounts, price lists, cost plus markup discounts and settings stay saved when you downgrade. Features that need a higher plan are not available until you upgrade again. ### How do I stop using Process Wholesale? Process Wholesale has no cancel control of its own. To stop using it, uninstall the app. Uninstalling deletes the app's configuration; see [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling). ### When does an upgrade take effect? As soon as Shopify confirms the new plan to Process Wholesale after you approve it. The app records the plan when Shopify returns you to it. ### Can I see prices before I change plans? Yes. Shopify's plan page, opened from **Plan** in the app, shows each plan's current price before you approve a change. ### Will wholesale customers notice a downgrade? Yes, if they used a feature your new plan does not include. For example, after moving below Enterprise, minimum order rules, net payment terms and wholesale shipping are no longer available to them. ## Related articles - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) - [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference) - [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling) - [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support) --- Source: https://docs.processwholesale.com/account/uninstalling Section: Plans, account and data Plans: All plans Last verified: 2026-11-11 # Uninstalling Process Wholesale: what is removed and what stays When you uninstall Process Wholesale, the app immediately deletes almost all of its own records for your store: every discount you configured, your settings, your signup form setup and email templates, your plan record, and the customer and order history behind Analytics. Process Wholesale does not remove the data it wrote into your Shopify store, such as customer tags and the `processwholesale` order tag. If you reinstall later, Process Wholesale starts from an empty setup. **At a glance** - **Plan:** All plans - **Deleted by Process Wholesale:** Discount configuration, settings, signup form setup, email templates, customer and order history, plan record - **When:** Immediately on uninstall. There is no waiting period, and the app has no option to restore it. - **Not removed from Shopify by Process Wholesale:** Customer tags, the `processwholesale` order tag, draft orders and customer notes from signup - **After a reinstall:** You choose a plan again and set up discounts from the start > **Important:** Uninstalling Process Wholesale deletes the app's whole discount configuration, including flat discounts, tier discounts, loyalty discounts, price lists and cost plus markup discounts, at once. The app has no option to restore it, and reinstalling does not bring it back. Before you uninstall, write down your discounts and export each price list with **Export to CSV** on its edit page (see [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import)). ## What Process Wholesale deletes when you uninstall As soon as Shopify tells Process Wholesale that the app was uninstalled, the app deletes these records for your store: | Deleted | Includes | | --- | --- | | Discount configuration | Flat discounts, tier discounts (quantity, cart value, cart quantity, loyalty), price lists and their prices, cost plus markup discounts, and the products, collections and variants each one applies to | | Settings | Everything on the **Settings** page, including discount settings, customer settings, net payment terms, checkout rules and hidden payment methods | | Signup form setup | Custom signup form fields and form settings | | Email templates | Your edited wholesale application emails | | Customer and order history | The app's copy of the customers and orders it recorded (wholesale or not) and their order lines, the data behind **Analytics** and at-risk customers, saved Quick Buy carts and recovery email history | | Store and plan records | Your store's record in the app and the plan record | | Sign-in sessions | The app's access to your store | Process Wholesale keeps two kinds of record after an uninstall: the progress of the **Quick guide** checklist on the Dashboard, and the records of price list CSV imports, including the rows of each uploaded CSV. When those services are turned on for the app, Process Wholesale also removes the store email from its mailing contact list and notifies the Ada setup assistant that the app was uninstalled. ## What stays in your Shopify store after uninstalling Process Wholesale makes no changes in your Shopify store when it is uninstalled, so it does not remove the data it wrote there: - **Customer tags.** Process Wholesale does not remove `B2B`, `B2B_Registeration` (spelled this way), `B2Bnetterms` or your discount tags from customers. Remove them in Shopify admin if you no longer need them. See [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference). - **Order tags.** Process Wholesale does not remove the `processwholesale` order tag from orders. - **Draft orders.** Process Wholesale does not delete draft orders created by Quick Buy net payment terms. - **Customer notes.** Process Wholesale does not remove the business details that applicants entered in the signup form from the customer's note. Process Wholesale does not delete your Shopify customers, orders or products when it is uninstalled. ## What a reinstall starts from If you install Process Wholesale again after uninstalling, the app starts from an empty setup: - No plan is recorded, so the app opens Shopify's plan page until you choose a plan. - There are no discounts, price lists or saved settings. You create them again. - Analytics and at-risk customers start from zero. Orders placed before the reinstall are not loaded back in. - Customers who still have the `B2B` tag in Shopify are still wholesale customers. A customer who still has a discount tag receives that discount again once you create a discount with the same tag. - The **Quick guide** checklist on the Dashboard can show steps ticked from before the uninstall. ## Worked example of uninstalling and reinstalling Process Wholesale A store on the Enterprise plan has two flat discounts (`gold` and `silver`), a minimum order amount of 200, and 40 approved wholesale customers tagged `B2B` and `gold` or `silver`. The merchant uninstalls Process Wholesale. - The `gold` and `silver` discounts, the minimum order amount and the Analytics history are deleted at once. - Process Wholesale does not remove the tags `B2B` and `gold` or `silver` from the 40 customers in Shopify. - A month later the merchant reinstalls, chooses Enterprise again and creates a new flat discount with the tag `gold`. Customers who still have the `gold` tag receive it again. The minimum order amount has to be set again, and Analytics starts from the reinstall date. ## Frequently asked questions ### Are my wholesale discounts deleted when I uninstall Process Wholesale? Yes. Process Wholesale deletes all of its discount configuration immediately when it is uninstalled, and the app has no option to restore it. Export price lists and note your discounts before you uninstall. ### Does uninstalling Process Wholesale remove customer tags? No. Process Wholesale does not remove customer tags such as `B2B`, `B2B_Registeration` and your discount tags when it is uninstalled. Remove them in Shopify admin if you want them gone. ### If I reinstall Process Wholesale, will my setup come back? No. A reinstall starts with no plan, no discounts, no settings and no analytics history. Customer tags that are still in Shopify work again once you recreate discounts with the same tags. ### Can support restore my data after I uninstall? The deletion happens immediately on uninstall, and Process Wholesale has no option to restore what it deleted. Contact support before you uninstall if you have questions. ## Related articles - [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan) - [What data Process Wholesale stores and uses](https://docs.processwholesale.com/account/data-and-privacy) - [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference) - [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import) --- Source: https://docs.processwholesale.com/account/data-and-privacy Section: Plans, account and data Plans: All plans Last verified: 2026-11-11 # What data Process Wholesale stores and uses Process Wholesale keeps data about your store, your wholesale settings, the customers whose orders it records and their orders, so it can apply wholesale pricing, run the signup and approval flow, send wholesale emails and show analytics. It sends some of this data to outside services that deliver email, support chat, error reports and the Ada setup assistant. This is a help article that describes what the app does; it is not the Process Wholesale privacy policy. **At a glance** - **Plan:** All plans - **Store data:** Store name, store email, owner name, settings, discount configuration, plan - **Customer data:** Name, email and Shopify customer ID of customers whose orders the app records - **Order data:** Order ID, order total, fulfillment status, whether the order is wholesale, and line items - **Outside services:** Email delivery, support chat, error reporting, the Ada setup assistant, video and call booking embeds - **Questions:** [Contact support](https://docs.processwholesale.com/account/contact-support) ## Store and setup data Process Wholesale keeps | Data | Why Process Wholesale keeps it | | --- | --- | | Store domain, store name, store email and owner name | To identify your store, address emails to you and send you signup alerts and milestone emails | | Your plan | To decide which features are available | | Settings from the **Settings** page | To apply your checkout rules, net payment terms, redirects, hidden payment methods, tax exemption and email choices | | Discount configuration | Flat discounts, tier discounts, loyalty discounts, price lists with their prices, cost plus markup discounts, and the products, collections and variants they apply to, so wholesale prices can be calculated | | Signup form setup and email templates | Your custom signup form fields and settings, and your edited wholesale application emails | | Lifetime wholesale revenue | To send revenue milestone emails | | Price list import records, including the rows of each price list CSV you import | To run the import in the background and report which rows matched | | **Quick guide** progress | To tick the completed steps of the Dashboard checklist | | Satisfaction survey answers | Your rating and any feedback you type in the in-app survey | | Sign-in sessions | Encrypted access details that let the app work with your store | ## Customer and order data Process Wholesale keeps | Data | Why Process Wholesale keeps it | | --- | --- | | Customer name, email and Shopify customer ID | To link orders to customers for **Analytics**, at-risk customers and recovery emails | | Order ID, order total, fulfillment status and whether the order is wholesale | To calculate wholesale revenue, **Analytics** and milestone emails | | Order lines: product, variant, quantity and price | To show product analytics and Quick Buy reorder history | | Saved Quick Buy carts: products, variants and quantities | So a wholesale customer's Quick Buy cart is kept between visits in the same browser | | Recovery email status | Whether a recovery email to an at-risk customer was sent and opened | Process Wholesale records orders that have a customer. It does not store order currency, taxes, shipping, refunds or payment details. Applicants' signup answers, such as business name, business address, phone number, tax ID and website, are saved in Shopify on the customer record. ## Outside services that receive data from Process Wholesale Process Wholesale works with these outside services. Some of them are used only when they are turned on for the app. | Service | What it is used for | Data it receives | | --- | --- | --- | | SendGrid | Delivering emails: signup alerts and draft order emails to you, wholesale application emails and recovery emails to customers, bulk assign results, milestone emails, and survey feedback to the Process Wholesale team | Recipient email addresses, customer names and emails, store name, order details and feedback text | | Brevo | Keeping a contact list of stores that installed the app | The store email, added at install and removed at uninstall | | Help Scout | The support chat in the app | Your store domain and anything you type in the chat | | Sentry | Error reports from the app, used to find and fix errors | Error details, which can include request details such as the IP address | | Ada setup assistant | Guided setup in the app | The app's identifier, your admin language, and the setup request you write or build in the Ada card, including the names and IDs of products and collections you pick. When the app is uninstalled, the store domain. | | hCaptcha | Spam protection on the storefront signup form, when it is turned on | The captcha response from the applicant's browser | | Vimeo and Calendly | Tutorial videos and the onboarding call booking page | Requests your browser makes when you play a video or open the booking page | ## How long Process Wholesale keeps data Process Wholesale keeps its data while the app is installed. When you uninstall the app, it deletes most of your store's records immediately, including discount configuration, settings, signup form setup, email templates, the plan record and customer and order history. Two kinds of record are kept after an uninstall: the **Quick guide** progress and the price list import records. See [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling) for the full list. ## Related articles - [Uninstalling Process Wholesale: what is removed and what stays](https://docs.processwholesale.com/account/uninstalling) - [Permissions Process Wholesale requests and why](https://docs.processwholesale.com/getting-started/app-permissions) - [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant) - [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support) --- Source: https://docs.processwholesale.com/account/ada-setup-assistant Section: Plans, account and data Plans: All plans Last verified: 2026-11-11 # Ada, the setup assistant in Process Wholesale Ada is an AI setup assistant available inside the Process Wholesale app. On the Dashboard, the Ada card lets you describe how you want your wholesale program to work, or answer a few questions about discounts and storefront features, and then hands that request to the Ada chat widget. Ada has no plan requirement in Process Wholesale. When Ada is not available, the Dashboard shows a card to request setup help from the support team instead. **At a glance** - **Plan:** All plans - **Where:** The Ada card on the Process Wholesale **Dashboard**, and the Ada chat widget on every page of the app - **What you enter:** A description of your wholesale program, or answers to a short set of questions - **Where your request goes:** The Ada chat widget - **Permission Ada may ask for:** Write access to your theme, online store pages and navigation, requested when you approve a setup plan, not at install ## Where Ada appears in Process Wholesale Ada appears in two places in the Process Wholesale app: - **The Ada card on the Dashboard.** It takes the place of the **Get your wholesale setup done for you** card. It appears when the Ada widget has loaded, within about 15 seconds of opening the Dashboard. - **The Ada chat widget.** It is available on every page of the app, on the left side. The support chat beacon is separate. If the Ada widget does not load, the Dashboard shows the **Get your wholesale setup done for you** card, with **Set it up for me** to message the support team and **Schedule call** to book a call. See [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support). ## What you enter in the Ada card for a new setup When your store is not set up yet, the Ada card is titled **Automatically setup your entire wholesale program** and is marked **AI**. It has two tabs. **Describe it.** Type your request in **What do you want to set up?**, for example "discount of 20% off for wholesale customers, 30% once they order 50+ units, bulk order form, minimum order amount of $100". Under **Need ideas?**, **Example template** fills in a sample request. **Answer a few questions.** Fill in a short form: | Field | Options and defaults | | --- | --- | | **How many discounts do you need?** | Default 1, up to 3. For more than 3, the card suggests **Switch to Describe it**. | | **Discount type** (per discount) | Flat or Tier | | Flat discount **%** | 1 to 99, default 20 | | Tier type | **Individual product quantity**, **Total cart quantity** or **Total cart value**, with up to 3 tiers. Defaults: 5 units for 10% and 10 units for 20%. **Add another tier** and **Remove** change the rows. | | **Applies to** | All products, specific collections or specific products, picked with Shopify's picker | | **Include the wholesale signup form** | On by default | | **Show wholesale prices on my product pages** | On by default | | **Include the wholesale bulk order form** | Off by default | | **Set a minimum order** | Off by default. **Minimum type** is Order amount or Order quantity, and **Minimum** defaults to 500. | The form checks your answers before sending, with messages such as "Enter a whole number between 1 and 99.", "Each tier must start higher than the one before it." and "Pick at least one product." Select **Build my setup** to send the request to Ada. **Not sure where to start?** opens Ada's guided setup in the Ada widget instead. ## What you enter in the Ada card after setup Once your store is set up, the card is titled **Make changes with Ada** and has one field, **Describe any changes you want to make to your current wholesale program**. Select **Review changes** to send it to Ada. You can collapse the card with **Hide**; the collapsed row reads **Make changes to your wholesale program** with an **Ask Ada** button. ## What Process Wholesale passes to Ada The Ada card turns your entries into a plain-English request and opens the Ada widget with it. For example, the default answers with one flat 20% discount on all products become: "I want to create a wholesale program with one discount. Discount 1 will be a flat 20% discount. Apply them to everything. Add a wholesale signup page so new customers can apply. Show wholesale prices on my product pages." Process Wholesale also passes Ada: - The language of your Shopify admin. - The names and IDs of any products or collections you picked. The Ada card itself does not change your store; it only passes your request to the Ada widget. When Process Wholesale is uninstalled, the app notifies Ada. ## Permissions Ada may ask for Process Wholesale does not ask for theme or page write access at install. When you approve a setup plan from Ada, you may be asked to grant Process Wholesale permission to edit your theme, your online store pages and your online store navigation. Only merchants who run an Ada setup plan are asked. See [Permissions Process Wholesale requests and why](https://docs.processwholesale.com/getting-started/app-permissions). ## Rating your setup with Ada After a setup with Ada, Process Wholesale may ask once, the next time you open the app, "How was your setup experience with Ada?", with **Dissatisfied** and **Satisfied**. A positive answer offers **Write a review** for the Shopify App Store; another answer opens a box to tell the team what to improve. ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The Dashboard shows **Get your wholesale setup done for you** instead of the Ada card | The Ada widget did not load within about 15 seconds, or Ada is not available | Reload the app. To get setup help without Ada, select **Set it up for me** or **Schedule call**. | | **Build my setup** does nothing | A field in **Answer a few questions** has an error | Fix the field that shows an error message, such as a percentage outside 1 to 99, and try again. | | You are asked for permission to edit the theme, pages or navigation | You approved an Ada setup plan, and that permission is requested at approval time | Grant the permission if you want to go ahead with the plan, or set up the theme blocks yourself with the [quick start](https://docs.processwholesale.com/getting-started/quick-start). | ## Frequently asked questions ### Which plan do I need to use Ada? None. Ada has no plan requirement in Process Wholesale. The features you set up still need their own plans; see [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference). ### Do I have to use Ada to set up Process Wholesale? No. You can set everything up yourself. When Ada is offered and your store is not set up yet, the Dashboard shows the manual checklist under **Prefer to set things up yourself?** with **View manual setup**. ### Does the Ada card change my store when I select Build my setup? No. The card only sends your request to the Ada widget. ### Does Ada know which language my Shopify admin uses? Yes. Process Wholesale passes the language of your Shopify admin to Ada when the widget loads. ## Related articles - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start) - [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) - [Permissions Process Wholesale requests and why](https://docs.processwholesale.com/getting-started/app-permissions) - [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support) --- Source: https://docs.processwholesale.com/account/languages Section: Plans, account and data Plans: All plans Last verified: 2026-11-11 # Languages supported by Process Wholesale Process Wholesale has separate language lists for the admin app, the storefront, checkout messages and emails. The admin app is available in English, French, Spanish, German and Italian, and follows your Shopify admin language. The storefront blocks and customer account forms are translated into English, German, Spanish, French, Italian, Norwegian, Portuguese (Brazil and Portugal) and Swedish, following the storefront language. The checkout minimum order messages cover the same storefront languages. Any language not listed falls back to English, and text you type yourself, such as block headings and email templates, is shown exactly as you wrote it. **At a glance** - **Plan:** All plans - **Admin app:** English, French, Spanish, German, Italian - **Storefront and checkout:** English, German, Spanish, French, Italian, Norwegian, Portuguese (Brazil), Portuguese (Portugal), Swedish - **How the language is chosen:** Admin follows your Shopify admin language; storefront and checkout follow the language the customer is browsing in; recovery emails follow your store's primary language - **Not translated:** Text you enter yourself, and some built-in storefront text listed in the tables ## Admin app languages | Language | Admin app | | --- | --- | | English | Yes (default) | | French | Yes | | Spanish | Yes | | German | Yes | | Italian | Yes | | Any other language | Shown in English | | Question | Answer | | --- | --- | | How is the admin language chosen? | Process Wholesale uses the language of your Shopify admin. For example, a Shopify admin set to French (France) shows the app in French. | | Is there a language picker in the app? | No. The app always follows the language your Shopify admin is set to. | | What stays in English? | Some standard Shopify interface text inside the app. | | Does Ada use the admin language? | Process Wholesale passes your admin language to the [Ada setup assistant](https://docs.processwholesale.com/account/ada-setup-assistant). | ## Storefront block languages Storefront blocks follow the language the customer is browsing your store in. Every block below is translated into English, German, Spanish, French, Italian, Norwegian, Portuguese (Brazil), Portuguese (Portugal) and Swedish, unless the table says otherwise. Any other language shows English. | Storefront area | Translated | Stays as written or in English | | --- | --- | --- | | Wholesale signup form (theme block) | Field labels (First Name, Last Name, Email, Password, Business Name, Business Address and its address fields, Phone Number, Tax ID, Website, Additional Info), **Submit**, **Login**, **Create wholesale account**, **Request to Join Wholesale**, **Browse products** and the error heading | Headings and messages you type in the block settings | | Custom signup form | The form's built-in buttons and messages | The fields you create. The app notes that these "will need to be translated manually." | | Product Wholesale block | The five price table headers | The word "Any" in the table, and text you type in block settings | | Quick Buy | Titles, buttons, table headers and messages of the order form | All **Buy again** and reorder text is English only. These also stay in English: stock and quantity warnings (for example "Cannot add more than N items."), "Enter quantity", "No results found", "Search error occurred", "« Prev" and "Next »", "SKU: ", discount labels such as "% off" and " each", "Cart Quantity Discount" and the default name "Customer". | | Hide price | Nothing | The message you enter is shown as written in every language. If you leave it empty, the English default "Log in to see price" is shown. | | Wholesale signup form (new customer accounts) | Built-in labels and messages | Heading and messages you type in the block settings | | Wholesaler Information (customer account profile block) | Built-in text, except Swedish | Swedish is not included | | Theme editor | Nothing | All block setting names in the theme editor are in English | For Quick Buy translations in detail, see [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering). ## Checkout message languages The minimum order messages that Process Wholesale shows in Shopify checkout follow the checkout language. | Checkout language | Minimum order amount and quantity messages | | --- | --- | | German | German | | Spanish | Spanish | | French | French | | Italian | Italian | | Norwegian | Norwegian | | Portuguese (Brazil), or Portuguese with no region | Portuguese (Brazil) | | Portuguese (Portugal) | Portuguese (Portugal) | | Swedish | Swedish | | English and every other language | English | For example, a wholesale customer checking out in Japanese sees "Minimum order amount for wholesale customers is: 200.00 USD" in English, while a customer checking out in Portuguese (Portugal) sees "O valor mínimo da encomenda para clientes grossistas é: 200.00 EUR". Wholesale discount names in the cart and checkout are built from your discount tag, for example "PW: gold", and are the same in every language. The full list of messages is in [Checkout and storefront messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference). ## Email languages Process Wholesale emails to customers follow their own rules, separate from the storefront and checkout lists. | Email | Language | | --- | --- | | Wholesale application emails (pending, approval, rejection) | One version of each email, in the language you write it. There are no per-language versions. | | At-risk customer recovery emails | Your store's primary language when it is English, Spanish, French, German, Italian, Portuguese, Dutch or Japanese. Any other primary language gets the English email. The customer's own language is not used. | See [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails) and [At-risk customers and recovery emails](https://docs.processwholesale.com/customers/at-risk-customers). ## Related articles - [Checkout and storefront messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference) - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails) - [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) --- Source: https://docs.processwholesale.com/account/contact-support Section: Plans, account and data Plans: All plans Last verified: 2026-11-11 # How to get help with Process Wholesale To get help with Process Wholesale, open the **Support** page in the app. From there you can send a message to the support team, book an onboarding call, or open the help center. The support chat is also available from every page of the app, and new stores can ask the team to set the app up for them from the Dashboard. Support is available on every plan. **At a glance** - **Plan:** All plans - **Where:** Process Wholesale > **Support**, and the chat beacon on every app page - **Channels:** Message the team (chat), onboarding call, help center, FAQ and video tutorials on the **Support** page, and Ada where it is offered - **Response time:** The app says "We usually respond in a few hours." ## Steps to contact Process Wholesale support 1. In Shopify admin, open the **Process Wholesale** app. 2. Select **Support** in the app menu. 3. Choose a channel: - **Send message** in the **Send a message** card opens the support chat. Type your question and send it. - **Schedule call** in the **Need help with setup?** card opens a booking page for an onboarding call with the team. - **Go to help center** in the **Help center** card opens the online help center. ## Every Process Wholesale support channel | Channel | Where to find it | What it is for | | --- | --- | --- | | Support chat | **Support > Send message**, or the chat beacon on any page of the app | Questions and problems. The app says: "Having trouble or have a specific question? Send us a message. We usually respond in a few hours." | | Onboarding call | **Support > Schedule call**, or **Schedule call** on the Dashboard welcome card | A call with a team member to set the app up for your needs | | Setup done for you | **Set it up for me** on the Dashboard card **Get your wholesale setup done for you** | Opens the support chat with the message "Hi, I just installed Process Wholesale and would like help setting everything up for my store." | | Help center | **Support > Go to help center** | Step-by-step guides on every part of the app | | FAQ | **Frequently asked questions** on the **Support** page | Short answers to common questions | | Video tutorials | **Other Tutorials** on the **Support** page | Videos on price lists, case packs, net payment terms, checkout rules and locking content | | Ada setup assistant | The Ada card on the Dashboard and the Ada chat widget | Guided setup, where it is offered. See [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant). | The Dashboard welcome card appears when the Ada card is not shown. You can close it for the rest of your browser session. ## What to have ready when you contact support Support can answer faster when your first message includes: - **Your store URL**, for example `your-store.myshopify.com`. The support chat already sends your store domain with your message. - **The customer involved**, by email address, and the customer's tags, for example `B2B` and `gold`. - **The discount tag** of the discount that is not working, and the product or collection it should apply to. - **Your theme** name, and whether it is an Online Store 2.0 theme. - **Your customer account type**: new customer accounts or legacy customer accounts. Shopify admin labels these **Customer accounts** and **Legacy**, and shows which one your store uses in its settings. - **Your plan**, shown on Shopify's plan page under **Plan**. - **What you expected and what happened**, with a screenshot of the product page, cart or checkout. ## Check these first Many questions are answered by checking a few things before you write in: - For a discount that does not show in the store, confirm that the theme blocks are added, and that you are logged in as an approved wholesale customer who has the discount tag. See [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). - For a signup form problem, confirm that you use the signup form that matches your customer account type. See [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working). - For a feature that is locked, check [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference). ## Troubleshooting | Symptom | Likely cause | Fix | | --- | --- | --- | | The Dashboard does not show **Set it up for me** | The Ada card is shown instead, or you closed the welcome card in this browser session | Use **Support > Send message** and ask for setup help, or use the Ada card. | | The Dashboard opens the plan page before you can reach the welcome card | No plan is selected yet | Choose any plan to open the app normally. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). | ## Frequently asked questions ### How do I contact Process Wholesale support? Open **Support** in the Process Wholesale app and select **Send message** to chat with the team, or use the chat beacon on any app page. ### Can the Process Wholesale team set the app up for me? Yes. Select **Set it up for me** on the Dashboard welcome card, or **Schedule call** on the **Support** page to book an onboarding call. ### How fast does Process Wholesale support respond? The app says "We usually respond in a few hours." to messages sent from the **Support** page. ### Is support included on every plan? Yes. The **Support** page, the chat and the onboarding call are available on every plan. ## Related articles - [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant) - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start) - [Process Wholesale video tutorials](https://docs.processwholesale.com/reference/video-tutorials) - [Process Wholesale frequently asked questions](https://docs.processwholesale.com/faq) --- Source: https://docs.processwholesale.com/troubleshooting/discount-not-applying Section: Troubleshooting Plans: All plans Last verified: 2026-11-11 # Wholesale discount not applying at checkout When a wholesale customer (B2B customer) pays retail price at checkout, Process Wholesale did not find a discount for them. By far the most common cause is the customer's account: they are not logged in, they lack the `B2B` tag, or they lack the discount tag spelled exactly as the discount's name. Work through the quick checks in order; each one links to a section with how to confirm and fix the cause. **Quick checks** 1. [The customer is logged in](#the-customer-is-not-logged-in) to the account that has the tags. 2. [The customer has the `B2B` tag](#the-customer-does-not-have-the-b2b-tag), not only `B2B_Registeration`. 3. [The customer has the discount tag, spelled exactly](#the-customer-does-not-have-the-discount-tag). 4. [The product is covered by the discount's **Applies to** selection](#the-product-is-not-covered-by-the-discount). 5. [The plan allows that discount type](#the-plan-does-not-include-the-discount-type). 6. [**Tag priority** and **Discount combinations** are set as intended](#tag-priority-or-combination-settings-choose-a-different-discount). 7. [The quantity or cart threshold is reached](#the-quantity-or-cart-threshold-is-not-reached). 8. [The loyalty level has been earned and recalculated](#the-loyalty-level-is-not-earned-or-not-yet-recalculated). 9. [Cost plus markup: the variant has a unit cost](#cost-plus-markup-the-variant-has-no-unit-cost). 10. [Price list: the variant is on the price list](#price-list-the-variant-is-not-on-the-list). > **Tip:** Test with your own wholesale test customer: tag it `B2B` and the discount tag in Shopify admin, log in on the storefront, add the product and go to checkout. ## The customer is not logged in **Confirm.** Process Wholesale discounts apply only when the checkout belongs to a customer account. A shopper who checks out as a guest, or is logged in to a different account than the one with the tags, pays retail. **Fix.** Ask the customer to log in before adding products and starting checkout. On an order you create in Shopify admin, add the customer to the draft order; see [draft orders](https://docs.processwholesale.com/discounts/draft-orders). ## The customer does not have the B2B tag **Confirm.** In Shopify admin, open **Customers**, select the customer and read **Tags**. In Process Wholesale, the customer should be on the **Active** tab of **Customers**. A customer on the **Pending** tab is tagged `B2B_Registeration` (spelled this way) and gets no wholesale discount. **Fix.** Approve the customer with **Accept B2B** on the **Pending** tab. See [how to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). The tag must be exactly `B2B`; any capitalization of those three letters works, but a tag that only contains them, such as `B2B_Registeration`, does not count. ## The customer does not have the discount tag **Confirm.** The discount tag is the discount's name, as shown in **Discounts**. Creating a discount gives it to nobody. Check the **Discount tags** column on the **Active** tab of **Customers**, or the customer's **Tags** in Shopify admin. Compare the spelling character by character: a tag typed by hand as `Wholesale-15` does not match a discount named `wholesale15`. **Fix.** Add the tag with **Manage discount tags** for one customer or **Bulk assign discount** for all wholesale customers. See [how to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). A newly created discount can take a few minutes to start applying at checkout. Wait five minutes and try again before looking further. Also check that the name is not used by two discounts of different types (for example a flat discount and a **Total Cart Value** tier both named `gold`). A flat discount and a Total Cart Value, Individual Product Quantity or Loyalty tier with the same name cannot both apply: only one of them is used. Give every discount a different name. ## The product is not covered by the discount **Confirm.** Open the discount with **Edit** and read **Applies to**. With **Select individual products**, **Select collections** or **Select individual variants**, only those items are discounted. For a collection, the product must be in that collection now. **Fix.** Add the product, collection or variant to the selection and select **Save**, or change **Applies to** to **All products**. ## The plan does not include the discount type **Confirm.** Open **Plan** in Process Wholesale. | Discount type | Plan needed | | --- | --- | | Flat discount, quantity tier, cart value tier, cart quantity tier | All plans (Starter: 1 discount; Enterprise and Professional: 100) | | Loyalty tier, variant selection | Enterprise or Professional | | Price list, cost plus markup | Professional | **Fix.** Upgrade to the plan the discount type needs. See [Process Wholesale plans](https://docs.processwholesale.com/account/plans-and-pricing). ## Tag priority or combination settings choose a different discount **Confirm.** Open **Settings > Discount settings**. - **Tag priority** decides between a flat discount and a quantity tier on the same product. With **Prefer tier tag**, a line covered by a quantity tier gets no discount when the quantity is below the first tier, even if a flat discount also covers it. - Checkout reads **Tag priority** from the last time the **Settings** page was saved. Until the **Settings** page has been saved once, checkout behaves as **Prefer tier tag** even though the menu shows **Prefer flat tag**. - When a customer has two flat discounts, only the one with the lowest **Priority** number that covers the product applies to that line. - **Discount combinations** decide whether flat and tier discounts apply on the same order as a price list, a cost plus markup discount or a discount code. By default the price list and cost plus markup discounts are not set to combine with flat and tier discounts. **Fix.** Choose the **Tag priority** you want and save the **Settings** page (the **Save** button appears only after a change, so if the menu already shows your choice, switch it, save, switch it back and save again), start a quantity tier at 1 if every quantity should be discounted, and set the combinations. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) and [using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). ## The quantity or cart threshold is not reached **Confirm.** Open the tier discount and compare its tiers with the cart: - **Individual Product Quantity:** counts the units of one product in the cart, across its variants that the discount covers. Ten units of two different products do not reach a 10-unit tier. - **Total Cart Value:** uses the cart subtotal **after** flat and quantity tier discounts, rounded down to a whole number. A $1,050 cart with 10% off flat is $945 and does not reach a $1,000 tier. - **Total Cart Quantity:** counts the units on the lines the tier covers. **Fix.** Explain the threshold to the customer, or lower the tier's **Min.** value. See [quantity tier discounts](https://docs.processwholesale.com/discounts/quantity-tier-discounts), [cart value tier discounts](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) and [cart quantity tier discounts](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts). ## The loyalty level is not earned or not yet recalculated **Confirm.** A loyalty discount needs the customer to have the loyalty discount's own tag **and** a level tag that Process Wholesale adds (it starts with `pw_loyalty_`). Process Wholesale recalculates levels every 2 hours from the customer's spend or order count within the **Purchase Period**. Voided and expired orders do not count, and a spend or order count of 0 never earns a level. **Fix.** Make sure the customer has the loyalty discount's tag; Process Wholesale adds level tags only for customers who have it. After a qualifying order, allow up to 2 hours. See [how loyalty discounts work](https://docs.processwholesale.com/discounts/loyalty-discounts). ## Cost plus markup: the variant has no unit cost **Confirm.** In Shopify admin, open the product variant and check **Cost per item**. A variant without a cost gets no cost plus markup discount. The discount also never raises a price: if cost plus the markup is at or above the retail price, there is no discount. After you create your first cost plus markup discount, costs take a few minutes to sync. **Fix.** Enter the cost per item on the variant in Shopify admin and wait a few minutes. See [how to price wholesale products at cost plus a markup](https://docs.processwholesale.com/discounts/cost-plus-markup). ## Price list: the variant is not on the list **Confirm.** A price list discounts only the variants it has a price for. Open the price list with **Edit**, or select **Export to CSV**, and look for the variant. If a customer has two price list tags, only one list applies to a variant. **Fix.** Add the variant with its price and save, or use **Update from CSV** for lists with more than 200 products. Give each customer one price list tag. See [how to create a wholesale price list](https://docs.processwholesale.com/discounts/price-lists). ## Related articles - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) --- Source: https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing Section: Troubleshooting Plans: All plans Last verified: 2026-11-11 # Wholesale prices not showing on the storefront When wholesale prices do not seem to show on a Shopify store using Process Wholesale, the most common cause is expected behavior. The Product Wholesale block does not replace the theme's retail price: it adds a wholesale table under it, on product pages only, for logged-in customers who have a customer tag containing `b2b` and a discount tag that applies to the product. The wholesale price is applied at checkout for customers tagged `B2B`. **Quick checks, in order of likelihood** 1. Are you looking for a table under the price, not a changed price? 2. Are you logged in on the storefront as a wholesale customer, not viewing the theme editor? 3. Does the customer have the `B2B` tag and a discount tag that applies to this product? 4. Is the Product Wholesale block on the template this product uses, and saved? 5. Are you looking at a collection page, search results or the home page, where the block cannot go? ## The product page shows the retail price This is expected. The Product Wholesale block leaves the theme's price as it is and adds tables under it, such as `1 - 9 | 10% | $18.00` and `10+ | 20% | $16.00` for a $20.00 product. The customer pays the wholesale price at checkout. **How to confirm:** Log in on the storefront as a wholesale customer with a discount tag and open a product the discount applies to. The table appears a moment after the page loads. **Fix:** None needed. To hide retail prices from customers who are not wholesale, see [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices) (Professional). ## No table for a logged-in customer The Product Wholesale block shows nothing when any of these is true: | Cause | How to confirm | Fix | | --- | --- | --- | | The customer has no tag containing `b2b` | In Shopify admin, open the customer and look at **Tags** | Approve the customer in Process Wholesale under **Customers**, which adds `B2B` | | The customer has no discount tag | The customer's tags include no discount tag from **Discounts** | Assign a discount. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). | | The discount does not apply to this product | Open the discount in Process Wholesale and check **Applies to** (products, collections or variants) | Add the product, or use **All products** | | The product uses a template without the block | In Shopify admin, check which theme template the product uses | Add the Product Wholesale block to that template and select **Save** | | A price list is the only discount and the store is not on Professional | Check **Plan** | Price list rows need Professional | | A price list is the only discount and the variant has no price in it | Open the price list and look for the variant | Add a price for the variant | | A cost plus markup is the only discount and the variant has no unit cost | Check the variant's unit cost in Shopify admin | Set a unit cost for the variant | The theme editor never shows real tables. It always shows example tables, so test on the live storefront in a private window while logged in. Discount tags match the customer's tags exactly, ignoring capitalization: a customer tagged `Wholesale15` matches a discount tag `wholesale15`, but `wholesale-15` does not. ## The table shows a different discount than expected The product discount table shows one product discount at a time, in this order: 1. Cost plus markup 2. Price list 3. Flat discount or quantity tier, chosen by **Settings > Discount settings > Tag priority** when the customer has both: **Prefer flat tag** (the default) or **Prefer tier tag**. Checkout follows **Tag priority** only after the **Settings** page has been saved once; until then it behaves as **Prefer tier tag**. See [which wholesale discount applies](https://docs.processwholesale.com/discounts/discount-priority-and-stacking#flat-discount-versus-quantity-tier-the-tag-priority-setting). **Example.** A customer has a flat 10% discount and a quantity tier of 20% for 10 or more units on a $20.00 product. With **Prefer flat tag** the table shows `Any | 10% | $18.00`. With **Prefer tier tag** it shows `10+ | 20% | $16.00`. When a customer has several flat discounts, the table uses the one with the highest priority on the **Flat Discounts** tab (1 = highest). For several quantity tiers, price lists or cost plus markups that apply, it shows one of them. **Fix:** Change **Tag priority**, the flat discount priority, or the customer's discount tags. See [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). Two display rules can also look unexpected: - For a **Fixed Price** discount, the **Discount** column shows the fixed price itself, not the amount saved. A fixed price of $12 shows `$12.00 | $12.00`. - The product table's quantity column is headed **Minimum Cart Quantity**. For a quantity tier, it counts the units of this product in the cart, all variants together. ## No wholesale price on collection pages, search or the home page The Product Wholesale block can be added only to product templates. Collection pages, search results, the home page, the cart and the cart drawer never show a wholesale table from Process Wholesale. **Fix:** To give wholesale customers a product list with their prices, add the [Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) to a page (Enterprise or Professional). The wholesale price is applied at checkout either way. ## The product page and checkout show different prices The table is a display; checkout applies the discounts. They can differ for these reasons: | Cause | What happens | Fix | | --- | --- | --- | | The customer has a tag containing `b2b` but not the exact tag `B2B`, for example a pending customer tagged `B2B_Registeration` | The table shows, but checkout gives no wholesale discount | Approve the customer so they get `B2B` | | Cart value, cart quantity or loyalty discounts | Checkout adds them on top of the product discount; the table does not include loyalty discounts at all | Expected | | **Prefer tier tag**, with fewer units than the tier's first range | The table shows the tier rows; at checkout that line gets no discount, and the flat discount is not used instead | Start the first tier at 1, or use **Prefer flat tag** | | A Shopify discount code or another automatic discount | Whether it combines is decided by the discount combination settings | See [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations) | | The customer shops in another currency and has a price list or cost plus markup | The table shows those prices in your store currency amount with the customer's currency symbol; checkout converts them | Expected. Tell customers the table shows store-currency amounts for these prices. | | The theme changed the variant without the table noticing | The table still shows the variant the page opened with | Reload the page with the variant selected, or check with your theme developer | If the checkout price is wrong rather than the table, see [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). ## Prices hidden, or not hidden, for the wrong visitors Hide price (Professional) hides prices from every visitor without a tag containing `b2b`, and shows them to everyone with such a tag. | Symptom | Cause | Fix | | --- | --- | --- | | Guests still see prices | The **Hide price** app embed is off, or **Hide prices and buy buttons from non-B2B customers** is not checked and saved | Turn on both: the app embed under **Theme settings > App embeds**, and the setting under **Settings > Customer settings** | | Some prices or buttons still show | The theme uses class names Hide price does not know | Add custom selectors in the Hide price app embed | | Pending applicants see prices | `B2B_Registeration` contains `b2b` | Expected. Use [Lock Content Redirect](https://docs.processwholesale.com/storefront/lock-content) for pages only approved customers may open. | | A customer tagged `Wholesale` cannot see prices | The tag does not contain `b2b` | Approve the customer so they get `B2B` | | A non-wholesale visitor added a product to the cart | The add to cart button with the message still works | Expected. Hide price changes the display only. | See [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). ## Related articles - [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) - [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices) - [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) - [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing) --- Source: https://docs.processwholesale.com/troubleshooting/signup-form-not-working Section: Troubleshooting Plans: All plans Last verified: 2026-11-11 # Wholesale signup form not working When the Process Wholesale wholesale signup form does not appear, will not submit, or applicants never reach **Customers > Pending**, the most common cause is a signup form that does not match your store's Shopify customer account type. Shopify has two types, labeled **Customer accounts** (new customer accounts) and **Legacy** (legacy customer accounts) in Shopify admin under **Settings > Customer accounts**, and Process Wholesale has a different signup form for each. Check the account type first, then work through the causes in this article. ## Quick checks 1. **Account type matches the form.** Shopify admin > **Settings > Customer accounts**. **Legacy**: use the **Wholesale Signup Form** theme block with **Use new customer flow** on **No** (or **Auto**, if the form shows a **Password** field). **Customer accounts**: use the customer account form, or the theme block with **Use new customer flow** set to **Yes**. 2. **The block is on the published theme**, on the page you link to. 3. **The tester is not already pending or wholesale.** Those customers see a message instead of the form. 4. **The captcha is completed** before **Submit**. 5. **For the custom form:** the store is on Enterprise or Professional and **Custom Signup Form** has been saved at least once. 6. **Process Wholesale > Customers > Pending** after a test submission, with **Refresh**. ## "Customer account creation has been disabled" when submitting the signup form Shopify shows the message "Customer account creation has been disabled" when a visitor who is not logged in submits the **Wholesale Signup Form** or **Wholesale Custom Signup** theme block on a store that uses new customer accounts (**Customer accounts** under **Settings > Customer accounts** in Shopify admin), while the block is set up for legacy customer accounts. This is the most common signup form problem. **Why it happens.** The theme blocks submit in one of two ways, decided by the block setting **Use new customer flow**: - **No:** the form shows a **Password** field and sends the application through Shopify's legacy account creation, which is for stores on **Legacy** accounts. On a store using new customer accounts, Shopify answers with this message. - **Yes:** the form has no **Password** field, and Process Wholesale creates the customer account itself. This is the setting for new customer accounts. - **Auto** (the default) acts as **Yes** only when Process Wholesale has recorded that your store uses new customer accounts: when the app was installed, or the last time you saved **Settings** in Process Wholesale. A store that switched to new customer accounts after installing, and has not saved **Settings** in the app since, gets **No**. A form with a **Password** field on a store using new customer accounts is the sign of this problem. Customers who are logged in do not see the message, because their applications always go through Process Wholesale. **How to fix.** 1. In Shopify admin, go to **Online Store > Themes** and select **Customize**. 2. Open the page with the signup form and select the **Wholesale Signup Form** or **Wholesale Custom Signup** block. The signup form shown by the **Quick Buy** block has the same setting. 3. Set **Use new customer flow** to **Yes**. 4. Select **Save**, then open the page while logged out and check that the **Password** field is gone. Saving **Settings** in Process Wholesale also records the current account type, so **Auto** then acts as **Yes**; setting **Yes** on the block is the direct fix. You can also use the customer account form instead: see [how to add the signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). ## The form does not match the customer account type **How to confirm.** In Shopify admin, open **Settings > Customer accounts** and note the selected type. Then compare with what you set up: - **Legacy** store, but the theme form has no **Password** field: the block's **Use new customer flow** resolves to **Yes**. - **Customer accounts** store, but the theme form asks for a **Password**: **Use new customer flow** resolves to **No**. The password is not used by new customer accounts. - **Customer accounts** store with only a customer account form: guests cannot see it, because customer account pages require sign-in. - **Legacy** store with a customer account extension: the extension pages are part of new customer accounts, so legacy customers never reach them. **How to fix.** 1. In the theme editor, select the **Wholesale Signup Form** or **Wholesale Custom Signup** block. 2. Set **Use new customer flow** to **No** for **Legacy**, or **Yes** for **Customer accounts**. Do not rely on **Auto** after switching account types: **Auto** acts as **Yes** when Process Wholesale recorded new customer accounts at install or the last time you saved **Settings** in the app. A store that was on new customer accounts when it installed the app keeps **Auto** on **Yes**, so a **Legacy** store needs **No**. 3. Select **Save**. 4. For new customer accounts, also consider the customer account form. See [how to add the signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). The [overview of the four signup forms](https://docs.processwholesale.com/signup-forms/signup-forms-overview) shows which form fits each account type. ## The signup form is not visible on the storefront **How to confirm.** Open the page while logged out, then while logged in as a test customer who is not wholesale. - **Logged in as a pending customer (`B2B_Registeration`):** the block shows the pending message, by default "Thank you! your wholesale account is currently under review". That is expected. - **Logged in as a wholesale customer (`B2B`):** the block shows "You are logged into your wholesale account" or your own text. That is expected. - **Nothing shows for anyone:** the block is not on the template that the page uses, the section is hidden, or the theme with the block is not published. - **The customer account form does not show for a guest:** customer account pages need sign-in. - **The custom customer account form shows "This feature is only available for Enterprise plan.":** the store is not on Enterprise or Professional. **How to fix.** In the theme editor, open the exact page (or its template) and confirm the block is there and not hidden, then save on the published theme. Test with a customer who has neither `B2B` nor `B2B_Registeration`. On the Quick Buy page, visitors who are not logged in see the signup form unless the Quick Buy block's **What to show for non B2B ?** setting is **Lock Screen**; see [how to set up Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup). ## The signup block is missing from the theme editor **How to confirm.** In the theme editor, select **Add block** in a section and look for the app blocks. - **Wholesale Signup Form** missing: the theme is not an Online Store 2.0 theme, or the template is not a page, collection, product or home page template. - **Wholesale Custom Signup** missing: the store is not on Enterprise or Professional. **How to fix.** Use an Online Store 2.0 theme and a supported template, or upgrade under **Plan** for the custom block. See [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing). ## Error messages when the applicant selects Submit Theme forms show these messages in a red box under the form; most disappear after about eight seconds. On a custom form with a **File Upload** field, the first three captcha messages and the upload error appear in a browser pop-up instead. Those four messages can appear on any theme form. The others appear with the new customer flow and for logged-in applicants; on legacy customer accounts, guests see Shopify's own errors under "Please adjust the following:". | Message | Cause | Fix | | --- | --- | --- | | "Please complete the captcha." | The captcha was not completed | Complete the captcha, then **Submit** | | "The captcha is still loading. Please try again in a moment." | The captcha has not loaded yet | Wait, then **Submit** | | "The captcha couldn't load. Please refresh the page and try again." | An ad blocker, privacy extension or network blocks the captcha | Refresh, or allow the site in the blocker | | "Captcha verification failed. Please try again." | The captcha answer could not be confirmed or expired | Complete a new captcha and submit again | | "Captcha not solved. Please try again." / "Captcha verification required. Please try again." | No captcha answer reached Process Wholesale | Reload the page, complete the captcha and submit again; contact support if it persists | | "Password is not valid" | A logged-in customer on the **Wholesale Signup Form** block entered a password shorter than 5 characters or containing a space | Use at least 5 characters with no spaces | | "An account already exists with this email." with "Please log in to your existing account to apply for wholesale" | A guest used an email that already has a store account | Select the link, log in, then submit the form again | | "Invalid Customer Information." | The logged-in customer's account could not be matched to the form | Log out, log in again and resubmit | | "We couldn't create your wholesale account. Please try again later." | Shopify did not accept the new account, for example an invalid email or phone number, or every business field on the form is hidden | Check the email and phone. Keep at least one business field shown on the form. | | "We couldn't submit your wholesale application. Please try again later." | Shopify did not accept the update to the logged-in customer, or every business field is hidden | Check the customer's details in Shopify admin; keep at least one business field shown | | "There was an error uploading your files. Please try again." | A file upload on the custom form failed | Submit again; see [file uploads](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads) | | "Network error. Please try again." / "There was a problem submitting your application. Please try again." | The connection dropped or the request failed | Submit again | Customer account forms show these messages next to the field or in a red banner: | Message | Cause | Fix | | --- | --- | --- | | " is required", for example "Tax ID is required" | A required field is empty | Fill in the field | | "Feature not enabled on the store" | The store has no Process Wholesale plan | Choose a plan under **Plan** in the app | | "There was an error processing your request. Please try again." | The request failed | Submit again | | "Submitting is not possible in theme editor due to missing customer data!" | You are testing in the editor | Test on the live customer account page | ## The applicant submitted but does not appear in Pending **How to confirm.** In Process Wholesale, open **Customers > Pending**, select **Refresh**, and search for the applicant's email. Then search for the customer in Shopify admin and check their tags. - **On legacy customer accounts:** Shopify creates the account from the form. If Shopify rejected the form, for example because the email already has an account, no account is created and nothing reaches **Pending**. Ask the applicant to log in and submit the form again; logged-in customers can apply. - **The customer exists but has no `B2B_Registeration` tag:** the submission did not complete. Ask the applicant to submit again, or add the customer with **Import customers**. - **The customer has `B2B` already:** they are in the **Active** tab. **How to fix.** For customers who already have an account, either ask them to log in and apply, or move them to **Pending** yourself with **Import customers**. See [how to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers). ## Existing customers cannot sign up **How to confirm.** Ask whether the customer was logged in when they submitted. - **Logged out, with an email that already has an account:** with the new customer flow, the form shows "An account already exists with this email." On legacy customer accounts, the application does not reach **Pending**. - **Already pending or wholesale:** the form shows the pending or logged-in message instead. **How to fix.** Ask the customer to log in first. A logged-in customer sees the form with their name and email filled in, and submitting adds `B2B_Registeration` to their existing account. When the **Wholesale Signup Form** block is set up for legacy customer accounts, it still asks a logged-in customer for a **Password**; any value of at least 5 characters with no spaces works, and their account password does not change. ## Custom fields are not shown **How to confirm.** Open the page with the **Wholesale Custom Signup** block, or the **Wholesale custom signup Form** in customer accounts. - **The block shows the heading and Submit but no fields:** **Custom Signup Form** has never been saved. - **A field you added is missing or optional:** the change was not saved, or **Required ?** did not stay checked on a new field. - **Fields are in an old order in customer accounts:** the form changed after it was last saved. - **Placeholder text is missing:** placeholders are not shown on the forms. **How to fix.** In Process Wholesale, open **Custom Signup Form**, check each field and **Required ?**, make a change if needed to enable the save bar, and select **Save**. Reload the storefront page. See [how to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). ## Related articles - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) - [How the wholesale signup form blocks spam](https://docs.processwholesale.com/signup-forms/signup-form-spam-protection) - [Wholesale emails not being received](https://docs.processwholesale.com/troubleshooting/emails-not-received) - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) --- Source: https://docs.processwholesale.com/troubleshooting/emails-not-received Section: Troubleshooting Plans: All plans Last verified: 2026-11-11 # Wholesale emails not being received When a Process Wholesale wholesale email does not arrive, the usual causes are an email that is turned off in **Settings > Customer settings**, an action that does not send that email, or a message filtered as spam. Process Wholesale sends four application emails: the **New Wholesale Application** alert to you, and the **Application received**, **Application approved** and **Application rejected** emails to the applicant. All four come from `alerts@processwholesale.com`, so add that address to your allowed senders and ask applicants to check their spam folder. ## Quick checks 1. **Spam folder.** Check spam or junk, and allow `alerts@processwholesale.com`. 2. **The right inbox.** The merchant alert goes to the store email in Shopify admin under **Settings > Store details**, not to your login email. 3. **The email is on.** Process Wholesale > **Settings > Customer settings > B2B customer emails**: **Application received**, **Application approved** and **Application rejected** each have a checkbox. 4. **The right action.** Only **Accept B2B** sends the approval email and only **Reject B2B** sends the rejection email. 5. **The application went through.** The applicant is in **Customers > Pending**. ## Which email is sent when | Email | To | From | Sent when | Controlled by | | --- | --- | --- | --- | --- | | **New Wholesale Application: ** | Your Shopify store email | Process Wholesale, `alerts@processwholesale.com` | Right after every accepted application, from a theme form or a customer account form | Always on. No setting. | | **Application received** | The applicant | Your store name, `alerts@processwholesale.com` | After an application. Legacy customer accounts, guest: after a short delay, once the new account exists. New customer flow, logged-in customer or customer account form: right away. | **Application received** checkbox (on by default) | | **Application approved** | The customer | Your store name, `alerts@processwholesale.com` | When you select **Accept B2B** on a pending customer | **Application approved** checkbox (on by default) | | **Application rejected** | The customer | Your store name, `alerts@processwholesale.com` | When you select **Reject B2B** on a pending customer | **Application rejected** checkbox (on by default) | Replies to the customer emails go to the store email address Process Wholesale recorded when the app was installed. You can edit the subject and message of the three customer emails; see [wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails). ## You do not receive the New Wholesale Application alert **How to confirm.** Check **Customers > Pending** for the applicant. Then check the store email in Shopify admin under **Settings > Store details**. **Causes and fixes.** - **The alert went to another address.** Process Wholesale sends the alert to the store email set in Shopify admin. To change where alerts go, change the store email under **Settings > Store details** in Shopify admin. There is no separate alert address in Process Wholesale. - **The alert was filtered.** Look in spam and allow `alerts@processwholesale.com`. - **The application did not go through.** No alert is sent when the application was not accepted, for example after a captcha error, for an email that already has an account ("An account already exists with this email."), or for a customer who was already pending or wholesale. See [wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working). - **The customer was added another way.** **Import customers**, **Return to pending** and adding tags by hand in Shopify admin do not send the alert. - **The custom form shows Google reCAPTCHA (legacy customer accounts).** On stores where Google reCAPTCHA was set up on the custom form earlier, guest applications from a **Wholesale Custom Signup** block that is set up for legacy customer accounts and has no **File Upload** field can reach **Pending** without an alert or an **Application received** email. Check **Customers > Pending** regularly and contact Process Wholesale support to change the reCAPTCHA setup. **What the alert contains.** The heading "New Wholesale Application", the applicant's email, a table of submitted fields and a **View In App** button that opens the **Customers** page. For applications from a theme form, the table shows the name and email, but not the business details or file links; read those under **View details** on the **Customers** page. ## The applicant does not receive the Application received email **How to confirm.** Check that **Application received** is checked in **Settings > Customer settings** and that the applicant is in **Customers > Pending**. **Causes and fixes.** - **The email is turned off.** Check **Application received** and save **Settings**. - **Legacy customer accounts timing.** For a guest on legacy customer accounts, Process Wholesale waits until Shopify has created the account. It checks about 1 minute after the submission, then again about 2 and 10 minutes later. If no account exists after about 13 minutes, no email is sent. - **You already reviewed the application.** If you approve or reject an applicant on legacy customer accounts before the check runs, the received email is skipped. - **The application did not go through**, or the applicant was already pending or wholesale. - **Spam.** Ask the applicant to check spam. A double submission sends one received email, not two. ## The customer does not receive the Application approved email **How to confirm.** Open the customer in Shopify admin. Check their email address and tags. **Causes and fixes.** - **The email is turned off.** Check **Application approved** in **Settings > Customer settings** and save. - **The customer was not pending before approval.** The approval email is sent only when **Accept B2B** is used on a customer tagged `B2B_Registeration`. Customers tagged `B2B` by hand in Shopify admin do not get it. - **The customer has no email address.** - **Spam.** Ask the customer to check spam. ## The customer does not receive the Application rejected email **Causes and fixes.** - **The email is turned off.** Check **Application rejected** in **Settings > Customer settings** and save. - **A different action was used.** Only **Reject B2B** (on one row or in bulk on the **Pending** tab) sends the rejection email. **Remove B2B access**, **Remove B2B** and **Return to pending** never send email. - **The customer has no email address**, or the message went to spam. ## When no email is sent by design | Action | Emails sent | | --- | --- | | **Import customers** | None | | **Return to pending** | None | | **Remove B2B access** / **Remove B2B** | None | | **Manage discount tags**, **Bulk assign discount** | No application emails (bulk assign sends you a results email) | | Adding `B2B` or `B2B_Registeration` by hand in Shopify admin | None | | An application rejected by the captcha | None | | A guest using an email that already has an account | None | | A customer who was already pending or wholesale submits again | None | | Any customer email with its checkbox off | That email is skipped | Process Wholesale also emails you when you reach 10, 25 and 50 approved wholesale customers. ## Related articles - [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails) - [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) - [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) --- Source: https://docs.processwholesale.com/troubleshooting/theme-blocks-missing Section: Troubleshooting Plans: All plans Last verified: 2026-11-11 # Process Wholesale blocks missing from the theme editor When a Process Wholesale block is missing from the Shopify theme editor, the most common cause is a theme that is not Online Store 2.0, or a template where that block cannot go. Process Wholesale blocks appear under **Add block > Apps** only in sections that accept app blocks, only on the templates each block supports, and only on plans that include the block. Hide price is an app embed, so it is under **Theme settings > App embeds**, not under **Add block**. **Quick checks, in order of likelihood** 1. Is the theme an Online Store 2.0 theme? 2. Are you on the right template type for the block (see the table in "The block is not offered on this template")? 3. Are you looking for an app embed among blocks, or the reverse? 4. Does your plan include the block? 5. Does the section you selected accept app blocks? 6. After adding the block, did you select **Save** in the theme editor? ## The theme is not Online Store 2.0 Process Wholesale is compatible only with Online Store 2.0 themes. Its blocks are app blocks for JSON templates, and Hide price is an app embed. A vintage theme offers neither. **How to confirm:** In the theme editor, select **Add block** in a section of a product or page template. If there is no **Apps** tab anywhere, the theme does not support app blocks. **Fix:** Use an Online Store 2.0 theme, or ask your theme developer to update the theme to JSON templates. ## The section does not accept app blocks Even in an Online Store 2.0 theme, some sections do not accept app blocks. **How to confirm:** **Add block** in that section has no **Apps** tab, while another section has one. **Fix:** Add the block to a section that accepts app blocks. For the Product Wholesale block, use the main product information section. For a page template, use a section whose **Add block** menu has an **Apps** tab. ## The block is not offered on this template Each Process Wholesale block can be added only to certain template types, including their alternate templates (for example `page.wholesale`). | Block | Templates | | --- | --- | | **Product Wholesale** | Product | | **Quick Buy** | Page | | **Wholesale Signup Form** | Page, collection, home page, product | | **Wholesale Custom Signup** | Page, collection, home page, product | | **Lock Content Redirect** | Page, collection, product | | **B2B Redirect Block** | Customer account page (legacy customer accounts) | | **Hide price** | App embed, for the whole theme | **Fix:** Switch the template in the template selector at the top of the theme editor. For example, Quick Buy is not offered on a product template: create a page, give it a page template, and add Quick Buy there. See [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). ## Looking for an app embed among blocks, or the reverse Hide price is the only Process Wholesale app embed. It is switched on under **Theme settings > App embeds** and never appears under **Add block**. All other Process Wholesale items are app blocks, which appear under **Add block > Apps** and never under **App embeds**. **Fix:** For Hide price, open **Theme settings > App embeds** in the theme editor and switch on **Hide price**. Or use the **Hide price** link in Process Wholesale under **Settings > Customer settings**, which opens that panel. See [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). ## The plan does not include the block Some blocks are offered only on certain plans. On other plans they are not listed in the theme editor, or they show nothing on the storefront. | Block | Plans that include it | | --- | --- | | **Hide price** | Professional | | **Lock Content Redirect** | Enterprise or Professional | | **Wholesale Custom Signup** | Enterprise or Professional | | **B2B Redirect Block** | Enterprise or Professional | | **Quick Buy** | Enterprise or Professional | | **Product Wholesale**, **Wholesale Signup Form** | All plans | **How to confirm:** Check your plan under **Plan** in Process Wholesale. On the Dashboard, a card with a lock icon and an **Unlock** link is not included in your plan. **Fix:** Upgrade under **Plan**. Current prices are shown on the Shopify plan page that opens from **Plan**. On Enterprise, the **Hide price** card on the Dashboard shows **Enable**, but the Hide price app embed is listed in the theme editor only on Professional. ## The Dashboard shows OFF although the block is installed The **App Status** cards on the Process Wholesale Dashboard read your published theme's saved files. A card shows **OFF** in these cases even when you added the block: - **The block is in a theme that is not published.** Only the live theme is checked. - **The theme editor change was not saved.** - **The block or its section is hidden.** A hidden block, or a block inside a hidden section or group, counts as off. - **The Product Wholesale block is on an alternate product template only.** The **Product block** card checks the default product template. Add the block to the default product template too if you want the card to show **ON**. - **The signup form or Quick Buy block is on a template that is not a page.** The **Signup form** and **Quick buy** cards check page templates only. A Wholesale Signup Form or Wholesale Custom Signup block on the home page, a collection or a product page works but reads **OFF**. - **The theme has a very large number of templates.** The cards check up to 1,250 page, product, collection and customer account template files. A block in a template beyond that reads **OFF**. - **Process Wholesale could not read the theme.** Then every block in the theme reads **OFF**. Reload the Dashboard later. **Fix:** The card is information only. When the block shows on the storefront for the right customer, the feature works. See [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status). ## The block is visible in the theme editor but not on the storefront Most Process Wholesale blocks show something only to certain visitors. Test while logged in as the right kind of customer, in a private browser window. | Block | What the theme editor shows | Who sees it on the storefront | | --- | --- | --- | | **Product Wholesale** | Three example tables with sample rows | Logged-in customers with a tag containing `b2b` who have a discount tag for that product. Guests see nothing. | | **Quick Buy** | The order form with a warning that discounts are not applied in the theme editor. On Starter: "Please upgrade your plan to access this feature." | Logged-in customers tagged `B2B` see the form. Guests and others see the signup form or a lock screen; pending customers see the pending message. On Starter nothing shows. | | **Wholesale Signup Form**, **Wholesale Custom Signup** | The form | Everyone sees the form, except logged-in `B2B` customers (who see "You are logged into your wholesale account") and pending customers (who see the pending message). | | **Lock Content Redirect** | Nothing; it never redirects in the theme editor | It has no visible content. It sends visitors without access to the Redirect URL. | | **B2B Redirect Block** | Nothing | It has no visible content. It redirects logged-in customers with a tag containing `b2b` from the account page, at most once every 12 hours per browser, when a Redirect URL is saved in **Settings > Customer settings**. | | **Hide price** | Nothing | It hides prices from visitors without a tag containing `b2b`, only when **Hide prices and buy buttons from non-B2B customers** is also checked and saved in Process Wholesale. | Also check that the product, page or collection you open on the storefront uses the template where you added the block. For the Product Wholesale block specifically, see [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing). ## Related articles - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference) - [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) - [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility) - [Wholesale prices not showing on the storefront](https://docs.processwholesale.com/troubleshooting/wholesale-prices-not-showing) --- Source: https://docs.processwholesale.com/troubleshooting/checkout-problems Section: Troubleshooting Plans: All plans Last verified: 2026-11-11 # Checkout problems for wholesale customers When a Process Wholesale checkout rule does not behave as expected, the most common cause is the customer: every checkout feature applies only to a customer who is logged in and has the customer tag `B2B`. Guests, retail customers and pending customers tagged `B2B_Registeration` always get the retail checkout. The second most common cause is the plan: minimums, hidden payment methods, wholesale shipping and net terms need Enterprise or Professional. This page lists each symptom with how to confirm the cause and how to fix it. **Quick checks**, in order of likelihood: 1. The customer is logged in, not checking out as a guest. 2. The customer has the tag `B2B` in Shopify admin (not only `B2B_Registeration`). 3. The store is on Enterprise or Professional (Process Wholesale > **Plan**). 4. The setting is turned on and was saved ("Settings updated" appeared). 5. You are testing in checkout, not on the cart page. ## Minimum order not enforced **How to confirm.** Log in as a customer tagged `B2B`, add less than the minimum and go to checkout. Minimum messages never appear on the cart page. **Causes and fixes.** - **The customer is not wholesale.** Open the customer in Shopify admin and confirm the tag `B2B`. Approve pending customers under **Customers** in Process Wholesale. - **No Apply to option saved (minimum order quantity).** On a store that has never chosen a value, **Apply to** can show **Cart** while nothing is saved, and the rule is not enforced. Under **Settings > Checkout rules**, select a different **Apply to** option, then the one you want, and select **Save**. See [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity). - **The amount is empty or 0 (minimum order amount).** Enter an amount greater than 0 and select **Save**. See [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount). - **The selected product is not in the cart.** With **Specific products**, products that are not in the cart are not checked. This is expected. - **The plan.** Minimums are enforced only on Enterprise or Professional. ## Minimum enforced for the wrong customers **How to confirm.** Open the blocked customer in Shopify admin and look at their tags. **Fix.** Minimums apply to every customer with the tag `B2B`, in any capitalization (`b2b`, `B2b`). Remove the tag from customers who are not wholesale. There is one minimum for all wholesale customers; Process Wholesale cannot exempt a single wholesale customer. If the quantity rule blocks more than expected, check the **Apply to** mode: **All products** applies the minimum to every product in the cart, while **Cart** counts the whole cart. ## Wholesale customers see no shipping options or are missing a rate **How to confirm.** Log in as a customer tagged `B2B` and enter an address in checkout. Compare the options shown with your selections on the Process Wholesale **Shipping** page. **Causes and fixes.** - **No selected option for that address.** Wholesale customers see only the options you selected. Select at least one rate in every zone or market they ship to, then select **Save**. - **Pickup or local delivery not selected.** Pickup locations are selected per location in **Local Pickup**, and local delivery with the **Local delivery** checkbox. Unselected ones are hidden from wholesale customers. - **The rate was renamed.** Selections are stored by name. Select the renamed rate again and save. - **Exact names in select mode.** A rate matches only with the exact selected name. For carrier rates that are not listed, switch to **Manual entry (recommended for stores with many rates)** and enter part of the rate's checkout name. - **Empty manual list.** With **Manual entry** and no names, every option is hidden from wholesale customers. Add names or switch back to **Select from existing shipping methods**. See [wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping). ## Retail customers see no shipping options or are missing a rate **How to confirm.** Check out as a guest and compare the options with the Shipping page. **Causes and fixes.** - **Every option for that address is selected as wholesale.** Retail customers see only unselected options. Leave at least one option unselected in each zone or market. - **Local delivery is checked.** **Local delivery** makes all local delivery options wholesale-only. Clear it if retail customers should keep local delivery. - **A manual name matches too much.** In manual entry, a name such as `Ground` matches every option containing "ground", which is then hidden from retail customers. Use a longer, more specific name. ## A shipping rate disappeared for everyone **How to confirm.** Check out once as a wholesale customer and once as a guest, with the same address. Process Wholesale's shipping filter shows every option to exactly one of the two groups, so a rate missing for both is not hidden by the filter. **Causes and fixes.** - **Shopify does not return the rate for that address.** Process Wholesale only shows or hides rates that Shopify returns. Check the rate's zone or market, conditions and status in Shopify shipping settings. - **The rate was renamed.** A renamed wholesale rate no longer matches your selection, so it moves to retail customers and disappears for wholesale customers. Select the new name on the Shipping page and save. - **To rule out the filter,** clear **Enable shipping methods**, select **Save** and check out again. If the rate is still missing, the cause is in Shopify's shipping settings. ## Payment method still visible or wrongly hidden **How to confirm.** Log in as a customer tagged `B2B` and open checkout. Compare each payment method name with your list under **Settings > Checkout rules > Hide payment methods**. **Fixes.** - **Still visible:** the name must match exactly, including capitalization, spaces and punctuation. Copy the name from checkout, add it again with Enter, and select **Save**. Confirm **Hide specific payment methods from B2B customers** is checked. - **Still visible for retail customers:** this is expected. The setting hides methods only from wholesale customers. - **Wrongly hidden:** remove the name with the **x** on its tag and select **Save**. See [hide payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods). ## Net terms not offered **How to confirm.** Log in as a customer tagged `B2B`, open the Quick Buy form, select **View Order** and look for the **Payment terms** row on the **Order details** page. **Causes and fixes.** - **Looking in the wrong place.** Process Wholesale offers payment terms only on the Quick Buy order details page, not on product pages or in the cart. - **Net terms are off.** Check **Enable net payment terms in the Quick buy table.** under **Settings > Net terms** and select **Save**. - **The customer lacks `B2Bnetterms`.** With **Allow net terms for specific customers only** on, only customers with this tag see terms. Add it with **Select Customers** or in Shopify admin. - **The tag was removed by the picker.** Saving **Select Customers** removes `B2Bnetterms` from every wholesale customer not selected. Before saving the picker, open every page with **Next** so customers who already have the tag stay selected. See [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms). ## Customer cannot check out with Force Payment Terms on **How to confirm.** On the Quick Buy order details page, the customer sees "Please select a payment term to proceed with your order." and no checkout button. **Causes and fixes.** - **The customer sees no term buttons.** With both **Force Payment Terms** and **Allow net terms for specific customers only** on, customers without `B2Bnetterms` get no terms and no checkout button. Turn off one of the two settings, or add `B2Bnetterms` to the customer. - **The customer wants to pay now.** With **Force Payment Terms** on, every Quick Buy order needs a term. Turn the setting off to let customers send Quick Buy orders to the cart and pay at checkout. ## Tax still charged or not charged **How to confirm.** Open the customer in Shopify admin and check whether they are tax exempt. **Causes and fixes.** - **Charged to a wholesale customer:** the customer was tagged `B2B` outside Process Wholesale (in Shopify admin or by import), so approval never set the exemption. Under **Settings > Customer settings**, clear **B2B customer tax exemption**, select **Save**, then check it again and select **Save**. This reapplies the exemption to your wholesale customers. Saving can take a while for many customers; when the update takes more than 10 seconds, the page shows the estimated time. To fix one customer, update them on the **Customers** page, for example with **Manage discount tags**: every action there sets the customer's tax-exempt status to match the setting. - **Not charged to a customer who should pay tax:** with the setting on, customers you accept, reject, return to pending, remove or whose discount tags you manage on Process Wholesale's **Customers** page are set to tax exempt, including customers you reject. Clear the tax exemption on that customer in Shopify admin. See [tax-exempt wholesale customers](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers). ## Message appears in the wrong language **How to confirm.** Note the language the customer's checkout is in. **Causes and fixes.** - **The checkout language has no translation.** Minimum order messages are translated into German, Spanish, French, Italian, Norwegian, Portuguese (Brazil and Portugal) and Swedish. Every other language gets English. - **Portuguese without a region.** A Portuguese checkout without a region gets the Brazilian Portuguese text. - **Discount labels stay in your language.** Labels such as `PW: wholesale15` contain your discount tag names and are not translated. Name discount tags in the words you want customers to see. The wording of the messages is fixed. All texts are listed in the [checkout messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference). ## Related articles - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) - [Quick Buy problems and fixes](https://docs.processwholesale.com/troubleshooting/quick-buy-problems) --- Source: https://docs.processwholesale.com/troubleshooting/price-list-import-problems Section: Troubleshooting Plans: Professional Last verified: 2026-11-11 # Price list CSV import problems Most Process Wholesale price list import problems come from the file: a price column with an unrecognized header (such as `Variant Price` from a Shopify product export), SKUs that do not match the store, or thousands separators in prices. Problems with the list itself usually come from a customer missing the `B2B` tag or the list's tag, or from saving a list of more than 200 products in the editor. Price lists need the Professional plan. Find your symptom below. **Quick checks** 1. The store is on the Professional plan. 2. The file has a header row with a price column (`Price` or `Fixed Price`) and a `SKU` or `Handle` column. 3. Prices have no thousands separators: `1299`, not `1,299`. 4. The customer is logged in and has both the `B2B` tag and the price list's tag. 5. The list has 200 products or fewer if you save it from the editor. 6. No other import is running. ## CSV file rejected as soon as it is added The import window shows **Couldn't detect the required columns. The file needs a price column (e.g. “Fixed Price” or “Price”) and at least one of “SKU” or “Handle”.** **Confirm it.** Open the file and look at the first row. Process Wholesale accepts these headers, ignoring capitals: `sku`, `skus`, `variant sku` for SKU; `handle`, `url handle`, `product handle`, `slug`, `url handle slug` for Handle; `fixed price`, `price`, `wholesale price`, `wholesale`, `amount` for price. **Fix it.** - A Shopify product export has its price in `Variant Price`, which is not accepted. Rename that header to `Price`. - Make sure the header is in the first row, with no title rows above it. - If the window shows **Failed to parse the CSV file.**, save the file again as CSV (comma separated) from your spreadsheet program. The full list is in the [Price list CSV format reference](https://docs.processwholesale.com/reference/price-list-csv-format). ## Some price list rows are skipped or unmatched The preview shows **{count} skipped (missing key or invalid price)**, or the result shows **{count} unmatched**. **Confirm it.** After the import, select **Download unmatched rows**. The file `unmatched-.csv` lists each row with its line number and reason, for up to 2,000 rows. **Fix it by reason.** | Reason | Fix | | --- | --- | | Invalid price | Enter a number in the price cell, such as `12.50`. | | Negative price | Enter 0 or a positive price. | | SKU matches multiple variants in store | Give each variant a unique SKU in Shopify admin. | | Handle has multiple variants — provide a SKU | Add the variant's SKU. A handle alone matches only products with one variant. | | No matching SKU or handle in store | Check the SKU and handle against Shopify admin for typos, renamed SKUs or deleted products. | | Row is missing both SKU and handle | Add a SKU or handle, or delete the row. | Then upload the complete, corrected file with **Update from CSV**. Upload all rows, not only the fixed ones, because an update replaces the whole list. If no row matched at all, the import fails with **No rows matched a product by SKU or Handle**. Check that the SKU or Handle column holds your store's values and not, for example, a supplier's item numbers. ## The price list import will not start The import window shows an error after you select **Import prices** or **Update prices**. | Message | Cause | Fix | | --- | --- | --- | | Couldn't start the import. A store export may already be running — please try again in a minute. | Another import is running in your store | Wait a minute and try again. Run one import at a time. | | A price list with the tag name "" already exists. Please use a different tag name. | **Import from CSV** was used with the name of an existing list | Enter a new name, or open the existing list and use **Update from CSV**. | | Enter a valid price list name (letters and numbers only, no "B2B") before importing. | The **Name** field is empty or invalid | Enter a name with lowercase letters and numbers only. | | Imports are limited to 50000 rows. | The file has more than 50,000 rows | Remove rows you do not need. Do not split one list across several files: each **Update from CSV** replaces the list. | | The CSV has no rows to import. | The file has only a header | Add data rows. | | Couldn't start the import. Please try again. | The connection was interrupted | Try again. | ## The price list import seems stuck The progress bar stays on **Starting…**, **Reading your product catalog…** or **Publishing prices to checkout…**. **Confirm it.** The import runs in the background, and the window says it "may take a minute for large catalogs". Stores with many products take longer. **Fix it.** - Wait at least 20 minutes. An import that was held up continues on its own within about 20 minutes of its last progress. Reading a very large catalog takes longer. - You cannot close the import window while it runs, but you can leave the page. The import keeps running. Open the list later from the **Price Lists** tab to check its products. - If progress has not moved after 20 minutes, reload the app and open the **Price Lists** tab. If a new list with your name appears with no products, open it and use **Update from CSV** with the same file. Otherwise, start the import again. ## Prices imported 1,000 times too small A product meant to cost 1,299 shows a list price of 1.299 or similar. **Cause.** Process Wholesale treats a comma on its own as a decimal separator, so `1,299` is read as 1.299. A value with both a comma and a dot is read correctly: `1,299.99` and `1.299,99` are both 1299.99. > **Important:** A list price of 1.299 instead of 1,299 makes that product almost free for customers on the list. Fix the file and update the list right away. **Fix it.** Remove thousands separators from the price column (format the column as a plain number with no separators), then upload the complete file with **Update from CSV**. Check a few prices in the editor or in an export afterward. ## The wrong price at checkout **A customer pays the retail price.** - The customer is not logged in, or is missing the `B2B` tag or the price list's tag. Open the customer in Shopify admin and check both tags. The list tag must be spelled exactly like the price list name. Pending customers tagged `B2B_Registeration` (spelled this way) pay retail until you approve them. - The variant is not on the list. Open the list and check that the product and every variant has a price. - The store is not on the Professional plan. **A customer pays a different list price than expected.** - The customer has more than one price-list tag. The **Priority** order on the **Price Lists** tab does not decide which list checkout uses, and Quick Buy can show a different list price than checkout charges. Remove all but one price-list tag from the customer. - The list was updated from a file with a wrong price. Export the list and check the `Price` column. - A deleted price list had the same name. When a list is deleted, its prices stay on the products, and a new list with the same name brings them back for products the new list does not price. Give new lists a new name, or add those products to the new list with the right price. **The customer pays in another currency.** Checkout converts the list price at Shopify's exchange rate for that checkout. The Product Wholesale block and Quick Buy show the list amount without converting it, so the storefront and checkout amounts differ for these customers. For discounts in general, see [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). ## The price list does not apply to a customer **Confirm it.** In Shopify admin, open the customer and check the tags. Both `B2B` and the list's name, for example `wholesale`, must be there. **Fix it.** Add the list's tag with **Manage discount tags** on the Process Wholesale **Customers** page, with **Bulk assign discount**, or by hand in Shopify admin. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). If the customer is still pending, approve them first. Make sure the customer logs in before checking out. ## Products missing from a price list after saving in the editor The **Products** count dropped after you edited a list and selected **Save**, or after an update. **Cause.** The editor loads at most 200 products, and at most 200 variants of each product. Saving from the editor removes the products and variants it did not load. **Update from CSV** also removes every product that is not matched in the file. **Fix it.** 1. Rebuild the full list in a CSV file, from your own records or an earlier export. 2. Open the list and select **Update from CSV**, then upload the complete file. 3. From then on, change lists with more than 200 products only with **Export to CSV** and **Update from CSV**, never with **Save** in the editor. ## Price list export file shorter than expected **Causes.** - Variants that were deleted from your store are left out of the export. - An export that is interrupted can download as a shorter file without an error message. **Confirm it.** Open the file and check that the number of rows matches the number of variants you expect on the list. An interrupted export can end on a complete row, so count the rows rather than looking at the last one. **Fix it.** Select **Export to CSV** again. If the file is still short and no products were deleted, try again later. > **Important:** Do not upload a partial export with **Update from CSV**. Every product missing from the file is removed from the list. ## Related articles - [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import) - [Price list CSV format reference](https://docs.processwholesale.com/reference/price-list-csv-format) - [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) --- Source: https://docs.processwholesale.com/troubleshooting/quick-buy-problems Section: Troubleshooting Plans: Enterprise, Professional Last verified: 2026-11-11 # Quick Buy problems and fixes When the Process Wholesale Quick Buy order form does not behave as expected, the cause is usually the plan, the customer's tags or a block setting. Quick Buy shows only on the Enterprise or Professional plan, only on a page template, and only to logged-in customers with the exact customer tag `B2B`. Prices in the form are a preview: Shopify checkout sets the final price. **Quick checks**, in order of likelihood: 1. The store is on Enterprise or Professional (**Plan** in Process Wholesale). 2. The customer is logged in and has the tag `B2B` in Shopify admin, plus a discount tag. 3. The product is active, published to the Online Store and, if the block uses **Wholesale Collection**, in that collection. 4. You are testing on the live storefront, not in the theme editor. 5. The customer reloaded the Quick Buy page. ## Quick Buy is not available or shows an upgrade message **Symptom.** The Quick Buy page is blank for customers, or the theme editor shows "Please upgrade your plan to access this feature." and "This message is only shown in development." **Cause.** Quick Buy needs the Enterprise or Professional plan. On Starter the block renders nothing on the storefront and shows the upgrade message in the theme editor only. **Fix.** Upgrade under **Plan** in Process Wholesale. Current prices are shown on the Shopify plan page that opens from **Plan**. **Block not in the Apps list.** Quick Buy can only be added to **page** templates. Switch the theme editor to a page template, then **Add block > Apps > Quick Buy**. See [how to set up Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup) and [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing). ## The Quick Buy form is not visible to a customer **Symptom.** A customer sees the signup form, the lock screen or "Thank you! your wholesale account is currently under review" instead of the form. **Cause and fix:** | What the customer sees | Cause | Fix | | --- | --- | --- | | Signup form or lock screen | Not logged in | Ask the customer to log in. | | Signup form or lock screen while logged in | No `B2B` tag. A tag that only contains the letters, such as `B2B-gold`, does not count. | [Approve the customer](https://docs.processwholesale.com/customers/approve-or-reject-applications) or add the tag `B2B` in Shopify admin. | | The pending approval message | Tagged `B2B_Registeration` (pending) and not `B2B` | Approve the customer in Process Wholesale under **Customers**. | Quick Buy accepts `B2B` in any capitalization (`B2B`, `b2b`, `B2b`, `b2B`). It is stricter than the [Product Wholesale block](https://docs.processwholesale.com/storefront/product-page-wholesale-prices), which also shows content to pending customers. ## A product is missing from Quick Buy Check these causes in order: 1. **Not active or not on the Online Store.** Quick Buy lists active products published to the Online Store sales channel. Publish the product. 2. **Not in the Wholesale Collection.** When the block has a **Wholesale Collection**, only products of that collection are listed. Add the product to the collection, or clear the setting to show all products. 3. **Search does not match.** With a collection, search matches words in the product title or any variant SKU. Without a collection, search uses Shopify's product search. Try the exact title or SKU. 4. **Beyond 2,000 products.** With a collection, search looks through the first 2,000 products of the collection. Use a smaller collection. 5. **On another page.** The form shows **Products per page** products at a time. Browse with the page links or **Next »**. **Draft products appear, marked "Not available".** **Products sort order** is set to something other than **None**, and a sorted collection also lists drafts. Set the sort order to **None** or remove drafts from the collection. ## The price in Quick Buy is wrong or differs from checkout **Symptom.** The price or **Final price** in Quick Buy does not match the cart, checkout or draft order. **Cause.** Quick Buy calculates a preview in the browser. Shopify checkout applies the Process Wholesale discounts with its own rules, and checkout is the price the customer pays. The common causes are: - The customer has several discount types (for example cost plus markup and a flat discount). The form shows one per product; checkout can combine them, depending on **Settings > Discount settings** combinations. - The customer has several quantity tiers, or both a cart value tier and a cart quantity tier. - A loyalty discount: the form picks the level by units in the order, and shows a percentage level as an amount ("$10.00 off" for 10%) in the **Cart Discount Tiers** box. - The customer shops in another currency: price list prices are not converted in the form, and the cost plus markup is increased by the exchange rate. - On the order details page, products priced with cost plus markup can show the regular price. - A cost plus discount limited to some variants shows on every variant of the product in the form. - A discount code or another Shopify discount applies at checkout. **Fix.** Use the checkout total as the reference. For each case and what to do, see [why the Quick Buy price can differ from checkout](https://docs.processwholesale.com/storefront/quick-buy-prices#why-the-quick-buy-price-can-differ-from-checkout). If checkout itself has no wholesale discount, see [wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). **No price list prices at all.** Price lists show in Quick Buy only on the Professional plan. **No discounts in the theme editor.** The theme editor has no logged-in customer, so it always shows regular prices. Test on the storefront. ## Prices show without discounts and buttons do nothing **Symptom.** On the storefront, the table shows regular prices, the **Discount** column stays empty and **Add to order** does nothing. **Cause.** Quick Buy could not load the store's wholesale data. **Fix.** Reload the page. If the problem continues, [contact Process Wholesale support](https://docs.processwholesale.com/account/contact-support). ## The quantity cannot be increased | Where | Cause | What the customer sees | Fix | | --- | --- | --- | --- | | Form | The variant tracks inventory, does not allow selling when out of stock, and the quantity reached the stock level | **+** stops; a typed number is lowered to the stock | Add stock or allow selling when out of stock in Shopify. | | Form | The variant is not available for sale | "Out of stock", controls disabled | Restock the variant. | | Form | The product is a draft (shown because a sort order is set) | "Not available", controls disabled | Make the product active, or set **Products sort order** to **None**. | | Order details page | The quantity reached the stock | "Cannot add more than {n} items." or "Only {n} items are available in stock." | Add stock. | | **Buy again** or reorder review | The order already holds the stock | "Not enough stock" or "Your order already has all [n] in stock. Skipped." | Add stock, or reduce the quantity in the order. | | Theme editor | Inputs are disabled in the theme editor | Nothing responds | Test on the storefront. | Quick Buy has no minimum quantity, quantity increment or case pack rule of its own. A quantity that stops is always one of the cases in this table. > **Note:** **Add to order** on the form compares the typed quantity with stock but does not count what is already in the order, so a customer can save more than the stock by adding twice. The order details page shows the stock limit. ## The customer's Quick Buy order is lost or different **Symptom.** Items added with **Add to order** are gone, or a customer sees a different order. **Causes and fixes:** - **Another device or browser.** The saved order belongs to the browser where it was created, not to the customer account. Ask the customer to use the same browser, or add the items again. Anyone who logs in on that same browser sees the same saved order. - **Checkout was started.** The saved order is cleared when the customer selects **Add to cart** or **Checkout**, before the cart or invoice opens. If adding to the cart failed, or the customer landed on their account page instead of a draft order invoice, the order is already cleared and the items have to be added again. - **Quantities typed but not added.** Only lines saved with **Add to order** are kept. **View Order** does not save typed quantities. - **Deleted products.** Lines for products or variants deleted in Shopify are removed from the order automatically. - **Order changed in another tab.** The customer sees "Your order was changed somewhere else, so it's been refreshed. Check it and try again." The page shows the latest order; the customer repeats the last step. See [the saved Quick Buy order](https://docs.processwholesale.com/storefront/quick-buy-ordering#the-saved-quick-buy-order). ## Checkout is blocked because some lines cannot be loaded **Symptom.** The order details page shows "Some items in your order couldn't be loaded, so it can't be checked out yet. Reload the page to try again." and checkout does not continue. **Cause.** Product details for some saved lines could not be loaded. Quick Buy keeps those lines rather than dropping them, hides them and blocks checkout so nothing is lost. **Fix.** Reload the page. If the message continues, [contact Process Wholesale support](https://docs.processwholesale.com/account/contact-support). ## Net payment terms are not shown **Symptom.** The order details page has no **Payment terms** row. **Causes and fixes:** 1. **Net terms are off.** In Process Wholesale, go to **Settings > Net terms** and check **Enable net payment terms in the Quick buy table.** This needs Enterprise or Professional. 2. **No terms are selected.** Select up to 3 terms in **Select payment terms (maximum 3):** and save. 3. **Customer-based terms are on.** With **Allow net terms for specific customers only** checked, only customers tagged `B2Bnetterms` see terms. Add the customer with **Select Customers**. 4. **Wrong page.** Terms appear on the order details page (after **View Order**), not on the form. See [how to offer net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms). ## The checkout button is missing with Force Payment Terms **Symptom.** The order details page shows "Please select a payment term to proceed with your order." and has no **Add to cart** or **Checkout** button. **Cause.** **Force Payment Terms** hides the checkout button until the customer selects a term. When **Allow net terms for specific customers only** is also on and the customer is not tagged `B2Bnetterms`, the customer sees no terms and can never check out. The app warns about this combination on the **Net terms** settings page. The setting's help text mentions the "Add to Order" button; the button it hides is the order details page's checkout button. **Fix.** Turn off one of the two settings, or tag the customer `B2Bnetterms` with **Select Customers**. ## Buy again is empty or missing orders | Symptom | Cause | Fix | | --- | --- | --- | | No **Buy again** tab and no last order card | Both settings are off, the customer is not logged in, or Process Wholesale has no recorded orders for the customer | Turn on **Show Buy again tab** or **Show last order**. Orders appear once the customer places one after Process Wholesale started recording the store's orders. | | Older orders are missing | Quick Buy uses the 10 most recent recorded orders; orders from before the app recorded the store's orders are not imported | No fix. | | "None of the products you've ordered before are available right now." | The past items are deleted, draft, archived, unpublished, out of stock or outside the **Wholesale Collection** | Restock or republish the products. | | An item shows "Not sold on this page. Skipped." | The item is outside the block's **Wholesale Collection** | Add it to the collection. | | An item shows "No longer available. Skipped." | Deleted, draft, archived, not on the Online Store, or beyond the 60 products checked per load | Republish the product. | | An order has no number, or a cancelled order still shows | The order is older than 60 days, so Quick Buy cannot read its number or cancellation | No fix. | | "Couldn't load your past orders. Please refresh the page." | Product details could not be loaded | Reload the page. | See [how reordering works in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder). ## Text in Quick Buy is not translated **Symptom.** Parts of Quick Buy are in English on a store in another language. **Cause.** Quick Buy's main texts are translated into German, Spanish, French, Italian, Norwegian, Portuguese (Brazil and Portugal) and Swedish. These parts are always in English: - All reorder texts: the last order card, the **All products** and **Buy again** tabs, the **Buy again** table and the reorder review - Stock messages: "Cannot add {qty} items. Only {stock} available.", "{title} is out of stock.", "Cannot add more than {n} items.", "Only {n} items are available in stock.", "Cannot add draft product: {title}" - "Enter quantity", "No results found", "Search error occurred", "« Prev", "Next »" - Discount labels "% off", "off" and "each" - The block settings in the theme editor See [languages supported by Process Wholesale](https://docs.processwholesale.com/account/languages). ## Related articles - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) - [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering) - [How Quick Buy calculates the prices it shows](https://docs.processwholesale.com/storefront/quick-buy-prices) - [How reordering works in Quick Buy (Buy again)](https://docs.processwholesale.com/storefront/quick-buy-reorder) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) --- Source: https://docs.processwholesale.com/troubleshooting/analytics-numbers-differ Section: Troubleshooting Plans: All plans Last verified: 2026-11-11 # Why wholesale analytics differ from Shopify reports Process Wholesale analytics rarely match Shopify reports, because they measure something narrower: only orders that received a Process Wholesale discount, recorded from the day Process Wholesale was installed, at the order total Process Wholesale recorded, with refunds and cancellations not subtracted. The most common cause of a difference is a wholesale customer's order that received no Process Wholesale discount and therefore is not a wholesale order. The definitions are in [which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) and [wholesale analytics: metrics and definitions](https://docs.processwholesale.com/analytics/wholesale-analytics). **Quick checks**, in order of likelihood: 1. Did the order receive a Process Wholesale discount? Orders without one are never counted. 2. Was the order placed after Process Wholesale was installed, and after January 7, 2026? 3. Was the order refunded or cancelled? Those stay counted at the original total. 4. Is the time range the one you think? **This year** is the last 12 months, not the calendar year. 5. Are you on the Professional plan? Other plans see sample data on the **Customers** and **Products** tabs. ## Wholesale revenue is lower than Shopify reports Process Wholesale revenue is lower than Shopify's sales when Shopify includes orders that Process Wholesale does not count: - Orders from wholesale customers that received no Process Wholesale discount - Retail orders - Orders without a customer - Orders placed before install, before January 7, 2026, or while Process Wholesale was uninstalled **How to confirm:** open the order in Shopify admin and look at its discounts. A wholesale order has a discount whose name contains one of your discount tags. **What to do:** compare Process Wholesale revenue with a Shopify report filtered to wholesale orders, for example orders tagged `processwholesale`, not with total sales. ## Wholesale revenue is higher than Shopify reports Process Wholesale revenue is higher when it keeps counting money Shopify has taken off: - **Refunds are not subtracted.** A fully refunded $400 wholesale order still adds $400. - **Cancelled orders stay counted.** - **A retail order is counted as wholesale** when a discount on it has a name that contains one of your discount tag names. A short discount tag such as `vip` matches a manual discount called "vip thank you". **What to do:** account for refunds and cancellations separately. To stop accidental matches on future orders, give the discount tag a more distinctive name. See [how to name discount tags](https://docs.processwholesale.com/analytics/wholesale-orders#how-to-name-discount-tags-so-orders-are-recognized). ## An order from a wholesale customer is missing An order from a customer tagged `B2B` is a wholesale order only when a Process Wholesale discount was applied to it. It is missing when: - None of the customer's discounts covered the products in the order - The customer used only a Shopify discount code whose name does not contain a discount tag - The order has no customer linked to it Using net payment terms, wholesale shipping or Quick Buy does not make an order a wholesale order on its own. **What to do:** check that the customer has a discount tag that covers the products they buy. See [how to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) and [wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying). Past orders that received no discount are not added later. ## Orders before a certain date are missing Process Wholesale does not import older orders. History starts the day Process Wholesale was installed in your store, and no store has data from before January 7, 2026. After an uninstall and reinstall, history starts again from zero, because uninstalling deletes recorded orders. **What to do:** use Shopify reports for periods before install. There is no way to load older orders into Process Wholesale. ## A refunded or cancelled order is still counted Process Wholesale keeps the order total it recorded for the order. Refunds are not subtracted, and cancelling an order does not remove it from revenue, order counts, the Customers tab or the at-risk calculation. **What to do:** no setting changes this. Subtract refunds and cancellations yourself when you reconcile with Shopify. ## The Customers or Products tab shows sample data The **Customers** and **Products** tabs show real data only on the Professional plan. On Starter and Enterprise they show this notice and fixed sample values: - "This is sample data. Upgrade to Professional for real customer insights." - "This is sample data. Upgrade to Professional for real product insights." Sample customers are "Acme Corp", "Global Trades" and "Summit Retail"; sample products are "Premium Widget", "Deluxe Gadget" and "Standard Tool". They are not your data. **What to do:** upgrade to Professional under **Plan**. The **Overview** tab shows your real data on every plan for the last 30 days. ## "This year" does not match the calendar year The **This year** range covers the last 12 months up to today, not January 1 to today. On November 11, 2026, it starts on November 11, 2025. **What to do:** for a calendar year, compare month by month: the **Overview** chart for **This year** has one point per calendar month. ## Daily figures are off by a day Analytics dates each order by the moment Process Wholesale recorded it, and the daily chart points use UTC days. An order placed in the evening in a time zone behind UTC can appear on the next day's point. **What to do:** compare weekly or monthly totals rather than single days. ## The Customers tab numbers do not change with the time range The four cards on the **Customers** tab (**Active wholesale customers**, **Repeat order rate**, **Avg days to reorder**, **At-risk customers**) always cover all time. Only the table's **Revenue**, **Orders** and **AOV** follow the time range, and **Last order** always shows the latest wholesale order ever. Customers with no orders in the range appear with $0. ## Products tab revenue does not add up to Overview revenue **Revenue** on the **Products** tab is item price times quantity on each order line, so it does not include shipping or anything else that is not a line item. **Revenue** on the **Overview** tab is the order total. The two are not meant to match. ## The export is missing rows The export contains the same rows as the table: the top **10 customers** or top **20 variants**. It always sorts by revenue, highest first, and ignores your on-screen sort and search. It follows the selected time range. **What to do:** for a full order list, export orders from Shopify admin filtered by the tag `processwholesale`. ## The `processwholesale` tag count differs from the app The order tag `processwholesale` and the app's analytics follow different rules: - The tag is added only when an order is first recorded as wholesale. An order that becomes wholesale later through an edit is counted but not tagged. - The tag is never removed, even when an edit removes the wholesale discount or the order is refunded or cancelled. - Tags you add or remove by hand change the Shopify filter but not analytics. - Quick Buy net-terms draft orders are tagged `processwholesale` when they are created, whether or not a discount applied. A draft order is not counted in analytics, and the completed order counts only if a Process Wholesale discount was applied to it. **What to do:** treat the tag as a quick filter in Shopify admin and the Analytics page as the wholesale totals. ## Multi-currency totals look wrong Process Wholesale records order amounts without a currency and shows them in your store currency. Two things can look wrong: - The **Overview** tab always shows a `$` sign, even when your store currency is not US dollars. The numbers are in your store currency. - If you changed your store currency, older amounts are shown with the new currency code without conversion. The **Customers** and **Products** tabs and the home page **Revenue (last 30 days)** tile use your store currency code. ## Related articles - [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) - [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics) - [Wholesale discount not applying at checkout](https://docs.processwholesale.com/troubleshooting/discount-not-applying) - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) --- Source: https://docs.processwholesale.com/reference/settings-reference Section: Reference Plans: All plans Last verified: 2026-11-11 # Settings reference: every Process Wholesale setting This page lists every setting in Process Wholesale's **Settings** page and **Shipping** page, in the order they appear on screen. The **Settings** page has four sections in a list on the left: **Discount settings**, **Customer settings**, **Net terms** and **Checkout rules**. Changes on both pages are kept in a save bar until you select **Save**; the message "Settings updated" confirms the save and "Save failed" reports an error. Most settings that your plan does not include are shown disabled with an **Upgrade to Enterprise** or **Upgrade to Professional** link; the Plan column says which plan each setting needs. ## Discount settings Process Wholesale > **Settings > Discount settings**. This section opens first. | Card | Setting (exact label) | Control | Default | Allowed values | Plan | What it does | | --- | --- | --- | --- | --- | --- | --- | | **Tag priority** | Discount priority | Dropdown | **Prefer flat tag** | **Prefer flat tag**, **Prefer tier tag** | All plans | Chooses whether a flat discount or a quantity tier discount applies when both match the same product and customer. Checkout follows it only after the **Settings** page has been saved once; until then checkout behaves as **Prefer tier tag**. See [discount priority and stacking](https://docs.processwholesale.com/discounts/discount-priority-and-stacking#flat-discount-versus-quantity-tier-the-tag-priority-setting). | | **Discount combinations** | **Product Discounts** | Checkbox | Checked | On, off | All plans | Lets flat and tier discounts combine with other product discounts. See [discount codes and combinations](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). | | **Discount combinations** | **Order Discounts** | Checkbox | Checked | On, off | All plans | Lets flat and tier discounts combine with other order discounts. | | **Discount combinations** | **Shipping Discounts** | Checkbox | Checked | On, off | All plans | Lets flat and tier discounts combine with shipping discounts. | | **Price List Discount combinations** | **Product Discounts**, **Order Discounts**, **Shipping Discounts** | 3 checkboxes | Unchecked | On, off | Professional (card shown only on Professional) | Sets which discount types can combine with price list discounts. See [price lists](https://docs.processwholesale.com/discounts/price-lists). | | **Cost Plus Markup Discount combinations** | **Product Discounts**, **Order Discounts**, **Shipping Discounts** | 3 checkboxes | Unchecked | On, off | Professional (card shown only on Professional) | Sets which discount types can combine with cost plus markup discounts. See [cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup). | The two Professional cards show a note: to apply flat or tier discounts on the same order as a price list or cost plus markup discount, check **Product Discounts** under **Discount combinations** and **Order Discounts** in the price list or cost plus markup card. ## Customer settings Process Wholesale > **Settings > Customer settings**. | Card | Setting (exact label) | Control | Default | Allowed values | Plan | What it does | | --- | --- | --- | --- | --- | --- | --- | | **Auto assign discount tags** | **Discount tags** | Multi-select list ("Search and select discount tags", **Clear all**) | None | Any of your discount tags | All plans | Adds the selected discount tags to a customer when you approve them for wholesale. Each time you save the Settings page, in any section, the selected tags are also added to up to 100 existing customers tagged `B2B`, although the card says existing customers aren't affected. See [auto-assign discount tags](https://docs.processwholesale.com/customers/auto-assign-discount-tags). | | **B2B customer tax exemption** | **Choose to set B2B customer accounts to 'collect tax' or 'dont collect tax'.** | Checkbox | Unchecked | Checked = tax exempt | All plans | When you save a change, sets your wholesale customers to tax exempt (checked) or not tax exempt (cleared) in Shopify. Approving, rejecting or updating a customer on the **Customers** page also sets that customer's tax-exempt status to match this setting. When the update will take more than 10 seconds, a note gives the estimated time. See [tax-exempt wholesale customers](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers). | | **B2B customer emails** | **Application received** | Checkbox, **Customize template** link | Checked | On, off | All plans | Sends an email when a customer submits a wholesale application. See [wholesale emails](https://docs.processwholesale.com/customers/wholesale-emails). | | **B2B customer emails** | **Application approved** | Checkbox, **Customize template** link | Checked | On, off | All plans | Sends an email when you approve an application. | | **B2B customer emails** | **Application rejected** | Checkbox, **Customize template** link | Checked | On, off | All plans | Sends an email when you reject an application. A **Customized** badge marks an edited template. | | **B2B customer redirect after login** | **Redirect URL** | Text field, after your store's primary domain | Empty | A path on your store, for example `/collections/wholesale` | Enterprise or Professional | Sends wholesale customers to this page after they log in. See [redirect after login](https://docs.processwholesale.com/customers/redirect-after-login). | | **Hide prices for non-B2B customers** | **Hide prices and buy buttons from non-B2B customers** | Checkbox | Unchecked | On, off | Professional | Hides prices and buy buttons from customers who are not wholesale, together with the **Hide price** app embed. See [hide prices](https://docs.processwholesale.com/storefront/hide-prices). | | **Hide prices for non-B2B customers** | Message field | Text field | `Log in to see price` | Any text | Professional | The text shown in place of the price. Clearing the field restores `Log in to see price`. | ## Net terms Process Wholesale > **Settings > Net terms**, card **Net payment terms**. See [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms). | Setting (exact label) | Control | Default | Allowed values | Plan | What it does | | --- | --- | --- | --- | --- | --- | | **Enable net payment terms in the Quick buy table.** | Checkbox | Unchecked | On, off | Enterprise or Professional | Shows payment term buttons on the Quick Buy order details page. | | **Select payment terms (maximum 3):** | Multi-select list ("Search payment terms") | Net 15, Net 30, Net 90 | Up to 3 of: Due on Receipt, Due on Fulfillment, Net 7, Net 15, Net 30, Net 45, Net 60, Net 90 | Enterprise or Professional | Chooses which terms customers can pick. Enabled only when net terms are on. | | **Force Payment Terms** | Checkbox | Unchecked | On, off | Enterprise or Professional | Hides the Quick Buy checkout button until the customer selects a term. Enabled only when net terms are on. | | **Allow net terms for specific customers only** | Checkbox | Unchecked | On, off | Enterprise or Professional | Shows terms only to wholesale customers who also have the tag `B2Bnetterms`. Enabled only when net terms are on. | | **Select Customers** | Button, opens **Select customers for Net Terms** | None | Customers tagged `B2B` | Enterprise or Professional | Adds `B2Bnetterms` to the selected customers and removes it from all other wholesale customers when you select **Save** in the window. Customers who already have the tag are preselected only on the pages of the list you open. Shown when the previous setting is on. | When **Force Payment Terms** and **Allow net terms for specific customers only** are both on, the page warns that some customers may be unable to check out. ## Checkout rules Process Wholesale > **Settings > Checkout rules**. | Card | Setting (exact label) | Control | Default | Allowed values | Plan | What it does | | --- | --- | --- | --- | --- | --- | --- | | **Minimum order amount** | **Set a minimum order amount for B2B customers** | Checkbox | Unchecked | On, off | Enterprise or Professional | Blocks checkout for wholesale customers under the amount. See [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount). | | **Minimum order amount** | **Min. amount (USD)** (your store currency) | Number field | 100 | A number greater than 0, in store currency | Enterprise or Professional | The minimum order total after discounts, converted when the customer pays in another currency. | | **Minimum order quantity** | **Set a minimum order quantity for B2B customers** | Checkbox | Unchecked | On, off | Enterprise or Professional | Blocks checkout for wholesale customers under the quantity. See [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity). | | **Minimum order quantity** | **Min. order quantity** | Number field | Empty | A whole number greater than 0 | Enterprise or Professional | The minimum number of units. | | **Minimum order quantity** | **Apply to** | Dropdown | No value saved (the list shows **Cart**) | **Cart**, **Specific products**, **All products** | Enterprise or Professional | Counts units across the cart, per selected product, or per product in the cart. A rule saved without a value is not enforced, and selecting the option already showing does not register: select a different option first, then the one you want. | | **Minimum order quantity** | **Select products** | Button, opens the product picker | None | One or more products | Enterprise or Professional | The products checked when **Apply to** is **Specific products**. | | **Hide payment methods** | **Hide specific payment methods from B2B customers** | Checkbox | Unchecked | On, off | Enterprise or Professional | Hides the listed payment methods from wholesale customers at checkout. See [hide payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods). | | **Hide payment methods** | "Enter payment methods name then press 'enter' (must be exact)" | Text field, press Enter to add | Empty | Exact payment method names | Enterprise or Professional | The payment methods to hide. Each name appears as a removable tag. | ## Shipping Process Wholesale > **Shipping**. The whole page needs Enterprise or Professional. See [wholesale shipping](https://docs.processwholesale.com/checkout/wholesale-shipping). | Setting (exact label) | Control | Default | Allowed values | Plan | What it does | | --- | --- | --- | --- | --- | --- | | **Enable shipping methods** | Checkbox | Unchecked | On, off | Enterprise or Professional | Turns on wholesale shipping: selected options for wholesale customers only, unselected options for everyone else. | | **Shipping rate configuration** | Radio buttons | **Select from existing shipping methods** | **Select from existing shipping methods**, **Manual entry (recommended for stores with many rates)** | Enterprise or Professional | Chooses exact-name selection from lists, or "contains" matching on names you type. | | **General Shipping Methods** tab (**Markets** on market-based shipping) | Selectable tables, one per zone or market | None selected | Rate names | Enterprise or Professional | Marks rates from your general profile or markets as wholesale. | | **Custom Shipping Methods** tab (**Additional shipping methods** on market-based shipping) | Selectable tables | None selected | Rate names | Enterprise or Professional | Marks rates from your other shipping profiles as wholesale (from all your shipping profiles on market-based shipping). | | **Local Pickup** tab | Table **Local pickup locations** | None selected | Locations with local pickup on | Enterprise or Professional | Marks pickup locations as wholesale. | | **Local Delivery** tab | Checkbox **Local delivery** | Unchecked | On, off | Enterprise or Professional | Makes every local delivery option wholesale-only when checked, retail-only when unchecked. | | **Shipping method name** (manual entry) | Text field and **Add** | Empty | Any text | Enterprise or Professional | Adds a name to **Active wholesale shipping methods**; any option whose name contains it, ignoring capitalization, is wholesale. | ## Related articles - [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience) - [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference) - [Checkout and storefront messages reference](https://docs.processwholesale.com/reference/checkout-messages-reference) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) --- Source: https://docs.processwholesale.com/reference/theme-block-settings-reference Section: Reference Plans: All plans Last verified: 2026-11-11 # Theme block settings reference This reference lists every setting of the Process Wholesale theme blocks and app embed, as shown in the Shopify theme editor, and of the Process Wholesale extensions for new customer accounts, as shown in Shopify's checkout and accounts editor. Each table gives the label, type, default, allowed values and what the setting does. Setting labels are in English only. For what each block is and where it goes, see [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview). ## Product Wholesale (app block, product templates, all plans) Guide: [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices). | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Show Quantity Column** | Checkbox | On | On, off | Shows the **Minimum Cart Quantity** column of the product discount table | | **Show Discount Column** | Checkbox | On | On, off | Shows the **Discount** column of the product discount table | | **Show Wholesale Price Column** | Checkbox | On | On, off | Shows the **Wholesale Price** column of the product discount table | | **Show Cart Amount Column** | Checkbox | On | On, off | Shows the **Minimum Cart Amount** column of the cart discount table | | **Show Cart Discount Column** | Checkbox | On | On, off | Shows the **Cart Discount** column of the cart discount table | | **Show Cart Quantity Column** | Checkbox | On | On, off | Shows the **Minimum Cart Quantity** column of the cart quantity discount table | | **Show Cart Quantity Discount Column** | Checkbox | On | On, off | Shows the **Cart Discount** column of the cart quantity discount table | | **Text Color** | Color | #000000 | Any color | Text color of the tables | | **Border Color** | Color | #868686 | Any color | Border color of the tables | | **Header Background Color** | Color | Transparent | Any color | Background of the header row | | **Body Background Color** | Color | Transparent | Any color | Background of the other rows | | **Border Radius** | Range | 10 px | 1 to 30 px, steps of 1 | Rounds the table corners | | **Border Width** | Range | 1 px | 1 to 5 px, steps of 1 | Width of the outer border | The settings are grouped under the headings **Product Discount Table Settings**, **Cart Discount Table Settings**, **Cart Quantity Discount Table Settings** and **Table Styling**. A column turned off loses both its heading and its cells. No setting changes the heading text or hides a whole table. ## Quick Buy (app block, page templates, Enterprise or Professional) Guide: [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Wholesale Collection** | Collection | None | One collection | Limits the form, its search and Buy again to the products of this collection. Empty shows all products. | | **Products sort order** | Select | None | None, Collection default, Manual (set in Shopify admin), Best selling, Relevance, Price, Creation time, Alphabetically | Sorts the products of the chosen collection. Works only with a collection selected. With sorting on, draft products of the collection are shown too. | | **Show original price** | Checkbox | On | On, off | Shows the struck-through original price next to a lower wholesale price | | **Show stock quantity** | Checkbox | On | On, off | Shows the units left. Off also hides the "Out of stock" and "Not available" labels. | | **Show Buy again tab** | Checkbox | On | On, off | Adds the **All products** and **Buy again** tabs. Buy again lists products the buyer has ordered before. | | **Show last order** | Checkbox | On | On, off | Shows the "Your last order" card for reordering after a stock and price check | | **Products per page** | Number | 10 | Up to 50, as the setting's help text says | Products per page of the form | | **Border** | Color | #bbc5cd | Any color | Border color (heading **Quick Buy Colors**) | | **Background color** | Color | #fff | Any color | Background of the form | | **Table Text Color** | Color | #000000 | Any color | Text color of the table | | **Button Background** | Color | #30383f | Any color | Button and accent color | | **Button Text** | Color | #ffffff | Any color | Button text color | | **What to show for non B2B?** | Select | Signup Form | Signup Form, Lock Screen | What guests and customers who are not wholesale see in place of the form | | **Use new customer flow** | Select | Auto | Auto, Yes, No | Which signup flow the built-in signup form uses. Auto acts as Yes when Process Wholesale recorded new customer accounts when the app was installed or when you last saved **Settings**, and as No otherwise. Yes = new customer accounts (no password field). No = legacy customer accounts (password field). | | **Text to show to invite customers to sign up** | Text | "This is section is only accessible by Wholesale customers." | Any text | Lock screen message (heading **Configure Lock Message**, used only with Lock Screen) | | **Create Wholesale customer signup page** | URL | None | A page link | Target of the "Create wholesale account" button on the lock screen | | **Registration form heading** | Text | "Create wholesale account" | Any text | Heading of the built-in signup form (heading **Configure Signup Text**, used only with Signup Form) | | **Text to show to logout customers above login button** | Text | "Or login, If you already have an account." | Any text | Text above the **Login** button under the signup form | | **Text to show for pending approval B2B customers** | Text | "Thank you! your wholesale account is currently under review" | Any text | Shown to logged-in customers tagged `B2B_Registeration` | | **Pending approval message color** | Color | #30383f | Any color | Color of the pending message | | **Business Name** | Select | Required | Required, Optional, Hidden | Signup form field (heading **Configure Signup Fields**) | | **Business Address** | Select | Optional | Required, Optional, Hidden | Signup form field | | **Phone Number** | Select | Optional | Required, Optional, Hidden | Signup form field | | **Tax ID** | Select | Optional | Required, Optional, Hidden | Signup form field | | **Website** | Select | Optional | Required, Optional, Hidden | Signup form field | | **Additional Info** | Select | Optional | Required, Optional, Hidden | Signup form field | Default text values are shown exactly as the block stores them; replace them with your own wording. ## Wholesale Signup Form (app block, page, collection, home page and product templates, all plans) Guide: [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Use new customer flow** | Select | Auto | Auto, Yes, No | Signup flow. Auto acts as Yes when Process Wholesale recorded new customer accounts when the app was installed or when you last saved **Settings**, and as No otherwise. Yes = new customer accounts (no password field). No = legacy customer accounts (password field). | | **Registration form heading** | Text | "Create wholesale account" | Any text | Heading of the form | | **Text to show to logout customers above login button** | Text | "Or login, If you already have an account." | Any text | Text above the **Login** button under the form | | **Text to show for pending approval B2B customers** | Text | "Thank you! your wholesale account is currently under review" | Any text | Shown to pending customers, and after a successful submission | | **Pending approval message color** | Color | #30383f | Any color | Color of the pending message | | **Text to show for already logged in B2B customers** | Text | "You are logged into your wholesale account" | Any text | Shown in place of the form to logged-in customers tagged `B2B` | | **Browse products link for logged in accounts** | URL | None | A link | Adds a **Browse products** button under that message | | **Business Name** | Select | Required | Required, Optional, Hidden | Form field (heading **Configure Signup Fields**) | | **Business Address** | Select | Optional | Required, Optional, Hidden | Form field | | **Phone Number** | Select | Optional | Required, Optional, Hidden | Form field | | **Tax ID** | Select | Optional | Required, Optional, Hidden | Form field | | **Website** | Select | Optional | Required, Optional, Hidden | Form field | | **Additional Info** | Select | Optional | Required, Optional, Hidden | Form field | | **Enable customization** | Checkbox | Off | On, off | Turns on the design settings below (heading **Design**) | | **Text color** | Color | #5a5a5a | Any color | Form text | | **Background color** | Color | Transparent | Any color | Form background | | **Field background color** | Color | #ffffff | Any color | Input background | | **Field text color** | Color | #5a5a5a | Any color | Input text | | **Field border color** | Color | #c0c0c0 | Any color | Input border | | **Field border width** | Range | 1 px | 0 to 4 px, steps of 1 | Input border width | | **Field & button border radius** | Range | 0 px | 0 to 24 px, steps of 1 | Corner rounding of inputs and button | | **Button background color** | Color | #000000 | Any color | Submit button background | | **Button text color** | Color | #ffffff | Any color | Submit button text | The nine design settings are shown in the theme editor only when **Enable customization** is on. ## Wholesale Custom Signup (app block, page, collection, home page and product templates, Enterprise or Professional) Guide: [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). The fields themselves are built in Process Wholesale under **Custom Signup Form**, so this block has no field settings. | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Use new customer flow** | Select | Auto | Auto, Yes, No | Signup flow, as for the Wholesale Signup Form | | **Registration form heading** | Text | "Create wholesale account" | Any text | Heading of the form | | **Text to show to logout customers above login button** | Text | "Or login, If you already have an account." | Any text | Text above the **Login** button | | **Text to show for pending approval B2B customers** | Text | "Thank you! your wholesale account is currently under review" | Any text | Shown to pending customers | | **Pending approval message color** | Color | #30383f | Any color | Color of the pending message | | **Text to show for already logged in B2B customers** | Text | "You are logged into your wholesale account" | Any text | Shown to logged-in customers tagged `B2B` | | **Browse products link for logged in accounts** | URL | None | A link | Adds a **Browse products** button | | **Enable customization** and the nine design settings | Checkbox, colors, ranges | Same as the Wholesale Signup Form | Same as the Wholesale Signup Form | Same as the Wholesale Signup Form | ## Lock Content Redirect (app block, page, collection and product templates, Enterprise or Professional) Guide: [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content). | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Redirect URL** | Text | `/account/login` | A path on your store or a full URL. Never empty. | Where visitors without access are sent | | **Tag access mode** | Select | **Default: Hide content from non B2B customers** | **Default: Hide content from non B2B customers**, **Show only for customers with specified tags**, **Hide from customers with specified tags** | Who is allowed in. Default and "Show only" allow logged-in customers with a matching tag. "Hide from" allows everyone except logged-in customers with a matching tag. | | **Customer tags** | Text | Empty | Customer tags separated by commas, for example `VIP, Bulk, Pro` | The tags to match, exactly and ignoring capitalization. Empty means the single tag `B2B`. | ## B2B Redirect Block (app block, customer account template, Enterprise or Professional) Guide: [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). The B2B Redirect Block has no settings in the theme editor. The address is set in Process Wholesale under **Settings > Customer settings > B2B customer redirect after login > Redirect URL**. The block redirects logged-in customers with a tag containing `b2b` from the account page to that address, at most once every 12 hours per browser, and does nothing while the Redirect URL is empty. ## Hide price (app embed, all pages, Professional) Guide: [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). The on/off switch and the message are in Process Wholesale under **Settings > Customer settings > Hide prices for non-B2B customers**; the app embed holds only the custom selectors (heading **Custom selectors**). | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Price on product page** | Text | Empty | CSS selectors separated by commas | Extra price elements to hide | | **Add to cart on product page** | Text | Empty | CSS selectors separated by commas | Extra add to cart buttons to change, inside a product form or card | | **Buy it now on product page** | Text | Empty | CSS selectors separated by commas | Extra Buy it now buttons or wrappers to hide, inside a product form or card | | **Price on collection page** | Text | Empty | CSS selectors separated by commas | Extra price elements to hide on collection pages and product cards | | **Quick buy on collection page** | Text | Empty | CSS selectors separated by commas | Extra quick add or add to cart buttons to change on product cards | Empty fields use the default selectors only. Entered selectors are added to the defaults. The two price fields apply together on every page, and so do the two add to cart fields. ## Wholesale signup Form (new customer accounts page, all plans) Guide: [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). Settings are entered in Shopify's checkout and accounts editor. | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Customer name** | Text | Empty (shown, optional) | `show`, `required`, `hide` | First and last name fields | | **Business name** | Text | Empty (shown, optional) | `show`, `required`, `hide` | Business name field | | **Business Address** | Text | Empty (shown, optional) | `show`, `required`, `hide` | Business address: choose a saved address or enter a new one | | **Tax ID** | Text | Empty (shown, optional) | `show`, `required`, `hide` | Tax ID field | | **Phone Number** | Text | Empty (shown, optional) | `show`, `required`, `hide` | Phone number field | | **Website** | Text | Empty (shown, optional) | `show`, `required`, `hide` | Website field | | **Additional Info** | Text | Empty (shown, optional) | `show`, `required`, `hide` | Additional information field | | **Registration form heading** | Text | "Create wholesale account" | Any text | Heading of the form | | **Text to show for pending approval B2B customers** | Text | "Thank you! your wholesale account is currently under review" | Any text | Shown to pending customers | | **Text to show for existing B2B customers** | Text | "You are logged into your wholesale account" | Any text | Shown to approved wholesale customers | | **Browse products link for B2B Members** | Text | Empty | A link | Adds a **Browse Products** link for approved customers | Type the field values in lower case exactly as listed: `show`, `required` or `hide`. ## Wholesale custom signup Form (new customer accounts page, Enterprise or Professional) Guide: [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). The fields come from **Custom Signup Form** in Process Wholesale. | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Registration form heading** | Text | "Create wholesale account" | Any text | Heading of the form | | **Text to show for pending approval B2B customers** | Text | "Thank you! your wholesale account is currently under review" | Any text | Shown to pending customers | | **Text to show for existing B2B customers** | Text | "You are logged into your wholesale account" | Any text | Shown to approved wholesale customers | | **Browse products link for B2B Members** | Text | Empty | A link | Adds a **Browse Products** link for approved customers | ## Wholesaler Information (new customer accounts Profile page block, all plans) | Label | Type | Default | Allowed values | What it does | | --- | --- | --- | --- | --- | | **Wholesaler information** | Multi-line text | Empty (shows "Wholesaler information") | Any text | Heading shown to every customer | | **Register Wholesaler Header** | Multi-line text | Empty (shows "Register a wholesaler account") | Any text | Heading shown to customers who have not registered as wholesale | | **Register Wholesaler Body** | Multi-line text | Empty (shows "To become a wholesaler of the store, please signup via registeration form.") | Any text | Body text for customers who have not registered | | **Register Wholesaler Button** | Text | Empty (shows "Sign up") | Any text | Label of the sign-up button | | **Use Custom Registeration Form** | Checkbox | Off | On, off | Sends the button to the custom signup form instead of the standard one. Needs Enterprise or Professional. | | **Custom Signup URL** | Text | Empty | A link | Optional. When set, the button opens this address instead. | | **Pending Account Message** | Text | Empty (shows "Thank you! your wholesale account is currently under review") | Any text | Shown to pending customers | When a text field is left empty, the block shows the default text given in brackets. Approved wholesale customers see a table of their discounts with the columns **Discount Tag**, **Amount off / tiers** and **Applies To**, or "No Discounts assigned yet". ## Redirect (new customer accounts Orders page block, Enterprise or Professional) The Redirect block has no settings. It uses the address from **Settings > Customer settings > B2B customer redirect after login > Redirect URL** and sends logged-in customers with the tag `B2B` there, at most once every 12 hours. Guide: [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). ## B2B Signup Files (Shopify admin customer page card) The B2B Signup Files card has no settings. On the customer details page in Shopify admin it lists links to the files a customer tagged `B2B` or `B2B_Registeration` uploaded on the signup form. Guide: [How file uploads work on the wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads). ## Related articles - [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) - [Process Wholesale blocks missing from the theme editor](https://docs.processwholesale.com/troubleshooting/theme-blocks-missing) - [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) - [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) --- Source: https://docs.processwholesale.com/reference/plan-features-reference Section: Reference Plans: All plans Last verified: 2026-11-11 # Feature availability by plan This table lists every Process Wholesale feature that depends on the plan, for the three plans: Starter, Enterprise and Professional. Use it to answer "which plan do I need for this feature". Wherever the app's own text says "Enterprise plan only", the Professional plan also includes the feature. Prices are not listed here; they are shown on Shopify's plan page, which opens from **Plan** in the Process Wholesale app. **At a glance** - **Most limited plan:** Starter (one discount) - **Quick Buy, checkout rules, shipping, custom signup and Lock Content Redirect start at:** Enterprise - **Price lists, cost plus markup, Hide price and full analytics:** Professional only - **Shopify Plus:** No Process Wholesale feature requires it ## Discount limits by plan | Limit | Starter | Enterprise | Professional | | --- | --- | --- | --- | | Discounts you can create (flat discounts and tier discounts together) | 1 | 100 | 100 | | Cost plus markup discounts | Not available | Not available | 100 | At the discount limit, the create button reads **Upgrade to create more** on Starter, and **Discount limit reached** on Enterprise and Professional. ## Discount features by plan | Feature | Starter | Enterprise | Professional | | --- | --- | --- | --- | | Flat discounts | Yes | Yes | Yes | | Quantity, cart value and cart quantity tier discounts | Yes | Yes | Yes | | Loyalty tier discounts | No | Yes | Yes | | **Select individual variants** for a flat, tier or cost plus markup discount | No | Yes | Yes | | Price lists (create and edit) | No | No | Yes | | Price list CSV import and export | No | No | Yes | | Cost plus markup | No | No | Yes | | Discount combination settings for price lists and cost plus markup | No | No | Yes | | Discount combination settings for flat and tier discounts | Yes | Yes | Yes | | **Tag priority** setting (prefer the flat tag or the tier tag) | Yes | Yes | Yes | | Bulk assign flat and tier discount tags to customers | Yes | Yes | Yes | | Bulk assign price list and cost plus markup tags | No | No | Yes | | Apply wholesale discounts to draft orders | Yes | Yes | Yes | ## Customer and signup features by plan | Feature | Starter | Enterprise | Professional | | --- | --- | --- | --- | | Wholesale signup form (theme block, legacy customer accounts) | Yes | Yes | Yes | | Wholesale signup form (new customer accounts) | Yes | Yes | Yes | | Custom signup form, with your own fields | No | Yes | Yes | | Approve and reject wholesale applications | Yes | Yes | Yes | | Wholesale application emails | Yes | Yes | Yes | | Auto assign discount tags on approval | Yes | Yes | Yes | | Tax exemption for wholesale customers | Yes | Yes | Yes | | Redirect wholesale customers after login | No | Yes | Yes | ## Storefront features by plan | Feature | Starter | Enterprise | Professional | | --- | --- | --- | --- | | Product Wholesale block | Yes | Yes | Yes | | Quick Buy wholesale order form | No | Yes | Yes | | Lock Content Redirect block | No | Yes | Yes | | Hide price for customers who are not wholesale | No | No | Yes | On a plan without Quick Buy, the Quick Buy block shows "Please upgrade your plan to access this feature." in the theme editor and nothing on the storefront. The Lock Content Redirect block and the Wholesale Custom Signup block are listed in the theme editor only on Enterprise and Professional, and the Hide price app embed only on Professional. ## Checkout and shipping features by plan | Feature | Starter | Enterprise | Professional | | --- | --- | --- | --- | | Net payment terms (in Quick Buy) | No | Yes | Yes | | Minimum order amount | No | Yes | Yes | | Minimum order quantity | No | Yes | Yes | | Hide payment methods | No | Yes | Yes | | Wholesale shipping (**Shipping** page) | No | Yes | Yes | On a plan below Enterprise, the **Shipping** page shows "Shipping feature is available on the Enterprise plan only." with an **Upgrade to Enterprise** button. Professional also includes wholesale shipping. ## Analytics and Dashboard features by plan | Feature | Starter | Enterprise | Professional | | --- | --- | --- | --- | | Analytics **Overview** tab, last 30 days | Yes | Yes | Yes | | Analytics custom time ranges | No | No | Yes | | Analytics **Customers** and **Products** tabs with your real data | No (sample data) | No (sample data) | Yes | | Analytics **Export** | No | No | Yes | | At-risk customers (opened from the Analytics **Customers** tab) | No | No | Yes | | Dashboard tiles for B2B shipping, Net terms, Minimum order amount and MOQ | Locked | Yes | Yes | | Dashboard App Status: Quick buy tile | Locked | Yes | Yes | | Dashboard App Status: Lock content and B2B Redirect tiles | Locked | Yes | Yes | On plans without full analytics, the **Customers** and **Products** tabs show "This is sample data. Upgrade to Professional for real customer insights." or "This is sample data. Upgrade to Professional for real product insights." ## Features on every plan These Process Wholesale features have no plan requirement: the **Customers** page, customer tags, the Product Wholesale block, both standard wholesale signup forms, wholesale application emails, tax exemption, auto assign discount tags, draft order discounts, the Analytics **Overview** tab, the **Support** page and the Ada setup assistant where it is offered. ## Related articles - [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) - [Changing or canceling your Process Wholesale plan](https://docs.processwholesale.com/account/change-or-cancel-your-plan) - [Limits and quotas reference](https://docs.processwholesale.com/reference/limits-reference) --- Source: https://docs.processwholesale.com/reference/limits-reference Section: Reference Plans: All plans Last verified: 2026-11-11 # Limits and quotas reference This page lists every numeric limit, cap, default and time interval in Process Wholesale that a merchant can run into, grouped by area: plans and discounts, price lists, customers and signup, Quick Buy, storefront blocks and the Dashboard, checkout rules, analytics, and timing. Each row names the limit, its value, the plan or condition it applies to, and the article that explains it. Limits that depend on the plan follow the plan names Starter, Enterprise and Professional. **At a glance** - **Discounts you can create (flat and tier together):** Starter 1, Enterprise and Professional 100 - **Price list CSV import:** up to 50,000 rows per file - **Price list editor:** loads at most 200 products and 200 variants per product - **New discounts at checkout:** within about 5 minutes - **Loyalty tiers:** recalculated about every 2 hours - **At-risk customers:** latest wholesale order more than 45 days old ## Plans and discounts | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Process Wholesale flat and tier discounts you can create, counted together | 1 | Starter | [Plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) | | Process Wholesale flat and tier discounts you can create, counted together | 100 | Enterprise and Professional | [Plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing) | | Process Wholesale cost plus markup discounts | 100. The cost plus markup create form counts flat, tier, price list and cost plus markup discounts together against 100. | Professional | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | | **Percentage Off** on a Process Wholesale flat discount | Maximum 100. A higher value shows "Discount value cannot exceed 100 in percentage." and cannot be saved. | All plans | [Flat discounts](https://docs.processwholesale.com/discounts/flat-discounts) | | **Percentage Off** on a Process Wholesale tier discount | No maximum is enforced. Enter 100 or less. | All plans | [Quantity tier discounts](https://docs.processwholesale.com/discounts/quantity-tier-discounts) | | **Price Off** and **Fixed Price** amounts in Process Wholesale discounts | No maximum is enforced. Keep them below the price of every product the discount covers. | All plans | [Priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) | | **Markup Percentage** on a Process Wholesale cost plus markup discount | No maximum. A markup that brings the price to the regular price or above gives no discount. | Professional | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | | Variants checked for a cost per item when saving a Process Wholesale cost plus markup discount | The first 200 variants. Variants beyond them are not checked, and any without a cost get no discount at checkout. | Professional | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | | Process Wholesale flat discount or quantity tier per cart line | 1. A line gets one flat discount or one quantity tier, never both. | All plans | [Priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking) | | Process Wholesale cart value tier discounts applied per order | 1, even when a customer carries several cart value tier tags | All plans | [Cart value tier discounts](https://docs.processwholesale.com/discounts/cart-value-tier-discounts) | | Process Wholesale cart quantity tier discounts applied per order | 1, even when a customer carries several cart quantity tier tags | All plans | [Cart quantity tier discounts](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts) | | Process Wholesale loyalty discounts applied per order | 1, even when a customer carries several loyalty discount tags | Enterprise or Professional | [Loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts) | ## Price lists and CSV import | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Products loaded by the Process Wholesale price list editor | 200. Saving from the editor removes the products it did not load, so manage larger lists with **Update from CSV**. | Professional | [Price lists](https://docs.processwholesale.com/discounts/price-lists) | | Variants per product loaded by the Process Wholesale price list editor | 200. Saving from the editor removes the variants it did not load. | Professional | [Price lists](https://docs.processwholesale.com/discounts/price-lists) | | Products added by **Add All products** in the Process Wholesale price list editor | 200 | Professional | [Price lists](https://docs.processwholesale.com/discounts/price-lists) | | Prices per variant in one Process Wholesale price list | 1. A price list has no quantity breaks. | Professional | [Price lists](https://docs.processwholesale.com/discounts/price-lists) | | Rows in one Process Wholesale price list CSV file | 50,000. A larger file shows "Imports are limited to 50000 rows." | Professional | [Price list CSV import](https://docs.processwholesale.com/discounts/price-list-csv-import) | | Rows in the Process Wholesale unmatched rows download | The first 2,000 unmatched rows. The unmatched count on screen is always the full number. | Professional | [Price list CSV import](https://docs.processwholesale.com/discounts/price-list-csv-import) | | Files per Process Wholesale price list import | 1 file, `.csv` only | Professional | [Price list CSV format](https://docs.processwholesale.com/reference/price-list-csv-format) | | Process Wholesale price list imports running at the same time | 1 per store | Professional | [Price list CSV import](https://docs.processwholesale.com/discounts/price-list-csv-import) | | Lowest price in a Process Wholesale price list CSV | 0, which makes the variant free for customers on the list. Negative prices are not imported. | Professional | [Price list CSV import](https://docs.processwholesale.com/discounts/price-list-csv-import) | ## Customers and signup | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Customers per page on the Process Wholesale **Customers** page | 10, on both the **Pending** and **Active** tabs | All plans | [Approve or reject applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) | | Customers covered by one bulk action on the Process Wholesale **Customers** page | The 10 customers on the current page | All plans | [Approve or reject applications](https://docs.processwholesale.com/customers/approve-or-reject-applications) | | Customers per page in the Process Wholesale **Import customers** window | 10 | All plans | [Add existing customers](https://docs.processwholesale.com/customers/add-existing-customers) | | Existing wholesale customers that receive **Auto assign discount tags** on each Settings save | Up to 100 customers tagged `B2B` per save. Use **Bulk assign discount** to reach all of them. | All plans | [Auto assign discount tags](https://docs.processwholesale.com/customers/auto-assign-discount-tags) | | Customers reached by Process Wholesale **Bulk assign discount** | Every customer tagged `B2B`. Pending customers are not included. | All plans | [Assign discounts to customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) | | Process Wholesale **Bulk assign discount** jobs running at the same time | 1 per store | All plans | [Assign discounts to customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) | | Customers per page in the Process Wholesale **Select customers for Net Terms** window | 20 | Enterprise or Professional | [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) | | Minimum password length on the Process Wholesale **Wholesale Signup Form** | 5 characters, with no spaces | Legacy customer accounts, visitors who are not logged in | [Signup form for legacy customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts) | | Files per **File Upload** field on the Process Wholesale custom signup form | 1. Add another **File Upload** field for a second document. | Enterprise or Professional | [Signup form file uploads](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads) | | **Subject** length of a Process Wholesale application email | Up to 200 characters | All plans | [Wholesale emails](https://docs.processwholesale.com/customers/wholesale-emails) | | **Message** length of a Process Wholesale application email | Up to 10,000 characters | All plans | [Wholesale emails](https://docs.processwholesale.com/customers/wholesale-emails) | | Time estimate shown when Process Wholesale updates tax exemption on save | Shown when the update will take more than 10 seconds | All plans | [Tax-exempt wholesale customers](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers) | ## Quick Buy and reorder | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Process Wholesale Quick Buy **Products per page** | Default 10. The setting's help text gives 50 as the maximum; keep the value at 50 or lower. | Enterprise or Professional | [Set up Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup) | | Products searched by Process Wholesale Quick Buy when a **Wholesale Collection** is set | The first 2,000 products of the collection | Enterprise or Professional | [Set up Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-setup) | | Past orders used by Process Wholesale Quick Buy reorder | The customer's 10 most recent orders recorded by Process Wholesale, without cancelled orders | Enterprise or Professional | [Reordering in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder) | | Earlier orders listed on the Process Wholesale Quick Buy last order card | 2 | Enterprise or Professional | [Reordering in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder) | | Items in the Process Wholesale Quick Buy **Buy again** tab | 50, the most frequently ordered first | Enterprise or Professional | [Reordering in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder) | | Products checked per load by Process Wholesale Quick Buy reorder | 60 (the last order's products first, then the **Buy again** items) | Enterprise or Professional | [Reordering in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder) | | Age of orders for which Process Wholesale Quick Buy shows an order number and detects cancellations | 60 days | Enterprise or Professional | [Reordering in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder) | | Expiry of a saved Process Wholesale Quick Buy order | None. It stays in that browser until checkout. | Enterprise or Professional | [Ordering with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering) | ## Storefront blocks and the Dashboard | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Theme template files read by Process Wholesale **App Status** | At most 1,250 page, product, collection and customer account template files of the published theme | All plans | [Dashboard and App Status](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) | | Levels of nested blocks searched by Process Wholesale **App Status** | 8. A block nested more than 8 levels deep inside groups or other blocks reads **OFF**. | All plans | [Dashboard and App Status](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) | | Customers counted by the Process Wholesale Dashboard **Pending B2B customers** and **Active B2B customers** tiles | At most 2,500 pending and active customers together | All plans | [Dashboard and App Status](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) | | Discount tables shown by the Process Wholesale Product Wholesale block | Up to 3: the product's price or quantity breaks, cart value discounts and cart quantity discounts | All plans | [Wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) | ## Checkout rules, net terms and shipping | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Process Wholesale net payment terms offered at once | Up to 3 of the 8 terms (Due on Receipt, Due on Fulfillment, Net 7, Net 15, Net 30, Net 45, Net 60, Net 90) | Enterprise or Professional | [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) | | Default Process Wholesale net payment terms | Net 15, Net 30 and Net 90, selected when net terms are first turned on | Enterprise or Professional | [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) | | Payment terms per Process Wholesale Quick Buy order | 1 for the whole order | Enterprise or Professional | [Net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) | | Process Wholesale minimum order amount | One amount for all wholesale customers, greater than 0. The field starts at 100. | Enterprise or Professional | [Minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) | | Process Wholesale minimum order quantity | One whole number greater than 0, for the cart, each selected product or each product | Enterprise or Professional | [Minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) | | Maximum order quantity in Process Wholesale | None. Process Wholesale does not limit how many units a customer orders. | All plans | [Minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) | ## Analytics and at-risk customers | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Process Wholesale at-risk customer threshold | More than 45 days since the latest wholesale order. The threshold is fixed. | Professional | [At-risk customers](https://docs.processwholesale.com/customers/at-risk-customers) | | Recovery emails Process Wholesale lets you send to one customer | No limit, including more than one on the same day | Professional | [At-risk customers](https://docs.processwholesale.com/customers/at-risk-customers) | | Rows in the Process Wholesale Analytics **Customers** table | 10 customers, with no further pages | Professional (sample data on other plans) | [Wholesale analytics](https://docs.processwholesale.com/analytics/wholesale-analytics) | | Rows in the Process Wholesale Analytics **Products** table | 20 variants, with no further pages | Professional (sample data on other plans) | [Wholesale analytics](https://docs.processwholesale.com/analytics/wholesale-analytics) | | Rows in a Process Wholesale Analytics export | The top 10 customers or the top 20 variants, the same as the table | Professional | [Wholesale analytics](https://docs.processwholesale.com/analytics/wholesale-analytics) | | Process Wholesale Analytics time range on plans below Professional | **Last 30 days** only, on the **Overview** tab | Starter, Enterprise | [Wholesale analytics](https://docs.processwholesale.com/analytics/wholesale-analytics) | | Earliest order in Process Wholesale wholesale order history | The day Process Wholesale was installed, and never before January 7, 2026. Older orders are not imported. | All plans | [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) | ## Timing | Limit | Value | Applies to (plan or condition) | Where it is explained | | --- | --- | --- | --- | | Time for a new or edited Process Wholesale discount to reach checkout | Updated right after you save, and re-checked about every 5 minutes. Allow about 5 minutes. | All plans | [How Process Wholesale works](https://docs.processwholesale.com/getting-started/how-process-wholesale-works) | | Time for changes made in Shopify admin to Process Wholesale's automatic discounts to be replaced by the app's settings | Within minutes | All plans | [Discount codes and combinations](https://docs.processwholesale.com/discounts/discount-codes-and-combinations) | | Process Wholesale loyalty tier recalculation | About every 2 hours. A new qualifying order can take up to 2 hours to count. | Enterprise or Professional | [Loyalty discounts](https://docs.processwholesale.com/discounts/loyalty-discounts) | | Process Wholesale cost per item sync for cost plus markup | Cost changes are picked up automatically, and a background sync about once an hour catches up missed changes. The first cost copy takes a few minutes. | Professional | [Cost plus markup](https://docs.processwholesale.com/discounts/cost-plus-markup) | | Process Wholesale price list import that seems stuck | Continues on its own within about 20 minutes of its last progress | Professional | [Price list import problems](https://docs.processwholesale.com/troubleshooting/price-list-import-problems) | | Process Wholesale redirect after login | At most once every 12 hours: per browser with legacy customer accounts, per customer with new customer accounts | Enterprise or Professional | [Redirect after login](https://docs.processwholesale.com/customers/redirect-after-login) | | "Application received" email for guest applicants on legacy customer accounts | Sent once the account exists, checked about 1, 3 and 13 minutes after submitting. No email after about 13 minutes without an account. | All plans | [Emails not received](https://docs.processwholesale.com/troubleshooting/emails-not-received) | | Process Wholesale Ada card on the Dashboard | Shown when the Ada widget loads within about 15 seconds | All plans | [Ada, the setup assistant](https://docs.processwholesale.com/account/ada-setup-assistant) | | Process Wholesale Analytics refresh | No scheduled refresh. Reload the Analytics page to see the latest orders. | All plans | [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) | | Process Wholesale data deletion on uninstall | Immediate, with no waiting period | All plans | [Uninstalling](https://docs.processwholesale.com/account/uninstalling) | ## Frequently asked questions ### How many discounts can I create on each Process Wholesale plan? Starter allows 1, and Enterprise and Professional allow 100, counting flat and tier discounts together. Professional also allows up to 100 cost plus markup discounts. ### How many rows can a Process Wholesale price list CSV have? Up to 50,000 rows per file. The unmatched rows download holds the first 2,000 unmatched rows. ### How long does a new Process Wholesale discount take to reach checkout? About 5 minutes. Process Wholesale updates its checkout discounts right after you save and re-checks them about every 5 minutes. ### How often are Process Wholesale loyalty discounts recalculated? About every 2 hours. A new qualifying order can take up to 2 hours to unlock the loyalty discount. ## Related articles - [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference) - [Settings reference: every Process Wholesale setting](https://docs.processwholesale.com/reference/settings-reference) - [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import) - [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference) --- Source: https://docs.processwholesale.com/reference/customer-tags-reference Section: Reference Plans: All plans Last verified: 2026-11-11 # Customer tags and order tags used by Process Wholesale Process Wholesale marks customers and orders with ordinary Shopify tags that you can see in Shopify admin. The customer tag `B2B` marks a wholesale customer (B2B customer), `B2B_Registeration` marks a pending applicant, `B2Bnetterms` allows net payment terms, each discount has its own discount tag, and loyalty discounts add `pw_loyalty_` tags. Orders that received a Process Wholesale discount get the order tag `processwholesale`. The tags work the same way on every plan. **At a glance** - **Wholesale customer:** `B2B` - **Pending customer:** `B2B_Registeration` (the tag is spelled this way) - **Net terms for selected customers:** `B2Bnetterms` - **Discount tags:** the name of each discount, in lower-case letters and numbers - **Loyalty tier tags:** `pw_loyalty___`, managed automatically - **Order tag:** `processwholesale`, on orders with a customer that received a Process Wholesale discount, and on Quick Buy net terms draft orders - **Approval:** always manual; Process Wholesale never adds `B2B` on its own ## Customer tags | Tag | Meaning | Who or what adds it | Who or what removes it | Features that read it | | --- | --- | --- | --- | --- | | `B2B` | Process Wholesale wholesale customer: approved for wholesale prices and wholesale features. Any capitalization (`B2B`, `b2b`, `B2b`, `b2B`) counts at checkout. | **Accept B2B** on the Process Wholesale **Customers** page, or you by hand in Shopify admin | **Reject B2B**, **Return to pending** and **Remove B2B access** on the **Customers** page, or you by hand | Checkout discounts, checkout rules, wholesale shipping, Quick Buy, Lock Content Redirect (default mode), the redirect block for new customer accounts, the **Active** tab, **Bulk assign discount**, **Auto assign discount tags** on save, tax exemption on save, **Select Customers** for net terms, loyalty recalculation | | `B2B_Registeration` | Process Wholesale pending customer: has applied and waits for your review. The tag is spelled `Registeration`; type it exactly that way. | A wholesale signup form submission, **Import customers**, **Return to pending**, or you by hand | **Accept B2B** (replaced by `B2B`), **Reject B2B**, **Remove B2B access**, or you by hand | The **Pending** tab, the pending messages in the signup forms, Quick Buy and the Wholesaler Information block, the approval email, and every feature that accepts a tag containing `b2b` | | `B2Bnetterms` | Process Wholesale net terms permission: the customer sees payment terms in Quick Buy when **Allow net terms for specific customers only** is on | **Settings > Net terms > Select Customers**, or you by hand | Saving the **Select customers for Net Terms** window removes it from every wholesale customer you did not select; or you by hand | Quick Buy payment terms (any capitalization). Also counts as "a tag containing `b2b`" for the Product Wholesale block, Hide price and the B2B Redirect Block. | | Flat discount tag, for example `wholesale20` | Grants the Process Wholesale flat discount with that name | **Manage discount tags**, **Bulk assign discount**, **Auto assign discount tags**, or you by hand | **Manage discount tags**, deleting the discount (from customers tagged `B2B` only), or you by hand | Checkout, the Product Wholesale block, Quick Buy, the Wholesaler Information block, the **Discount tags** column on the **Active** tab | | Tier discount tag, for example `case12` | Grants the Process Wholesale quantity, cart value, cart quantity or loyalty tier discount with that name | Same as a flat discount tag | Same as a flat discount tag | Checkout, the Product Wholesale block, Quick Buy, the Wholesaler Information block, loyalty recalculation (loyalty tiers only) | | Price list tag, for example `pricelista` | Grants the Process Wholesale price list with that name | Same as a flat discount tag | Same as a flat discount tag | Checkout, the Product Wholesale block and Quick Buy, on the Professional plan | | Cost plus markup tag, for example `costplus25` | Grants the Process Wholesale cost plus markup discount with that name | Same as a flat discount tag | Same as a flat discount tag | Checkout, the Product Wholesale block and Quick Buy, on the Professional plan | | `pw_loyalty___`, for example `pw_loyalty_loyal365__5511` | The Process Wholesale loyalty tier the customer reached at the last check. The number identifies the tier. | Process Wholesale, automatically, about every 2 hours, for wholesale customers who carry the loyalty discount's tag | Process Wholesale, automatically, when the customer moves to another tier or no longer qualifies | The loyalty discount at checkout | **Discount tag names.** Every Process Wholesale discount tag is the name you gave the discount in **Discount tag name** (or **Name** for a price list). The discount forms accept lower-case letters and numbers only: capital letters become lower case, and spaces, hyphens and other characters are removed as you type. A name cannot contain `b2b` ("'B2B' and its variations are not allowed"), and it cannot be changed after the discount is saved. See [assigning discounts to customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ## Which Process Wholesale features count a customer as wholesale Process Wholesale features read the tags in two different ways: some need the exact tag `B2B`, and some accept any tag that contains the letters `b2b`, which includes `B2B_Registeration`, `B2Bnetterms` and your own tags such as `b2b-vip`. | Feature | Who counts as wholesale | Pending customers (`B2B_Registeration`) | | --- | --- | --- | | Wholesale discounts at checkout (every discount type) | Logged-in customers with the exact tag `B2B`, any capitalization, plus the discount tag | Not wholesale | | Minimum order amount and minimum order quantity | Logged-in customers with the exact tag `B2B` | Never blocked | | Hide payment methods | Logged-in customers with the exact tag `B2B` | See every method | | Wholesale shipping | Logged-in customers with the exact tag `B2B` | See the retail options | | Quick Buy order form | Logged-in customers with the exact tag `B2B` | See the pending approval message | | Net payment terms in Quick Buy | Customers tagged `B2B`, and also `B2Bnetterms` when **Allow net terms for specific customers only** is on | No terms | | Lock Content Redirect, default mode | Logged-in customers with the exact tag `B2B`, any capitalization | Redirected | | Lock Content Redirect with **Customer tags** filled in | Customers with one of the tags you enter (or everyone except them, in the "Hide from" mode) | Depends on the tags you enter | | Redirect block for new customer accounts | Logged-in customers with the exact tag `B2B` | Not redirected | | B2B Redirect Block for legacy customer accounts | Logged-in customers with any tag containing `b2b` | Redirected | | Product Wholesale block | Logged-in customers with any tag containing `b2b` who also have a discount tag for the product | Can see the wholesale tables | | Hide price | Logged-in customers with any tag containing `b2b` see prices | See prices | | Loyalty recalculation | Customers tagged `B2B` who carry the loyalty discount's tag | Not checked | > **Note:** Because the Product Wholesale block, Hide price and the B2B Redirect Block accept any tag containing `b2b`, a pending customer can see wholesale tables and prices that checkout does not give them. Review pending customers promptly. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ## Order tags and order attributes | Tag or attribute | Where it appears | When Process Wholesale adds it | What reads it | | --- | --- | --- | --- | | Order tag `processwholesale` (lower case, one word) | Orders in Shopify admin | When Process Wholesale records a new order that has a customer and a discount whose name contains one of your discount tags, that is, a [wholesale order](https://docs.processwholesale.com/analytics/wholesale-orders). Existing order tags are kept. Orders without a customer and orders from before install are not tagged. | Nothing in Process Wholesale. Use it to filter orders in Shopify admin. Analytics does not read the tag. | | Draft order tag `processwholesale` | Draft orders in Shopify admin | When a customer checks out from Quick Buy with a net payment term, on the draft order Process Wholesale creates | Nothing in Process Wholesale | | Custom attribute **Added Via: processwholesale** | The additional details of the same Quick Buy net terms draft order | On the draft order, together with the tag | Nothing in Process Wholesale | | Cart attribute `Added Via` with the value `processwholesale` | The Shopify cart | When a customer sends a Quick Buy order to the Shopify cart with **Add to cart** (without a payment term) | Nothing in Process Wholesale | The discounts on a wholesale order are labeled "PW: ..." or "PW : ..." followed by the discount tag, for example `PW: wholesale15` for a flat discount and `PW : wholesale` for a price list. See [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience). ## What happens when you edit Process Wholesale tags by hand in Shopify admin The storefront and checkout read the tags directly, so a tag you change in Shopify admin takes effect for those features. What does not happen is the extra work Process Wholesale does as part of an action on its **Customers** page. - **Adding `B2B` by hand:** the customer gets wholesale prices and checkout rules and appears on the **Active** tab. No approval email is sent, no **Auto assign discount tags** are added and the tax exemption setting is not applied until a later action on that customer or a settings change. - **Removing `B2B` by hand:** the customer pays retail prices at the next checkout. No email is sent, and discount tags stay. - **Adding `B2B_Registeration` by hand:** the customer appears on the **Pending** tab. No "Application received" email is sent. - **Removing `B2B_Registeration` by hand:** the customer leaves the **Pending** tab. No email is sent. - **Adding a discount tag by hand:** works when the tag is spelled exactly like the discount tag, in lower case, and the customer also has `B2B`. **Manage discount tags** avoids typing mistakes. - **Removing a discount tag by hand:** the customer stops getting that discount. - **Adding `B2Bnetterms` by hand:** the customer sees payment terms in Quick Buy. The next save of the **Select customers for Net Terms** window removes it again unless the customer is selected there. - **Editing `pw_loyalty_` tags:** do not. Process Wholesale adds and removes them about every 2 hours. - **Adding or removing the `processwholesale` order tag:** changes only the Shopify order filter. Process Wholesale analytics do not change. ## How to name discount tags so orders are counted correctly Process Wholesale counts an order as a wholesale order, and tags it `processwholesale`, when the name of a discount on the order contains one of your discount tags. A short or common tag can match other discounts by accident: a discount tag `sale` also matches a manual discount called "Summer sale 10%", so that order is counted as a wholesale order and tagged `processwholesale`. - Use a distinctive discount tag, such as `wholesalegold15`, that will not appear inside the names of your other discounts. - Avoid short tags and everyday words such as `vip`, `sale` or `gold`. - Give every discount its own tag, even across discount types. See [how to name discount tags so orders are recognized](https://docs.processwholesale.com/analytics/wholesale-orders#how-to-name-discount-tags-so-orders-are-recognized). ## Tags that Process Wholesale leaves behind and how to clean them up | Situation | Tags that stay on the customer | How to clean up | | --- | --- | --- | | You select **Reject B2B**, **Remove B2B access** or **Return to pending** | Discount tags, and `B2Bnetterms` if the customer had it. They give no discount without `B2B` but apply again if `B2B` is added back. | Clear them with **Manage discount tags** before the action, or remove them in Shopify admin | | You delete a discount | The discount tag on customers without `B2B`, such as pending customers. Customers tagged `B2B` lose it. | Remove it in Shopify admin | | You delete a loyalty discount | The `pw_loyalty___` tags. They no longer give a discount. | Remove them in Shopify admin | | You uninstall Process Wholesale | Every customer tag and the `processwholesale` order tags | Remove them in Shopify admin if you want them gone | ## Frequently asked questions ### What tag does Process Wholesale use for wholesale customers? `B2B`. Process Wholesale adds it when you select **Accept B2B** on a pending customer, and checkout discounts apply only to logged-in customers who have it, in any capitalization. ### Why is the pending tag spelled B2B_Registeration? Because that is the literal tag Process Wholesale uses for pending customers. Do not correct the spelling when you tag or search by hand: type `B2B_Registeration`, or the customer will not appear on the **Pending** tab. ### Can I add the B2B tag myself in Shopify? Yes. A customer you tag `B2B` in Shopify admin becomes a Process Wholesale wholesale customer at once, but no approval email is sent, no auto-assigned discount tags are added and the tax exemption setting is not applied. Approve customers with **Accept B2B** to get all three. ### How do I find all wholesale customers in Shopify admin? Filter or search customers by the tag `B2B` in Shopify admin > **Customers**. Inside Process Wholesale, the **Active** tab of the **Customers** page lists every customer tagged `B2B`. ### Does Process Wholesale tag wholesale orders? Yes. Process Wholesale adds the order tag `processwholesale` to each new order with a customer that received a Process Wholesale discount, and to the draft orders Quick Buy creates for net payment terms. The tag is for filtering in Shopify admin; analytics do not read it. ## Related articles - [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags) - [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) - [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders) - [How to remove a customer's wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access) - [Glossary of Process Wholesale terms](https://docs.processwholesale.com/reference/glossary) --- Source: https://docs.processwholesale.com/reference/checkout-messages-reference Section: Reference Plans: All plans Last verified: 2026-11-11 # Checkout and storefront messages reference This page lists every message Process Wholesale shows customers in Shopify checkout and on the Quick Buy checkout step, with the exact English text, when it appears and which languages it is translated into. Checkout messages appear only to logged-in customers tagged `B2B`. The wording is fixed: Process Wholesale has no setting to change it. Hidden payment methods and filtered shipping options show no message. ## Minimum order messages in checkout These messages appear in Shopify checkout, not on the cart page, when a [minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount) or [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) is not met. The customer cannot complete the order until the rule is met. A customer who misses several rules sees one message for each. | Rule | English text | Variable parts | When it appears | | --- | --- | --- | --- | | Minimum order amount | Minimum order amount for wholesale customers is: 200.00 USD | The minimum with two decimals, converted to the customer's currency, then the currency code | The order total after discounts is under the minimum | | Minimum order quantity, **Cart** | Minimum order quantity for wholesale customers is: 5 | The minimum quantity | Total units in the cart are under the minimum | | Minimum order quantity, **Specific products** | Mug: Minimum order quantity for the selected products is: 4 | The product title, then the minimum quantity | A selected product in the cart has fewer units than the minimum (variants added together); one message per product | | Minimum order quantity, **All products** | Mug: Minimum order quantity for all products is: 2 | The product title, then the minimum quantity | A product in the cart has fewer units than the minimum (variants added together); one message per product | ## Languages of the minimum order messages Process Wholesale picks the language of the checkout. Any language not in this table gets English. A Portuguese checkout without a region uses the Brazilian text. | Language | Minimum order amount | Quantity, Cart | Quantity, Specific products | Quantity, All products | | --- | --- | --- | --- | --- | | English | Minimum order amount for wholesale customers is: | Minimum order quantity for wholesale customers is: | Minimum order quantity for the selected products is: | Minimum order quantity for all products is: | | German | Mindestbestellwert für Großhandelskunden ist: | Mindestbestellmenge für Großhandelskunden ist: | Mindestbestellmenge für die ausgewählten Produkte ist: | Mindestbestellmenge für alle Produkte ist: | | Spanish | El pedido mínimo para clientes mayoristas es: | La cantidad mínima de pedido para clientes mayoristas es: | La cantidad mínima de pedido para los productos seleccionados es: | La cantidad mínima de pedido para todos los productos es: | | French | Le montant minimum de commande pour les clients en gros est : | La quantité minimum de commande pour les clients en gros est : | La quantité minimum de commande pour les produits sélectionnés est : | La quantité minimum de commande pour tous les produits est : | | Italian | L'importo minimo dell'ordine per i clienti all'ingrosso è: | La quantità minima dell'ordine per i clienti all'ingrosso è: | La quantità minima dell'ordine per i prodotti selezionati è: | La quantità minima dell'ordine per tutti i prodotti è: | | Norwegian | Minimumsbeløp for grossistkunder er: | Minimumsantall for grossistkunder er: | Minimumsantall for valgte produkter er: | Minimumsantall for alle produkter er: | | Portuguese (Brazil) | O valor mínimo do pedido para clientes de atacado é: | A quantidade mínima do pedido para clientes de atacado é: | A quantidade mínima do pedido para os produtos selecionados é: | A quantidade mínima do pedido para todos os produtos é: | | Portuguese (Portugal) | O valor mínimo da encomenda para clientes grossistas é: | A quantidade mínima da encomenda para clientes grossistas é: | A quantidade mínima da encomenda para os produtos selecionados é: | A quantidade mínima da encomenda para todos os produtos é: | | Swedish | Minsta orderbelopp för grossistkunder är: | Minsta orderkvantitet för grossistkunder är: | Minsta orderkvantitet för valda produkter är: | Minsta orderkvantitet för alla produkter är: | The amount, currency code, quantity and product title are added to the translated text in the same way as in English. Example in Brazilian Portuguese: "O valor mínimo do pedido para clientes de atacado é: 200.00 EUR". ## Discount labels Process Wholesale's wholesale discounts carry these labels. The text after "PW" is the discount tag name, so labels are never translated. See [what wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience). | Discount | Label format | Example | Applied to | | --- | --- | --- | --- | | Flat, quantity tier, cart value tier and loyalty discounts | `PW: ` then the applied tags joined with " & "; a cart value tier's tag comes first | `PW: cartvalue1324 & prodqtyall` | The order, as one combined discount | | Loyalty discount without a cart value tier | The loyalty tag follows the other tags with no separator | `PW: wholesale10loyaltytag` | The order | | Cart quantity tier | `PW: ` | `PW: bulk10` | The order, for the eligible products | | Price list | `PW : ` (with a space before the colon) | `PW : wholesale` | Each product line on the price list | | Cost plus markup | `PW : ` | `PW : costplus20` | Each eligible product line | ## Quick Buy net terms messages These texts appear on the Quick Buy **Order details** page when [net payment terms](https://docs.processwholesale.com/checkout/net-payment-terms) are on. They follow the storefront language and are translated into German, Spanish, French, Italian, Norwegian, Portuguese (Brazil and Portugal) and Swedish; other languages get English. | Text | Where and when | | --- | --- | | Payment terms | Label of the row of term buttons | | When checking out with payment terms, you will be able to complete your order now and pay within the selected time frame. If you would like to pay for your order now, do not select any payment terms, and click 'add to cart' to add all of your items to the cart and checkout normally. | Information icon next to **Payment terms** | | Due on Receipt, Due on Fulfillment, Net 7, Net 15, Net 30, Net 45, Net 60, Net 90 | Term buttons, for the terms you offer | | Order note / Do you want to add any note to your order? | Note box and its placeholder, shown when a term is selected | | Checkout | Button label while a term is selected | | Add to cart | Button label when no term is selected | | Please select a payment term to proceed with your order. | Shown when **Force Payment Terms** is on, until the customer selects a term | ## Where other storefront messages are listed Messages that Process Wholesale shows on the storefront outside checkout are listed in the article for the feature they belong to. | Storefront messages | Article that lists them | | --- | --- | | Quick Buy reorder and review messages, such as stock and price change notices | [How reordering works in Quick Buy (Buy again)](https://docs.processwholesale.com/storefront/quick-buy-reorder) | | Quick Buy messages for visitors who are not approved wholesale customers | [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) | | Signup form error messages | [Wholesale signup form not working](https://docs.processwholesale.com/troubleshooting/signup-form-not-working) | | The message Hide price shows in place of prices | [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices) | | Product page table headers | [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) | | Text you can edit in each block | [Theme block settings reference](https://docs.processwholesale.com/reference/theme-block-settings-reference) | ## Related articles - [How to set a minimum order amount for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-amount) - [How to set a minimum order quantity for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-quantity) - [Languages supported by Process Wholesale](https://docs.processwholesale.com/account/languages) - [Checkout problems for wholesale customers](https://docs.processwholesale.com/troubleshooting/checkout-problems) --- Source: https://docs.processwholesale.com/reference/price-list-csv-format Section: Reference Plans: Professional Last verified: 2026-11-11 # Price list CSV format reference Process Wholesale imports a [price list](https://docs.processwholesale.com/discounts/price-lists) from a `.csv` file that has a header row, a price column and at least one of a SKU column or a Handle column, with up to 50,000 data rows. Rows are matched to your product variants by SKU first, then by Handle. This page lists every accepted header, how prices are read, the template, the export columns and every message the import can show. For the steps, see [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import). Price lists need the Professional plan. ## File requirements | Item | Requirement | | --- | --- | | File type | `.csv`, one file per import | | Header row | Required, in the first row | | Required columns | One price column, and a SKU column or a Handle column (or both) | | Other columns | Ignored, for example `Title` in an exported file | | Maximum rows | 50,000 data rows | | Blank lines | Ignored | | Row numbers in reports | The header is row 1, so the first data row is row 2 | | Prices | In your store currency, without thousands separators | ## Accepted column headers Headers are matched ignoring capitals and surrounding spaces. When a file has more than one accepted header for the same column, the first one in this table's order is used. | Column | Accepted headers, in order of preference | | --- | --- | | SKU | `sku`, `skus`, `variant sku` | | Handle | `handle`, `url handle`, `product handle`, `slug`, `url handle slug` | | Price | `fixed price`, `price`, `wholesale price`, `wholesale`, `amount` | | File from | Columns | Accepted as it is? | | --- | --- | --- | | Process Wholesale template | `sku`, `handle`, `price` | Yes | | Process Wholesale export | `SKU`, `Handle`, `Title`, `Price` | Yes. `Title` is ignored. | | Shopify B2B catalog export | `SKU`, `Handle`, `Fixed Price` | Yes | | Shopify product export | `Variant SKU`, `Handle`, `Variant Price` | No. `Variant Price` is not an accepted price header. Rename it to `Price`. | ## How prices are read Process Wholesale removes everything except digits, dots, commas and minus signs. When a value has both a comma and a dot, the one that comes last is the decimal separator. A comma on its own is a decimal separator. Prices are not rounded. | Value in the file | Price imported | | --- | --- | | `$4.79` | 4.79 | | ` 6.59` | 6.59 | | `1,299.99` | 1299.99 | | `1.299,99` | 1299.99 | | `12,50` | 12.5 | | `1,299` | 1.299 (the comma is read as a decimal separator) | | `1299` | 1299 | | `0` | 0 (accepted; the variant is free on the list) | | `-5` | Not imported: "Negative price" | | empty or `abc` | Not imported: "Invalid price" | ## How rows are matched | Order | Rule | Result | | --- | --- | --- | | 1 | The price is checked | An invalid or negative price is not matched | | 2 | SKU, ignoring capitals and surrounding spaces | One variant with that SKU: matched. Several variants: not matched, and the Handle is not tried. | | 3 | Handle, ignoring capitals, when the SKU is empty or not found | A product with one variant: matched. A product with several variants: not matched. | | 4 | Nothing found | Not matched | | 5 | Several rows match the same variant | The last row wins | ## Template **Download template** in the import window downloads `price-list-template.csv`: ``` sku,handle,price SKU-001,example-product,9.99 SKU-002,another-product,19.50 ``` ## Export columns **Export to CSV** downloads `price-list-.csv`, one row per variant on the list. | Column | Content | | --- | --- | | `SKU` | The variant SKU | | `Handle` | The product handle | | `Title` | The variant title (ignored when the file is imported) | | `Price` | The list price as stored, for example `7` rather than `7.00` | Variants deleted from your store are not in the export. ## Unmatched row file **Download unmatched rows** downloads `unmatched-.csv` with the columns `row`, `sku`, `handle` and `reason`, for up to 2,000 rows. | Reason | What it means | How to fix it | | --- | --- | --- | | Invalid price | The price is empty or not a number | Enter a number, such as `12.50`. | | Negative price | The price is below 0 | Enter 0 or a positive price. | | SKU matches multiple variants in store | More than one variant in your store has this SKU | Give each variant a unique SKU in Shopify, then import again. | | Handle has multiple variants — provide a SKU | The row's SKU is empty or not found, and the product with this handle has several variants | Add the SKU of the variant you mean. Use one row per variant. | | No matching SKU or handle in store | No variant has this SKU and no product has this handle | Check the spelling against Shopify admin. The product may have been deleted or the SKU changed. | | Row is missing both SKU and handle | The SKU and Handle cells are both empty | Add a SKU or a handle, or delete the row. | ## Messages before the import starts | Message | What it means | How to fix it | | --- | --- | --- | | Couldn't detect the required columns. The file needs a price column (e.g. “Fixed Price” or “Price”) and at least one of “SKU” or “Handle”. | No accepted price header, or no SKU or Handle header | Rename the headers to accepted ones. | | Failed to parse the CSV file. | The file could not be read as CSV. The window can also show the file reader's own message instead. | Save the file as CSV (comma separated) and try again. | | Enter a valid price list name (letters and numbers only, no "B2B") before importing. | The **Name** field is empty or not valid | Enter a name with lowercase letters and numbers only. | | Tag name is required, must be alphanumeric, and cannot contain 'B2B'. | The list name is not valid | Use letters and numbers only, without `b2b`. | | The CSV has no rows to import. | The file has a header but no data rows | Add rows below the header. | | Imports are limited to 50000 rows. | The file has more than 50,000 data rows | Remove rows. Do not split one list across several files: each **Update from CSV** replaces the list. | | A price list with the tag name "" already exists. Please use a different tag name. | **Import from CSV** was used with a name that a list already has | Choose a new name, or open that list and use **Update from CSV**. | | No price list named "" to update. | The list being updated no longer exists | Go back to the **Price Lists** tab and open the list again, or import it as a new list. | | Couldn't start the import. A store export may already be running — please try again in a minute. | Another import or store export is running | Wait a minute and try again. | | Couldn't start the import. | The import could not start | Try again. | | Couldn't start the import. Please try again. | The connection was interrupted | Check your connection and try again. | ## Messages after the import runs | Message | What it means | | --- | --- | | Import complete for "". | A new list was created. Counts: **{count} prices set** and **{count} unmatched**. | | Update complete for "". | The list was replaced. Counts: **{count} added**, **{count} updated**, **{count} removed**, **{count} unmatched**. | | Some rows couldn't be matched (no matching SKU/Handle, ambiguous match, or invalid price). Download unmatched rows to fix and re-import. | The import finished, but some rows were not imported. | | The import failed: No rows matched a product by SKU or Handle. Check the file's columns and values, then try again. No price list was created. Please try again. | Not one row matched a product. | | The update failed: No rows matched a product by SKU or Handle — the existing price list was left unchanged. Your existing price list was left unchanged. Please try again. | Not one row matched a product, and the list was not changed. | | The import failed: Variant export … / The update failed: Variant export … | Your product catalog could not be read. Try again. | | The import failed: Price sync … / The update failed: Price sync … | The prices could not be published to checkout. Open the list on the **Price Lists** tab, then run **Update from CSV** again with the same file. | | The import failed. No price list was created. Please try again. / The update failed. Your existing price list was left unchanged. Please try again. | The import stopped. Any other reason after "The import failed:" or "The update failed:" also means the import did not finish. Open the list on the **Price Lists** tab to check it, then try again. | ## Related articles - [How to import, update and export a price list with CSV](https://docs.processwholesale.com/discounts/price-list-csv-import) - [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists) - [Price list CSV import problems](https://docs.processwholesale.com/troubleshooting/price-list-import-problems) --- Source: https://docs.processwholesale.com/reference/video-tutorials Section: Reference Plans: All plans Last verified: 2026-11-11 # Process Wholesale video tutorials Process Wholesale has 14 tutorial videos, hosted on Vimeo, that walk through setup, discounts, price lists, signup forms, the Quick Buy order form, checkout rules, net payment terms and shipping. This page lists every video with its length, where it appears in the Process Wholesale app, and the help article that covers the same steps in text. **At a glance** - **Plan:** The videos are public on Vimeo, so a store on any plan can watch them. Some videos show features that need a higher plan; the linked article states the plan. - **Where in the app:** The Dashboard **Quick guide**, the **Support** page under **Other Tutorials**, and on the pages of the features they explain - **Total running time:** About 62 minutes ## Setup videos (dashboard Quick guide) The Dashboard of the Process Wholesale app shows a **Quick guide** with four steps. Each step has a video. | Quick guide step | Video | Length | Article with the same steps | | --- | --- | --- | --- | | Setup Signup Form | [Signup form tutorial](https://vimeo.com/1179055704) | 6:24 | [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview) | | Setup Wholesale prices on product page | [Product Wholesale block setup](https://vimeo.com/927713040) | 1:42 | [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices) | | Setup Quick Buy Table | [Quick Buy table setup](https://vimeo.com/1106923084) | 5:02 | [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup) | | Create & Assign Discounts | [Create and assign discounts](https://vimeo.com/1032556684) | 6:25 | [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types) and [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers) | Once a store is set up, the Dashboard replaces the Quick guide with a tour card. Its **Watch 3 min tour** button plays the [Process Wholesale quick tour](https://vimeo.com/1220630939) (3:04), which covers approving customers, assigning discounts and updating pricing. ## Feature tutorials (Support page) The **Support** page of the Process Wholesale app lists these five videos under **Other Tutorials**. | Video | Length | What the app says it covers | Article with the same steps | | --- | --- | --- | --- | | [How to create custom price lists](https://vimeo.com/1148192653) | 6:06 | Creating price lists that you can assign to customers | [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists) | | [How to create wholesale case pack products](https://vimeo.com/1135925760) | 9:43 | Creating case pack products for wholesale orders | No matching article | | [How to enable net payment terms](https://vimeo.com/1106922278) | 2:49 | Setting up net 30, 60 or 90 payment terms for wholesale customers | [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms) | | [How to set up a MOQ, minimum order amount, and hide payment methods](https://vimeo.com/1136273904) | 4:03 | Configuring checkout rules for wholesale orders | [Minimum order amount](https://docs.processwholesale.com/checkout/minimum-order-amount), [minimum order quantity](https://docs.processwholesale.com/checkout/minimum-order-quantity) and [hide payment methods](https://docs.processwholesale.com/checkout/hide-payment-methods) | | [How to hide specific products and pages from retail customers](https://vimeo.com/944940074) | 5:12 | Locking content and restricting access for customers who are not wholesale | [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content) | ## Videos on feature pages These videos appear next to the feature they explain. | Video | Length | Where it appears in the app | Article with the same steps | | --- | --- | --- | --- | | [Shipping demo](https://vimeo.com/841684352) | 3:50 | **Shipping** page | [How to show shipping methods only to wholesale customers](https://docs.processwholesale.com/checkout/wholesale-shipping) | | [Custom signup form tutorial](https://vimeo.com/967301815) | 4:36 | **Custom Signup Form** page, **Watch tutorial** | [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form) | | [File upload demo](https://vimeo.com/1130740709) | 0:43 | **Custom Signup Form** page | [How file uploads work on the wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads) | | [How to assign discounts to draft orders](https://vimeo.com/1092582451/7143f9d1b1) | 2:18 | **Support** page, in the answer to "Can I apply wholesale discounts to manually created orders?" | [How to apply wholesale discounts to a Shopify draft order](https://docs.processwholesale.com/discounts/draft-orders) | ## Frequently asked questions ### Where are the tutorial videos inside the Process Wholesale app? In three places: the **Quick guide** on the Dashboard, the **Other Tutorials** section of the **Support** page, and on the **Shipping** and **Custom Signup Form** pages. Every video on this page is also available directly on Vimeo through its link. ### Do I need to watch the videos to set up Process Wholesale? No. Every step shown in a video is written out in the linked help article, with the exact button and field names. The videos are an optional walkthrough of the same steps. ### Is there a video for setting up the Quick Buy table? Yes. The [Quick Buy table setup](https://vimeo.com/1106923084) video (5:02) is in the **Setup Quick Buy Table** step of the Dashboard **Quick guide**. The written steps are in [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). ### Is there a video for the wholesale signup form? Yes, three. The [Signup form tutorial](https://vimeo.com/1179055704) (6:24) covers adding the signup form, the [Custom signup form tutorial](https://vimeo.com/967301815) (4:36) covers building a form with your own fields, and the [File upload demo](https://vimeo.com/1130740709) (0:43) shows the file upload field. ## Related articles - [Quick start: set up wholesale pricing on your Shopify store](https://docs.processwholesale.com/getting-started/quick-start) - [The Process Wholesale Dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status) - [How to get help with Process Wholesale](https://docs.processwholesale.com/account/contact-support) --- Source: https://docs.processwholesale.com/reference/glossary Section: Reference Plans: All plans Last verified: 2026-11-11 # Glossary of Process Wholesale terms This glossary defines the terms used in Process Wholesale and its help center: feature names, on-screen labels, customer and order tags, the three plans, the discount types, the Shopify terms you meet while setting up wholesale, and the everyday words merchants search for, such as MOQ, net 30 or tiered pricing, mapped to the Process Wholesale feature. Entries are in alphabetical order, and each links to the article that explains it in full. **At a glance** - **Plans:** Starter, Enterprise, Professional - **Wholesale customer:** a customer with the tag `B2B` - **Pending customer:** a customer with the tag `B2B_Registeration` (spelled this way) - **Discount families:** flat discount, tier discount, price list, cost plus markup - **Tier methods on screen:** **Individual Product Quantity**, **Total Cart Value**, **Total Cart Quantity**, **Loyalty** - **Related lookups:** [Customer tags and order tags](https://docs.processwholesale.com/reference/customer-tags-reference), [Limits and quotas](https://docs.processwholesale.com/reference/limits-reference), [Settings reference](https://docs.processwholesale.com/reference/settings-reference) ## Process Wholesale terms from A to Z ### Accept B2B **Accept B2B** is the Process Wholesale action on the **Pending** tab of the **Customers** page that approves a wholesale application. It replaces the tag `B2B_Registeration` with `B2B`, adds your auto-assigned discount tags and sends the "Application approved" email when that email is on. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ### Active tab The **Active** tab of the Process Wholesale **Customers** page lists your wholesale customers, those tagged `B2B`, 10 per page, with their discount tags. See [How to remove a customer's wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access). ### Ada Ada is the AI setup assistant inside Process Wholesale. You describe your wholesale program on the Ada card on the **Dashboard**, and the conversation continues in the Ada chat widget. Ada has no plan requirement. See [Ada, the setup assistant in Process Wholesale](https://docs.processwholesale.com/account/ada-setup-assistant). ### Add to order **Add to order** is the button in the Process Wholesale Quick Buy form that adds the quantities a customer typed to their saved order. See [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering). ### Added Via **Added Via** with the value `processwholesale` is the attribute Process Wholesale Quick Buy sets on the Shopify cart, and on the draft orders it creates for net payment terms, so you can see the order came from Quick Buy. See [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference). ### App block An app block is a Shopify theme block that an app provides and that you add to a section of a template under **Add block > Apps** in the theme editor. Process Wholesale has six: Product Wholesale, Quick Buy, Wholesale Signup Form, Wholesale Custom Signup, Lock Content Redirect and B2B Redirect Block. See [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview). ### App embed An app embed is a Shopify theme extension that you switch on once for the whole theme under **Theme settings > App embeds**. The Process Wholesale app embed is **Hide price**. See [Process Wholesale theme blocks and app embeds](https://docs.processwholesale.com/storefront/theme-blocks-overview). ### App Status **App Status** is the section of the Process Wholesale **Dashboard** with six cards that show whether each storefront block is **ON** or **OFF** on your published theme or in customer accounts. See [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status). ### Application received, approved and rejected emails "Application received", "Application approved" and "Application rejected" are the three Process Wholesale emails sent to wholesale applicants. All three are on by default, and you edit them under **Settings > Customer settings > B2B customer emails**. See [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails). ### Apply to **Apply to** is the Process Wholesale minimum order quantity setting that decides what is counted: **Cart** (total units), **Specific products** (each selected product) or **All products** (each product in the cart). The discount forms use a similar field, **Applies to**, to choose all products, selected products, collections or variants. See [How to set a minimum order quantity for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-quantity). ### At-risk customer An at-risk customer in Process Wholesale is a wholesale customer whose latest wholesale order is more than 45 days old. You find them on the **At-risk customers** page, opened from **Analytics > Customers > Take action**, on the Professional plan. Also called a lapsed or inactive customer. See [At-risk customers and recovery emails](https://docs.processwholesale.com/customers/at-risk-customers). ### Auto assign discount tags **Auto assign discount tags** is the Process Wholesale setting under **Settings > Customer settings** that adds the discount tags you choose to every customer you approve with **Accept B2B**, and to up to 100 existing wholesale customers each time you save Settings. See [How to assign discounts automatically when a customer is approved](https://docs.processwholesale.com/customers/auto-assign-discount-tags). ### Automatic discount A Shopify automatic discount applies at checkout without a code. Process Wholesale applies every wholesale price through four automatic discounts it creates and keeps up to date in your store: **B2B Order/Loyalty Discount**, **B2B Cart Quantity Discount**, **B2B Price List Discount** and **B2B Cost Plus Markup Discount**. See [How Process Wholesale works](https://docs.processwholesale.com/getting-started/how-process-wholesale-works). ### B2B `B2B` is the Shopify customer tag that marks a Process Wholesale wholesale customer. Process Wholesale adds it on **Accept B2B**, and checkout discounts, checkout rules and Quick Buy need it, in any capitalization. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ### B2B Cart Quantity Discount **B2B Cart Quantity Discount** is the Shopify automatic discount that Process Wholesale maintains to apply cart quantity tier discounts. Leave it active and unedited in Shopify admin. See [How to give a wholesale discount based on total cart quantity](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts). ### B2B Cost Plus Markup Discount **B2B Cost Plus Markup Discount** is the Shopify automatic discount that Process Wholesale maintains to apply cost plus markup prices, on the Professional plan. Leave it active and unedited in Shopify admin. See [How to price wholesale products at cost plus a markup](https://docs.processwholesale.com/discounts/cost-plus-markup). ### B2B customer B2B customer is the name the Process Wholesale screens use for a wholesale customer: a customer tagged `B2B`. See [wholesale customer](#wholesale-customer). ### B2B customer tax exemption **B2B customer tax exemption** is the Process Wholesale setting under **Settings > Customer settings** that sets your wholesale customers to tax exempt in Shopify. It is off by default and available on every plan. See [How to make wholesale customers tax exempt](https://docs.processwholesale.com/customers/tax-exempt-wholesale-customers). ### B2B Order/Loyalty Discount **B2B Order/Loyalty Discount** is the Shopify automatic discount that Process Wholesale maintains to apply flat discounts, quantity tiers, cart value tiers and loyalty tiers. Leave it active and unedited in Shopify admin. See [How Process Wholesale works](https://docs.processwholesale.com/getting-started/how-process-wholesale-works). ### B2B Price List Discount **B2B Price List Discount** is the Shopify automatic discount that Process Wholesale maintains to apply price list prices, on the Professional plan. Leave it active and unedited in Shopify admin. See [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists). ### B2B Redirect Block The **B2B Redirect Block** is the Process Wholesale app block for the customer account page of legacy customer accounts. It sends logged-in customers with a tag containing `b2b` to the redirect address set in **Settings > Customer settings**, at most once every 12 hours per browser, on Enterprise or Professional. See [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). ### B2B Signup Files **B2B Signup Files** is the Process Wholesale card on the customer details page in Shopify admin that lists links to files a customer uploaded on the custom signup form. See [How file uploads work on the wholesale signup form](https://docs.processwholesale.com/signup-forms/signup-form-file-uploads). ### B2B_Registeration `B2B_Registeration` is the Shopify customer tag Process Wholesale gives a pending customer who has applied for wholesale. The tag is spelled this way; type it exactly like that. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ### B2Bnetterms `B2Bnetterms` is the Shopify customer tag that lets a wholesale customer see net payment terms in Process Wholesale Quick Buy when **Allow net terms for specific customers only** is on. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### Bulk assign discount **Bulk assign discount** is the Process Wholesale button on the **Customers** page that adds one or more discount tags to every customer tagged `B2B` in the background and emails you the result. It adds tags only and never removes them. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ### Bulk order form Bulk order form is a common name for what Process Wholesale calls [Quick Buy](#quick-buy), the wholesale order form block. Also called a quick order form or order table. See [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). ### Buy again **Buy again** is the tab in the Process Wholesale Quick Buy form that lists up to 50 items a wholesale customer ordered recently, with the last quantity of each, so they can reorder. It is on by default and needs Enterprise or Professional. See [How reordering works in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder). ### Cart quantity tier A cart quantity tier is a Process Wholesale tier discount based on the total number of units in the cart, across all products or only selected products or collections. On screen, its **Method** is **Total Cart Quantity**. Also called a mix and match discount. See [How to give a wholesale discount based on total cart quantity](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts). ### Cart value tier A cart value tier is a Process Wholesale tier discount on the whole order once the cart total reaches an amount you set. On screen, its **Method** is **Total Cart Value**. Also called a spend more, save more discount. See [How to give a wholesale discount based on cart total](https://docs.processwholesale.com/discounts/cart-value-tier-discounts). ### Catalog pricing Catalog pricing is a common name for fixed per-product wholesale prices, which Process Wholesale calls a [price list](#price-list). See [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists). ### Checkout rules **Checkout rules** is the section of Process Wholesale **Settings** with the minimum order amount, minimum order quantity and hide payment methods settings, on Enterprise or Professional. See [Settings reference](https://docs.processwholesale.com/reference/settings-reference). ### Checkout validation A checkout validation is a Shopify feature that lets an app stop checkout with a message when an order breaks a rule. Process Wholesale uses checkout validations for the minimum order amount and minimum order quantity. See [Permissions Process Wholesale requests and why](https://docs.processwholesale.com/getting-started/app-permissions). ### Cost per item **Cost per item** is the Shopify variant field that holds what a product costs you. Process Wholesale cost plus markup reads it to set the wholesale price. See [How to price wholesale products at cost plus a markup](https://docs.processwholesale.com/discounts/cost-plus-markup). ### Cost plus markup Cost plus markup is the Process Wholesale discount type that sets the wholesale price to the item's **Cost per item** plus a markup percentage: a cost of 10.00 with a 20% markup gives 12.00. It needs the Professional plan and is created under **Discounts > Cost-Plus Discounts**. See [How to price wholesale products at cost plus a markup](https://docs.processwholesale.com/discounts/cost-plus-markup). ### Custom Signup Form **Custom Signup Form** is the Process Wholesale page where you build your own wholesale signup form with your own fields, file uploads and a consent checkbox, on Enterprise or Professional. See [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). ### Customer segment A customer segment is a saved group of customers in Shopify admin. Process Wholesale does not read or create segments; it works with customer tags, so a segment based on the tag `B2B` holds your wholesale customers. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ### Customer tag A customer tag is a label on a customer in Shopify admin. Process Wholesale uses customer tags to decide who is wholesale (`B2B`), who is pending (`B2B_Registeration`) and which discounts each customer gets (discount tags). See [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference). ### Customers page The **Customers** page of Process Wholesale lists pending and wholesale customers on the **Pending** and **Active** tabs, and holds **Import customers** and **Bulk assign discount**. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ### Customize template **Customize template** is the link next to each email under **Settings > Customer settings > B2B customer emails** in Process Wholesale that opens the editor for that email's subject and message. See [Wholesale application emails and how to edit them](https://docs.processwholesale.com/customers/wholesale-emails). ### Dashboard The **Dashboard** is the home page of the Process Wholesale app, with **App Status**, key wholesale metrics, the setup card and **Quick guide**. See [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status). ### Discount combinations **Discount combinations** is the card under **Settings > Discount settings** in Process Wholesale that decides which product, order and shipping discounts, including Shopify discount codes, the app's flat and tier discounts can combine with. Price lists and cost plus markup have their own cards on Professional. See [Using Shopify discount codes with wholesale discounts](https://docs.processwholesale.com/discounts/discount-codes-and-combinations). ### Discount tag A discount tag is the name you give a Process Wholesale discount, and also the customer tag that grants it. A customer gets the discount when they carry both `B2B` and the discount tag. Discount tags use lower-case letters and numbers, cannot contain `b2b` and cannot be renamed. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ### Draft order A draft order is a Shopify order created before payment, in Shopify admin or by an app. Process Wholesale Quick Buy creates a draft order with payment terms when a customer picks a net payment term, and you can apply wholesale discounts to draft orders you create yourself. See [How to apply wholesale discounts to a Shopify draft order](https://docs.processwholesale.com/discounts/draft-orders). ### Enterprise Enterprise is the second of the three Process Wholesale plans. It allows 100 flat and tier discounts and adds Quick Buy, loyalty tiers, variant selection, the custom signup form, Lock Content Redirect, redirect after login, net payment terms, minimum order rules, hide payment methods and wholesale shipping. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). ### Fixed Price **Fixed Price** is a Process Wholesale discount type for quantity tiers that sets the price of each unit to an amount you enter, for example 15.00 instead of 20.00. New flat discounts do not offer it. See [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts). ### Flat discount A flat discount is the Process Wholesale discount type that gives the same **Percentage Off** or **Price Off** on every eligible item, whatever the quantity. It is available on every plan and created under **Discounts > Flat Discounts**. See [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts). ### Force Payment Terms **Force Payment Terms** is the Process Wholesale net terms setting that hides the Quick Buy checkout button until the customer selects a payment term, so every Quick Buy order becomes a net terms draft order. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### Hide payment methods Hide payment methods is the Process Wholesale checkout rule that hides payment methods you name, matched exactly, from logged-in customers tagged `B2B`, on Enterprise or Professional. See [How to hide payment methods from wholesale customers](https://docs.processwholesale.com/checkout/hide-payment-methods). ### Hide price **Hide price** is the Process Wholesale app embed that, together with the setting **Hide prices and buy buttons from non-B2B customers**, hides prices and buy buttons from visitors without a tag containing `b2b` and shows a message such as "Log in to see price". It needs the Professional plan. See [How to hide prices from customers who are not wholesale](https://docs.processwholesale.com/storefront/hide-prices). ### Import customers **Import customers** is the Process Wholesale button on the **Customers** page that moves existing Shopify customers without wholesale tags onto the **Pending** tab, tagged `B2B_Registeration`. It sends no email. See [How to make an existing Shopify customer a wholesale customer](https://docs.processwholesale.com/customers/add-existing-customers). ### Individual Product Quantity **Individual Product Quantity** is the on-screen **Method** for a Process Wholesale quantity tier, which discounts a product more as more units of that product are bought. See [quantity tier](#quantity-tier). ### Last ordered **Last ordered** is the column in the Process Wholesale Quick Buy **Buy again** tab that shows the last quantity and date of each item, and how often it was ordered. See [How reordering works in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder). ### Legacy customer accounts Legacy customer accounts are Shopify's older customer accounts, with email and password sign-in, labeled **Legacy** under **Settings > Customer accounts** in Shopify admin. Process Wholesale supports them with the **Wholesale Signup Form** theme block and the **B2B Redirect Block**. See [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). ### Lock Content Redirect **Lock Content Redirect** is the Process Wholesale app block that makes every page using a page, collection or product template wholesale-only, by sending visitors without access to another address, `/account/login` by default. It needs Enterprise or Professional. See [How to make pages, collections or products wholesale-only](https://docs.processwholesale.com/storefront/lock-content). ### Loyalty tier A loyalty tier is a Process Wholesale tier discount that gives a wholesale customer an extra order discount once their **Purchase Amount** or **Total number of orders** in the last N days (the **Purchase Period**) reaches a tier. On screen, its **Method** is **Loyalty**. It is recalculated about every 2 hours and needs Enterprise or Professional. See [How loyalty discounts work for repeat wholesale customers](https://docs.processwholesale.com/discounts/loyalty-discounts). ### Manage discount tags **Manage discount tags** is the Process Wholesale action on a customer's row on the **Active** tab that adds or removes that customer's discount tags, keeping every other tag. See [How to assign discounts to wholesale customers](https://docs.processwholesale.com/discounts/assign-discounts-to-customers). ### Minimum order amount The minimum order amount is the Process Wholesale checkout rule that blocks checkout for logged-in customers tagged `B2B` until the cart total after discounts reaches an amount you set. It needs Enterprise or Professional. Also called MOV or minimum spend. See [How to set a minimum order amount for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-amount). ### Minimum order quantity The minimum order quantity is the Process Wholesale checkout rule that blocks checkout for logged-in customers tagged `B2B` until the order has enough units, counted per cart, per selected product or per product. It needs Enterprise or Professional. Also called MOQ. See [How to set a minimum order quantity for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-quantity). ### MOQ MOQ (minimum order quantity) is what Process Wholesale calls the [minimum order quantity](#minimum-order-quantity) checkout rule. See [How to set a minimum order quantity for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-quantity). ### MOV MOV (minimum order value) is what Process Wholesale calls the [minimum order amount](#minimum-order-amount) checkout rule. See [How to set a minimum order amount for wholesale customers](https://docs.processwholesale.com/checkout/minimum-order-amount). ### Net 30 Net 30 is a payment term that gives the buyer 30 days to pay. In Process Wholesale it is one of the [net payment terms](#net-payment-terms) a wholesale customer can choose in Quick Buy. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### Net payment terms Net payment terms in Process Wholesale let a wholesale customer choose a term such as Net 30 on the Quick Buy order details page, which creates a Shopify draft order with those payment terms. You offer up to 3 of 8 terms under **Settings > Net terms**, on Enterprise or Professional. Also called invoice terms or pay-later terms. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### New customer accounts New customer accounts are Shopify's current customer accounts, with one-time code sign-in, labeled **Customer accounts** under **Settings > Customer accounts** in Shopify admin. Process Wholesale supports them with the **Wholesale signup Form** page, the **Wholesaler Information** block and the **Redirect** block. See [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). ### Online Store 2.0 Online Store 2.0 is Shopify's theme architecture with JSON templates and app blocks. Process Wholesale's theme blocks and app embed need an Online Store 2.0 theme and are not available in vintage themes. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). ### Payment terms Payment terms are a Shopify order setting that gives a due date for payment. Process Wholesale adds payment terms to the draft order it creates when a Quick Buy customer chooses a net payment term. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### Pending customer A pending customer in Process Wholesale is an applicant tagged `B2B_Registeration` who waits on the **Pending** tab for you to accept or reject them. Pending customers pay retail prices at checkout. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ### Pending tab The **Pending** tab of the Process Wholesale **Customers** page lists customers tagged `B2B_Registeration`, with **Accept B2B** and **Reject B2B** for each. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ### Percentage Off **Percentage Off** is a Process Wholesale discount type that takes a percentage off the price. Flat discounts cap it at 100; tier discounts do not cap it, so enter 100 or less. See [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types). ### Price book Price book is a common name for a list of fixed customer-specific prices, which Process Wholesale calls a [price list](#price-list). See [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists). ### Price list A price list is the Process Wholesale discount type that sets a fixed price per product variant for customers tagged `B2B` and the list's tag, applied at checkout as a discount labeled "PW : ". It needs the Professional plan and can be imported from CSV. Also called a set price list. See [How to create a wholesale price list with fixed prices](https://docs.processwholesale.com/discounts/price-lists). ### Price Off **Price Off** is a Process Wholesale discount type that takes a fixed amount off: per unit for flat discounts and quantity tiers, and per order for cart value and loyalty tiers. Keep it below the price of every product the discount covers. See [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types). ### processwholesale `processwholesale` is the order tag Process Wholesale adds in Shopify admin to new orders with a customer that received a Process Wholesale discount, and to the draft orders Quick Buy creates for net payment terms. Analytics does not read it. See [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference). ### Product Wholesale block The **Product Wholesale** block is the Process Wholesale app block for product templates that adds up to three wholesale discount tables under the price for logged-in customers with a tag containing `b2b` and a discount tag for the product. The theme's retail price stays. It works on every plan. See [How to show wholesale prices on product pages](https://docs.processwholesale.com/storefront/product-page-wholesale-prices). ### Professional Professional is the highest of the three Process Wholesale plans. It includes everything in Enterprise and adds price lists, cost plus markup, Hide price, full Analytics with export, and at-risk customers. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). ### Purchase Period **Purchase Period** is the number of days a Process Wholesale loyalty tier looks back when it adds up a customer's spend or orders, for example 365 for the last year. See [How loyalty discounts work for repeat wholesale customers](https://docs.processwholesale.com/discounts/loyalty-discounts). ### pw_loyalty tag A `pw_loyalty_` tag, in the form `pw_loyalty___`, is the customer tag Process Wholesale adds and removes about every 2 hours to record the loyalty tier a customer has reached. Do not edit it by hand. See [How loyalty discounts work for repeat wholesale customers](https://docs.processwholesale.com/discounts/loyalty-discounts). ### PW label "PW" at the start of a discount name at checkout or on an order, as in `PW: wholesale15` or `PW : wholesale`, marks a discount from Process Wholesale, followed by the discount tag. See [What wholesale customers see in the cart and at checkout](https://docs.processwholesale.com/checkout/cart-and-checkout-experience). ### Quantity breaks Quantity breaks is a common name for what Process Wholesale calls a [quantity tier](#quantity-tier). Also called price breaks or bulk pricing. See [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts). ### Quantity tier A quantity tier is the Process Wholesale tier discount that lowers a product's price the more units of that product are in the cart, for example 10% off for 1 to 9 units and 20% off for 10 or more. On screen, its **Method** is **Individual Product Quantity**. See [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts). ### Quick Buy **Quick Buy** is the Process Wholesale wholesale order form, an app block for page templates that lists products with each wholesale customer's own prices, quantity boxes and an order summary. Only logged-in customers tagged `B2B` see the form. It needs Enterprise or Professional. See [How to set up the Quick Buy wholesale order form](https://docs.processwholesale.com/storefront/quick-buy-setup). ### Quick guide The **Quick guide** is the Process Wholesale **Dashboard** checklist of setup steps, with tutorial videos. **Setup Signup Form** and **Create & Assign Discounts** tick themselves; the product page and Quick Buy steps do not, so use **App Status** for those. See [The Process Wholesale dashboard and App Status explained](https://docs.processwholesale.com/getting-started/dashboard-and-app-status). ### Recovery email A recovery email is the fixed "Ready to place your next order?" email that Process Wholesale sends, in your store's name, to an at-risk customer from the **At-risk customers** page, on the Professional plan. Replies do not reach you. See [At-risk customers and recovery emails](https://docs.processwholesale.com/customers/at-risk-customers). ### Redirect after login Redirect after login is the Process Wholesale feature that sends wholesale customers to a page you choose, such as `/collections/wholesale`, after they log in, at most once every 12 hours. You set it under **Settings > Customer settings** on Enterprise or Professional. See [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). ### Redirect block The **Redirect** block is the Process Wholesale block for the **Orders** page of new customer accounts that sends logged-in customers tagged `B2B` to your redirect address, on Enterprise or Professional. See [How to redirect wholesale customers after login](https://docs.processwholesale.com/customers/redirect-after-login). ### Reject B2B **Reject B2B** is the Process Wholesale action on the **Pending** tab that turns down a wholesale application. It removes the wholesale tags, keeps discount tags and sends the "Application rejected" email when that email is on. See [How to approve or reject wholesale applications](https://docs.processwholesale.com/customers/approve-or-reject-applications). ### Remove B2B access **Remove B2B access** is the Process Wholesale action on the **Active** tab that ends a customer's wholesale access by removing `B2B`. It sends no email and keeps discount tags. See [How to remove a customer's wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access). ### Return to pending **Return to pending** is the Process Wholesale action on the **Active** tab that moves a wholesale customer back to the **Pending** tab, replacing `B2B` with `B2B_Registeration`. It sends no email. See [How to remove a customer's wholesale access](https://docs.processwholesale.com/customers/remove-wholesale-access). ### Sample data Sample data is the example content the Process Wholesale Analytics **Customers** and **Products** tabs show on plans below Professional, marked "This is sample data." See [Wholesale analytics: metrics, definitions and export](https://docs.processwholesale.com/analytics/wholesale-analytics). ### Saved order A saved order is the Process Wholesale Quick Buy order a customer builds with **Add to order**. It is kept for that browser, separate from the Shopify cart, until checkout, and has no expiry. See [How wholesale customers order with Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-ordering). ### Select Customers **Select Customers** is the Process Wholesale button under **Settings > Net terms** that opens **Select customers for Net Terms**, where you choose which wholesale customers get the `B2Bnetterms` tag. Saving removes the tag from every wholesale customer you did not select. See [How to offer net payment terms to wholesale customers](https://docs.processwholesale.com/checkout/net-payment-terms). ### Select individual variants **Select individual variants** is the **Applies to** option in Process Wholesale discount forms that limits a flat, tier or cost plus markup discount to chosen variants. It needs Enterprise or Professional. See [How to create a flat wholesale discount](https://docs.processwholesale.com/discounts/flat-discounts). ### Shopify Plus Shopify Plus is one of Shopify's own plans. No Process Wholesale feature is limited to Shopify Plus stores. See [Process Wholesale requirements and compatibility](https://docs.processwholesale.com/getting-started/requirements-and-compatibility). ### Starter Starter is the first of the three Process Wholesale plans. It allows one flat discount or one tier discount of any type except Loyalty. See [Process Wholesale plans and what each plan includes](https://docs.processwholesale.com/account/plans-and-pricing). ### Tag priority **Tag priority** is the Process Wholesale setting under **Settings > Discount settings** that decides which discount a cart line gets when a flat discount and a quantity tier both cover it: **Prefer flat tag** (the default) or **Prefer tier tag**. See [Which wholesale discount applies: priority and stacking rules](https://docs.processwholesale.com/discounts/discount-priority-and-stacking). ### Tier discount A tier discount is the Process Wholesale discount type whose discount grows in tiers, by product quantity, cart value, cart quantity or loyalty. It is created under **Discounts > Tier Discounts**, and each tier uses **Percentage Off**, **Price Off** or, for quantity tiers, **Fixed Price**. See [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types). ### Tiered pricing Tiered pricing is a common name for what Process Wholesale calls a [tier discount](#tier-discount). See [Wholesale discount types compared](https://docs.processwholesale.com/discounts/discount-types). ### Total Cart Quantity **Total Cart Quantity** is the on-screen **Method** for a Process Wholesale [cart quantity tier](#cart-quantity-tier). See [How to give a wholesale discount based on total cart quantity](https://docs.processwholesale.com/discounts/cart-quantity-tier-discounts). ### Total Cart Value **Total Cart Value** is the on-screen **Method** for a Process Wholesale [cart value tier](#cart-value-tier). See [How to give a wholesale discount based on cart total](https://docs.processwholesale.com/discounts/cart-value-tier-discounts). ### Trade account Trade account is a common name for what Process Wholesale calls a [wholesale customer](#wholesale-customer): a customer tagged `B2B`. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ### Use last **Use last** is the button in the Process Wholesale Quick Buy **Buy again** tab that fills in the last quantity a customer ordered of an item, lowered to the stock still available. See [How reordering works in Quick Buy](https://docs.processwholesale.com/storefront/quick-buy-reorder). ### Use new customer flow **Use new customer flow** is the setting on the Process Wholesale signup form theme blocks that chooses the flow: **No** for legacy customer accounts (with a password), **Yes** for new customer accounts (Process Wholesale creates the account from the email), or **Auto**. See [How to add the wholesale signup form to your theme (legacy customer accounts)](https://docs.processwholesale.com/signup-forms/signup-form-legacy-accounts). ### Volume pricing Volume pricing is a common name for what Process Wholesale calls a [quantity tier](#quantity-tier). See [How to set up quantity breaks (volume pricing) for wholesale customers](https://docs.processwholesale.com/discounts/quantity-tier-discounts). ### Wholesale customer A wholesale customer in Process Wholesale is a customer approved for wholesale and tagged `B2B`, shown on screen as a B2B customer. Logged-in wholesale customers who also carry a discount tag get wholesale prices at checkout. See [Wholesale customers and customer tags explained](https://docs.processwholesale.com/customers/wholesale-customers-and-tags). ### Wholesale Custom Signup **Wholesale Custom Signup** is the Process Wholesale theme block that shows the form you build on **Custom Signup Form**, on Enterprise or Professional. See [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). ### Wholesale custom signup Form **Wholesale custom signup Form** is the Process Wholesale page for new customer accounts that shows the form you build on **Custom Signup Form** to signed-in customers, on Enterprise or Professional. See [How to build a custom wholesale signup form](https://docs.processwholesale.com/signup-forms/custom-signup-form). ### Wholesale order A wholesale order in Process Wholesale is an order with a customer, recorded after install, where the name of a discount on the order contains one of your discount tags. Wholesale orders drive Analytics and at-risk customers, and are tagged `processwholesale`. See [Which orders count as wholesale orders](https://docs.processwholesale.com/analytics/wholesale-orders). ### Wholesale shipping Wholesale shipping is the Process Wholesale **Shipping** page feature that shows the shipping rates, pickup locations and local delivery you select only to logged-in customers tagged `B2B`, and hides them from everyone else. It needs Enterprise or Professional. See [How to show shipping methods only to wholesale customers](https://docs.processwholesale.com/checkout/wholesale-shipping). ### Wholesale Signup Form **Wholesale Signup Form** is the standard Process Wholesale signup form. As a theme block it serves legacy customer accounts, and guests on new customer accounts when **Use new customer flow** is **Yes**; as the **Wholesale signup Form** page in new customer accounts it serves signed-in customers. Both work on every plan and create a pending customer. Also called a wholesale application form or B2B registration form. See [Wholesale signup forms: which form to use](https://docs.processwholesale.com/signup-forms/signup-forms-overview). ### Wholesaler Information **Wholesaler Information** is the Process Wholesale block for the **Profile** page of new customer accounts. It shows a sign-up invitation to customers who are not wholesale, the pending message to pending customers, and a table of their discounts to wholesale customers. See [How to add the wholesale signup form to new customer accounts](https://docs.processwholesale.com/signup-forms/signup-form-new-customer-accounts). ## Related articles - [Customer tags and order tags used by Process Wholesale](https://docs.processwholesale.com/reference/customer-tags-reference) - [Limits and quotas reference](https://docs.processwholesale.com/reference/limits-reference) - [Feature availability by plan](https://docs.processwholesale.com/reference/plan-features-reference) - [What is Process Wholesale?](https://docs.processwholesale.com/getting-started/what-is-process-wholesale) - [How Process Wholesale works: customer tags, discounts and checkout](https://docs.processwholesale.com/getting-started/how-process-wholesale-works)