How a buyer requests a quote
This is what your customer sees from the moment they click Request a Quote to the moment they receive your reply.
1. The button on the product page
Logged-in B2B customers (per your eligibility rule) see a Request a Quote button below the Buy buttons. The label is editable per language under Settings → Storefront Text → Quote.
2. Click → modal opens
The button opens a modal on the same product page — no redirect, no checkout interruption. The modal shows:
All variants of the current product as rows
The buyer's contact info already filled in (name + email) for logged-in customers
An optional message box
Optional file attachment (PDF / JPG / PNG, max 2 MB)
3. Set quantities + target prices
The buyer enters a quantity on the variants they want to quote. Rows with quantity 0 are skipped.
For each row they can suggest a target price (optional). Leave it blank and the modal pre-fills the current catalog price as a starting point.
Other optional fields appear if enabled in Quote settings:
Needed-by date
PO number
Tax / VAT ID
4. Submit
When the buyer clicks Submit quote request:
The app validates email + at least one variant has quantity > 0
It checks eligibility against the customer's Shopify tags (your rule from Quote settings)
Auto-reject rules apply — too-low target price or too-low quantity gets a polite rejection message
A new quote is created with status Pending in your Quotes inbox
You receive a New quote request email
Buyer is redirected to their quote detail page, status Pending — Waiting for a reply
5. Buyer waits for your reply
Logged-in buyers see all their quotes in the B2B Customer Portal at /apps/orbit-boost-wholesale/portal/quotes. An individual quote also opens directly at /apps/orbit-boost-wholesale/quotes/<id> (used by email deep links and buyers who aren't in the portal). Or they wait for the Quote update email and click the link.
While the quote is Pending, the buyer can only view — Accept / Decline / Send reply buttons appear only once you have replied with prices.
Behind the scenes
The block reads the customer's info from Liquid (
{{ customer }}) so the modal pre-fills without any extra API call.For customers using Shopify's new customer accounts, the backend falls back to looking up the customer by email when the App Proxy doesn't pass an ID.
Customer tags are validated again on the server so the frontend cannot bypass your B2B-only rule by editing the page.
Next steps
Last updated
Was this helpful?