What a B2B quote process needs
Before touching settings, write down the answers to these four questions. They decide everything below.
- Who can see prices? Everyone, only logged-in accounts, or only approved trade accounts?
- Can anyone request a quote, or only trade accounts? Most shops allow anyone; a request form is a lead.
- Who replies, and how fast? One person or a team. If it is a team, requests must be visible somewhere shared, not in one mailbox.
- What happens when the buyer says yes? They pay online, you invoice them, or a rep calls. This decides whether you need the quote to turn into a WooCommerce order.
Step 1: decide who sees prices
Install Quotyra Quote Requests (free) and open WooCommerce → Settings → Quotes. Under "Hide prices":
- Public catalogue, prices for accounts only: tick Guests. Set the replacement text to "Login for trade pricing".
- Prices only for approved trade accounts: tick Guests, and under Roles tick Customer. Create a "Wholesale" role (any role plugin does this, or a one-line
add_role()call) and leave it unticked. New sign-ups land in Customer and see no prices until you move them to Wholesale. - Prices for everyone, quotes for bulk: leave both off. The quote button sits next to Add to cart.
Administrators and shop managers always see prices.
Step 2: give buyers a quote basket
B2B buyers rarely want a quote for one item. They want to build a list and send it once. Create a page, add the [quotyra_quote_basket] shortcode or the "Quote basket" block, publish, and select it as the "Quote basket page" in the settings tab.
On the same tab, under "Request form fields", turn on Company and Phone. For a B2B form these two matter more than the message field: company tells you whether to quote trade prices, phone tells you whether a rep can call. Add Country and Postcode if delivery cost is part of your price.
Rename the button if "Add to quote" is not your language. "Add to enquiry" or "Request price" are common in the UK; "Get a quote" in the US.
Step 3: route requests to the people who answer them
Set the "Recipient email" to a shared address (sales@, not a person). Every request also appears under WooCommerce → Quotes with status New, the items and quantities, and the customer's details. Anyone with the Shop manager role can open it, add an internal note the customer never sees ("called 10:30, wants delivery before the 20th"), and move it to Quoted, Accepted or Declined.
This is the part most email-only setups miss. With a shared list, two people never answer the same request and you can see at a glance which quotes have been sitting for three days.
Step 4: reply with a price
In the free version, you reply by email from the quote record (the customer's address is right there) and change the status to Quoted. For most small B2B shops this is enough.
Make the reply template once and reuse it. A B2B quote reply needs: the items with unit price and line total, delivery cost or terms, how long the price is valid, payment terms, and one sentence on how to accept. If you reply within one working day you are already faster than most suppliers your buyer deals with.
Step 5: turn an accepted quote into an order
This is where it depends on how you get paid.
Buyer pays online
With Quotyra Pro you send a counter-offer from the quote record. The customer gets an email with the quoted prices and an accept link. When they accept, the quote becomes a WooCommerce order at the quoted prices, they pay through your normal checkout, and stock and reports update like any other order. You can also attach a PDF of the quote and set an expiry so an old price cannot be accepted months later.
You invoice on account
Create the order manually under WooCommerce → Orders → Add order, set the quoted prices per line, and mark it as paid when the invoice settles. Quotes never become orders on their own, so order numbers and reports stay clean until you decide. Pro's accept-to-order does this step for you with the quoted prices already filled in.
A rep closes by phone
Keep the quote in the admin as the record, add notes as the conversation goes, and create the order when it closes. The quote and the order are separate records, which is what you want for reporting.
Things that go wrong
- Page caching and sessions. Some quote plugins start a session cookie for every visitor, which stops the cache from serving pages. Quotyra does not create a session until something is added to the basket. If you use a different plugin, test your cache hit rate on staging.
- Prices hidden but still in structured data. If you hide prices with CSS or a theme setting, the price is still in the page's product schema. Hide them server-side.
- Trade sign-ups with no approval step. If anyone who registers gets the wholesale role, hiding prices was pointless. Keep new accounts in Customer until you check them.
- Minimum quantities. If you only quote above a certain quantity, say so on the product page. Pro has minimum quantities per product; in the free version, put it in the product description.
Checklist
- Decide who sees prices and set Guests and Roles accordingly.
- Create the quote basket page and select it in settings.
- Turn on Company and Phone in the request form.
- Point the recipient email at a shared mailbox.
- Send a test request as a guest and confirm it appears under WooCommerce → Quotes.
- Write your reply template.
- Decide how an accepted quote becomes an order, and add Pro if you want that to be one click.