B2B ecommerce · Quoting
How we built a WooCommerce plugin that takes a quote from an Add to Quote button through PDF quotations and negotiation to a paid order, without leaving the store.
List prices don't suit much of B2B. Wholesale buyers want bulk pricing, manufacturers quote made-to-spec work, and trade suppliers negotiate per customer. On many WooCommerce stores all of that happens outside the store. Buyers email for prices, staff build quotes in spreadsheets or Word, revisions get lost in inboxes, and an agreed price still has to be typed into an order by hand. Deals go cold in between.
Basic request-a-quote plugins capture the request and stop there. We wanted one WooCommerce quote workflow from the product page to a paid order: capture the request, price it, send a professional quotation, negotiate with a record of every change, and convert the result into a real WooCommerce order with a payment link.
It also had to fit how WordPress stores actually run. It needed to work with both block and classic themes, support WooCommerce's HPOS order tables, follow WordPress security practices and run self-hosted with no external services. We design for the same constraints in client WooCommerce development.
On the storefront, an "Add to Quote" button can sit beside Add to Cart or replace it, with control over label, colors and exact hook placement on product and listing pages. On block themes such as Twenty Twenty-Five, the button is injected into the right WooCommerce blocks. Prices and the Add to Cart button can be hidden, and quoting can be limited by product, category, user role or guest status. Customers build a quote basket, see a floating counter, and submit their details with an optional file such as a drawing or spec sheet.
In the admin, each request gets a unique RFQ-YYYY-NNNNN number and moves through a defined lifecycle from New to Converted or Expired. Staff edit unit prices and quantities and add a flat or percentage discount, tax and shipping. Totals are calculated on the server. One click produces a branded PDF quotation, generated locally by a bundled engine in one of two templates, and emails it with a secure link.
Customers open the quote through a tokenized link with no login, then accept, reject or send a message. Every save, send, accept, reject and conversion is snapshotted in the revision history. An accepted quote converts into a native WooCommerce order at the agreed prices, with discount, tax and shipping as separate lines so the totals match, and the customer gets a payment link by email. Ten editable email templates, supplier RFQs, role-based pricing, CSV import and export, and a daily job for expiry reminders complete the plugin. See Synova RFQ Pro.
Synova RFQ Pro today gives a WooCommerce store a full quotation system inside WordPress. Quotes, items, messages, revisions and suppliers live in their own indexed tables instead of the posts table. Every admin action is protected by nonces and capability checks. SQL is prepared, customer tokens are compared in constant time, uploads go through a MIME allowlist, and the public form has a honeypot. It declares HPOS and cart and checkout blocks compatibility, is translation-ready, and has an optional delete-all-data toggle for uninstall. Licensing includes a 14-day offline grace period, so a license server outage never disables a live store.
Building it reinforced a few things. Most of the value sits in the conversion step. A quote that has to be re-typed into an order loses the accuracy the rest of the workflow created, so making order totals match exactly was worth the effort. A negotiation thread and revision history matter more than they look, because B2B pricing disputes are usually about which version was agreed. And supporting both block and classic themes takes deliberate work in WordPress today.
These lessons shape our custom WordPress plugin work. If your quoting still runs on email and spreadsheets, start a project with us.
How it's built
Capture, pricing, PDF quotation, negotiation and conversion to a paid order all happen inside WooCommerce.
Accepted quotes become native orders with discount, tax and shipping as separate lines, so the order total matches the quote.
Customers review, accept, reject or negotiate through a tokenized link, with no login required.
Each save, send, accept, reject and conversion is snapshotted with its author and a note.
Nonces, capability checks, prepared SQL, HPOS compatibility and support for both block and classic themes.
Lessons
Quoting is one of the most common processes we see running on email and spreadsheets, in WooCommerce stores and in B2B companies with no store at all. Here's what we'd tell a client.
When quoting needs data from a CRM or ERP such as HubSpot, Salesforce or NetSuite, we often add API integrations or wider workflow automation.
Live product · WordPress
Synova RFQ Pro
How we designed a Shopify app that syncs supplier stock and prices from any file or API, shows a diff before writing, and refuses to import files it doesn't trust.
Read the storyHow we turned a Google Form, a serial-number spreadsheet and a claims inbox into one Shopify app that registers units, issues coverage and resolves claims with real Shopify objects.
Read the storyHow we built a deterministic, explainable rules engine that scores Shopify return and refund requests, shows the reasons behind every score, and never declines a customer automatically.
Read the storyTell us how it works today. We'll tell you honestly what's worth automating, what it would take, and what it would cost.