arrow_back_ios Blog How to Add Request for Quote (RFQ) to Magento 2

How to Add Request for Quote (RFQ) to Magento 2

calendar_today April 13, 2026 visibility 1 views folder_open Magento 2 Tutorials, B2B Tools label Quote Management, B2B E-commerce, EasyQuote person By Vladimir Popov

Request for Quote (RFQ) in Magento 2 lets B2B customers add products to a cart, request a custom price instead of checking out, and receive a negotiated proposal — all without a separate quote platform. This guide shows you how to add RFQ to any Magento 2 store using MageMe EasyQuote: install via Composer, configure customer-group rules, set up email notifications, manage quotes in the admin, and convert an approved quote to an order with a single click. Compatible with Magento 2.4.4+ on Luma, Breeze, and Hyvä.

Out of the box, Magento 2 Community has no quote workflow at all: every product on the storefront has a fixed price, and the only way to complete a purchase is through the checkout. Adobe Commerce B2B adds a native quote module, but it’s tied to the Enterprise licence and its workflow is rigid. For everyone else — every B2B store running Community or wanting a simpler lifecycle — you need a third-party RFQ extension.

This tutorial walks through the three approaches available to you, shows the step-by-step setup for the native-cart RFQ pattern (the simplest and the one we recommend for most B2B stores), and explains how to tie in HidePrice or WebForms for advanced scenarios.


What’s in this guide

Why B2B stores need Request for Quote in Magento 2

Magento 2’s catalogue model assumes a consumer transaction: one product, one price, one checkout. B2B doesn’t work that way. A wholesaler ordering 500 units at a negotiated discount, a contractor requesting a project estimate, a dealer asking for a one-off bulk quote — none of these fit the standard checkout. They all need a conversation, a proposal, and an approval before money changes hands.

Without an RFQ system, B2B merchants usually end up with one of these workarounds:

check_circle
Contact forms + email threads

Customer submits a contact form with free-text description, sales replies by email, price agreed after five messages. No structured record, no products linked, no conversion tracking.

sell
Hidden prices + login gates

Prices are hidden from guests; customers have to create an account to see anything. Huge friction, low account signup rate, guests bounce before the sales team ever hears from them.

sell
Custom price lists per group

Different customer groups see different prices, but there’s no way to negotiate beyond the tier. Every unusual deal becomes an out-of-band email exchange.

verified
Adobe Commerce B2B module

Powerful but enterprise-licence only. Not an option for Community stores or smaller B2B operations that need a quote flow without the Adobe Commerce price tag.

A dedicated RFQ extension replaces all four workarounds with a single structured workflow: cart → quote request → admin review → negotiated proposal → customer approval → real order.

Three approaches to RFQ in Magento 2

Before installing anything, decide which quote model fits your store. There are three:

shopping_cart
Approach 1
Native cart quotes

Customers use the standard Magento cart. A “Request a Quote” button sits next to “Proceed to Checkout”. One cart, two outcomes.

Best for: Stores mixing retail + B2B, wholesalers who want the familiar cart UX.

call_split
Approach 2
Separate quote cart

Customers have two distinct carts: one for immediate purchase, one for quote requests. Products are moved between them explicitly.

Best for: Stores with two genuinely different buying motions that shouldn’t share state.

check_circle
Approach 3
Form-based inquiries

Customers submit a free-text form (“What do you need? What quantity?”) instead of a structured cart. The sales team replies manually.

Best for: Service businesses or highly-custom-product stores where a cart doesn’t make sense.

The remainder of this guide focuses on Approach 1 (native cart quotes) using EasyQuote, because it’s the fastest to set up and the only one that lets the same customer move seamlessly between immediate purchase and negotiated quote without losing cart state. For a focused walkthrough of the cart-page button itself, see How to add a quote request form to your Magento 2 cart page. For Approach 3 (form-based), pair MageMe WebForms with HidePrice. For a head-to-head comparison of all five RFQ extensions on the market, see our best Magento 2 Request for Quote extensions roundup.

Choosing an RFQ extension for Magento 2

There are four Magento 2 extensions that most B2B stores evaluate when they need a proper quote workflow. Here is a short pointer to each before we start the setup tutorial:

check_circle
MageMe EasyQuote

€179 one-time — Hyvä CSP, Breeze native

Native cart-based quotes, tier pricing inside the quote, PDF proposals, Quick Checkout Links. First Magento 2 RFQ extension to ship as CSP-compliant for Hyvä. The tool this tutorial configures.

business
Cart2Quote

€299–€599 — Hyvä compatible

Three-tier licensing (Starter / Business / Enterprise), proposal builder, salesrep assignment, support Magento 2.4.8 + PHP 8.4. Mature Dutch vendor, on the market since Magento 1.

request_quote
Amasty Request a Quote

Commercial — Hyvä ready

Fits the Amasty module ecosystem, admin-side negotiation, customer-group rules, and bulk CSV export. A natural pick if you already run the Amasty stack.

compare
Aheadworks B2B Cart to Quote

Commercial — GraphQL (2026)

March 2026 release added a GraphQL API for headless storefronts. Good fit for PWA or custom-frontend B2B sites that need programmatic quote access.

For a full side-by-side comparison across pricing, Hyvä support, PHP 8.4 readiness, and feature matrix, see our best Magento 2 Request for Quote extensions roundup and the dedicated EasyQuote vs Cart2Quote head-to-head.

The rest of this tutorial shows step-by-step setup using MageMe EasyQuote. The general workflow (install → configure visibility → set up emails → admin negotiation) maps onto any of the four extensions, but the specific admin paths and config keys below are EasyQuote-specific.

Step-by-step: install EasyQuote via Composer

EasyQuote installs like any standard Magento 2 extension. You need SSH access to the Magento 2 root and the Composer authentication keys from your MageMe account.

download
Step 1
Add the package

From your Magento 2 root directory:

composer require mageme/module-easyquote

If prompted for credentials, use the public / private keys from My Account → Composer Keys in your MageMe store account.

settings
Step 2
Enable the module and run Magento setup
bin/magento module:enable Mageme_EasyQuote
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
cached
Step 3
Flush the cache
bin/magento cache:flush

After the flush you should see the EasyQuote menu in the Magento admin (Marketing → EasyQuote → Quotes) and a new config section at Stores → Configuration → MageMe → EasyQuote.

Configure quote visibility and customer groups

By default EasyQuote shows the “Request a Quote” button in the cart for every customer group. In most real B2B stores you want more control: only wholesalers see the button, retail customers go through the normal checkout, guests have to log in to request quotes.

EasyQuote general configuration with customer group visibility rules in Magento 2 admin
EasyQuote general configuration with customer group visibility rules

Open Stores → Configuration → MageMe → EasyQuote → General:

  1. Enable EasyQuote: set to Yes.
  2. Allowed Customer Groups: hold Ctrl/Cmd to multi-select. Pick only the groups that should see the quote button (e.g. Wholesale, Dealers). Leaving this empty means “all groups”.
  3. Allow Guest Quotes: set to No if you want to force account creation before quoting. This is the safer default — guest quotes are hard to follow up on without contact information.
  4. Button Position: choose where the quote button appears (next to Proceed to Checkout, under the cart totals, or both).
  5. Button Label: defaults to “Request a Quote”. Change if your store uses different wording (“Get Custom Pricing”, “Request Proposal”).

Save the configuration and flush the full-page cache. Test in an incognito window: the button should appear (or not) for the customer groups you configured.

Set up email notifications and templates

When a quote is submitted, two emails need to go out: one to the admin (so sales knows to review it) and one to the customer (confirmation). EasyQuote ships with default templates for both, but you should customise them for brand consistency.

Go to Stores → Configuration → MageMe → EasyQuote → Email:

  1. Admin Recipient: the email address that receives new-quote notifications. Use a shared mailbox (quotes@example.com) not a personal one — you don’t want the only recipient to be on vacation when a big quote arrives.
  2. Email Sender: pick the store contact (usually “Sales”).
  3. New Quote Admin Template: defaults to the plain EasyQuote template. To customise, go to Marketing → Email Templates → Add New Template, load the EasyQuote - New Quote (Admin) default, edit the HTML, save, then select it in the configuration.
  4. New Quote Customer Template: same process for the customer-facing confirmation.
  5. Quote Proposal Template: used when you send a proposal back to the customer after negotiation.

Test the email flow: submit a quote from the storefront, check that both emails arrive, and verify the product names, prices, and quote-view links render correctly.

Manage quotes in the admin: review, negotiate, approve

All incoming quotes appear in Marketing → EasyQuote → Quotes, in a grid that looks and behaves like the Magento Orders grid. Each quote has a status, a customer, a product list, a subtotal, and a lifecycle.

EasyQuote quotes grid in Magento 2 admin with status, customer, and total columns
Quotes grid in Magento 2 admin: status, customer, and total columns
EasyQuote quote edit page in admin with line items, negotiated prices, and action buttons
Quote edit page: line items, negotiated prices, and action buttons

The standard quote lifecycle is:

check_circle
Status 1
New

Quote just submitted. Nothing has been done with it yet. The admin has been notified by email.

check_circle
Status 2
In Review / Pending

Sales is working on the quote. Internal notes can be added, line items edited, discounts applied.

description
Status 3
Proposal Sent

The customer has been emailed a proposal (PDF or inline). The ball is back in their court.

check_circle
Status 4
Approved → Order

Customer clicked the approve link. The quote converts to a real Magento order with the negotiated price and proceeds through normal fulfilment.

To negotiate a quote:

  1. Click the quote in the admin grid to open the detail view.
  2. Edit line item quantities, unit prices, or add discounts. The subtotal recalculates live.
  3. Add an internal note (visible only to admin) with context for other team members.
  4. Add a customer note (visible in the proposal) explaining the pricing.
  5. Click Send Proposal. EasyQuote generates a PDF proposal (if enabled) and emails it with a secure approval link.

When the customer clicks approve, EasyQuote converts the quote to a real Magento order. All standard Magento flows (invoicing, shipping, refunds, order emails) work as usual — from that point on, the quote is indistinguishable from any other order.

Advanced features: tier pricing, proposals, quick checkout

Once the basic flow is working, three advanced features significantly improve the buyer experience and close rates:

Tier pricing inside the proposal

For quote requests that span multiple quantity brackets (“100 units at €12 each, 500 at €10, 1000 at €9”), EasyQuote v1.4+ lets you add tier pricing rows inside the proposal. The customer sees all tiers and picks the quantity they want before approving. This replaces the back-and-forth of sending multiple email quotes and converts more deals. See the EasyQuote v1.4 tier pricing release notes for setup details.

PDF proposal generation

EasyQuote can generate a branded PDF proposal with your logo, store details, line items, tax breakdown, and an approval button. Configure the template under Stores → Configuration → MageMe → EasyQuote → Proposals. The PDF is attached to the proposal email and stored in the quote record for audit.

Quick Checkout Links

Instead of forcing the customer to log in, review the quote, and click approve (three steps), EasyQuote can send a Quick Checkout Link: a single URL that takes them directly to a pre-filled checkout with the negotiated price applied. One click from email to order confirmation. See the EasyQuote v1.2 quick checkout release notes for setup.

Combine EasyQuote with HidePrice and WebForms

EasyQuote handles the quote lifecycle, but two common B2B requirements need help from other extensions:

Request a Quote button on the product page next to Add to Cart
Request a Quote button on the product page, next to Add to Cart

Hide prices from the wrong customer groups

By default, prices are visible on the storefront — quotes are for negotiating, not hiding. If you also need to hide prices from guests or retail customers entirely, pair EasyQuote with MageMe HidePrice. HidePrice controls who sees the price; EasyQuote handles the quote request. Together they give you a full “login to see prices, request a quote to negotiate” flow. Our Hide Prices in Magento 2 guide walks through the HidePrice side of this setup.

Collect custom fields with each quote

EasyQuote captures the standard fields (name, email, company, phone, comment). If your quote process needs custom fields — project timeline, delivery address, file upload with technical drawings, terms acceptance — add a MageMe WebForms form to the quote submission step. The form is embedded in the quote request UI and the submitted data is attached to the quote record in the admin.

Key takeaways

  • Pick the native-cart approach first. For 90% of B2B stores, letting customers use the standard Magento cart with a “Request a Quote” button is the simplest and highest-converting flow. Separate-cart and form-based approaches are edge cases.
  • Scope quote visibility to customer groups. Showing the quote button to everyone (including retail guests) confuses buyers and dilutes the retail funnel. Enable it only for Wholesale / Dealer / Contractor groups.
  • Customise the email templates early. The default templates are functional but generic. A quote proposal is a sales document — invest ten minutes in the branding before your first real quote goes out.
  • Use tier pricing inside proposals. Multiple quantity brackets on one proposal convert better than three separate quotes. This is the single feature that separates serious B2B RFQ from basic “email me a price” workflows.
  • Quick Checkout Links are the close-rate hack. The fewer clicks between proposal and order, the higher the conversion. A single email → order flow beats any multi-step approval process.

Frequently asked questions

help_outline Can I add Request for Quote to Magento 2 Community, or do I need Adobe Commerce? expand_more

You can add RFQ to Magento 2 Community with a third-party extension like MageMe EasyQuote. Adobe Commerce B2B ships its own quote module, but it’s tied to the Enterprise licence. For Community stores and smaller B2B operations, EasyQuote provides the same lifecycle (cart, negotiation, proposal, approval, conversion) at a one-time €179 price without an Adobe Commerce licence.

quiz Do quotes use the same cart as regular orders? expand_more

With EasyQuote, yes. The customer adds products to the standard Magento cart and chooses between “Proceed to Checkout” (immediate purchase) and “Request a Quote” (negotiated). Other RFQ extensions use a separate quote cart, which forces the customer to choose before adding products. The native-cart approach is simpler and better suited to mixed retail+B2B stores.

info Can I restrict the quote button to specific customer groups? expand_more

Yes. In EasyQuote’s configuration (Stores - Configuration - MageMe - EasyQuote - General), select which customer groups see the quote button. A typical setup is Wholesale + Dealers + Contractors enabled, and guest + retail disabled. Guests can be optionally forced to log in before requesting a quote.

check_circle Does EasyQuote generate a PDF proposal? expand_more

Yes, as of v1.3. Configure the PDF template under Stores - Configuration - MageMe - EasyQuote - Proposals. The generated PDF includes your store branding, line items, tax breakdown, and an approval button. It’s attached to the proposal email and stored in the quote record for audit.

build What happens when a customer approves a quote? expand_more

Approval converts the quote to a real Magento order with the negotiated price applied. From that point, all standard Magento workflows apply: invoicing, shipping, refund, order confirmation emails. The only difference from a regular order is the quote audit trail, which stays linked in the admin for future reference.

tune Is EasyQuote compatible with Hyvä and Breeze themes? expand_more

Yes. EasyQuote v1.4+ is Hyvä CSP-compliant and natively compatible with Breeze, Luma, and headless/PWA setups via GraphQL. The cart and checkout integrations use the theme’s native components, so the quote button inherits your theme’s styling automatically.

category Can I negotiate on a quote without using a PDF? expand_more

Yes. Inline proposals (without PDF) are the default; the customer sees the proposed pricing in an email and on a secure quote-view page. PDF generation is optional and can be turned off under the proposal configuration. Many B2B merchants use inline proposals for speed and PDF proposals only for contracts that need a formal signable document.

compare How does EasyQuote differ from Cart2Quote or Aheadworks Request a Quote? expand_more

EasyQuote uses the native Magento cart; Cart2Quote creates a separate quote cart. EasyQuote is €179 one-time; Cart2Quote starts at €249. EasyQuote is CSP-compliant for Hyvä; Cart2Quote requires theme workarounds. For a full feature-by-feature comparison across all five major vendors, see our best Magento 2 Request for Quote extensions roundup.

Tried this guide? Share your experience!

Vladimir Popov
About the Author
Vladimir Popov
verified Founder & Lead Developer, MageMe

Vladimir Popov is the founder and lead developer of MageMe (ACTEK d.o.o., Ljubljana, Slovenia). He has been building on Magento since 2011, starting with Magento 1 and moving to Magento 2 at its 2.0 beta. He wrote the first versions of every MageMe extension himself and still reviews every release.

His focus is clean, performance-first PHP code that plays nicely with Hyvä, Breeze, and stock Luma themes. He writes most of the technical content on the MageMe blog and answers support tickets personally for complex issues.