Set up quotes
How it works
A customer submits their cart as a quote. Your team is emailed, a Sales administrator assigns it to a sales agent, and the agent and customer agree the details on the quote's timeline. The customer, or the agent for them, then confirms it and it becomes an order. Each step is in How a quote becomes an order.
| Use it for | How |
|---|---|
| Negotiation | Agree price or terms before an order is placed. |
| Pre-orders | Customers request a quote ahead of time. |
| Sales-assisted orders | Your team adds products to a quote that the customer can change before they finalise it. |
| Price on application (POA) | Customers add items to a quote before the price is set. |
Quote statuses control what customers can do at each stage, such as edit or complete the quote, and whether it's archived when it expires. Each quote's timeline records messages, internal notes and edits, and key events send email notifications.
Try the interactive demo (opens in a new tab) of the Quoting Engine.
Turn on the Quoting Engine
Before you start:
- SparkLayer version 3.7 or above: the Core Script version in your theme. Check Version for this store at Storefront,Widgets,Core script version (opens in your SparkLayer Dashboard in a new tab). To upgrade, see Frontend integration or ask your developer.
- The Pro or Enterprise plan, or the Quoting Engine add-on on Starter or Growth. The add-on is $49 per month (see Add-ons). Without either, Quotes shows a Pro badge and an Unlock button, which shows what Pro adds and starts a free 14-day trial. Or change plan at Plan card. See SparkLayer plans and pricing (opens in a new tab).
- A sales agent who can review quotes. See Set up your sales team for quoting.
- Go to Settings,Configurations,Quotes and invoices (opens in your SparkLayer Dashboard in a new tab).
- Turn on Quotes ("Customers request quotes from their cart and you reply with prices"). The Quote statuses row appears.
- Click Save.
- Set up your quote statuses and purchase notifications. Set up notifications before you launch quoting.
- Choose which customer groups can request quotes.
Request for Quote is replaced
If your store still offers the Request for Quote payment method, customers stop seeing it at checkout once you turn on Quotes.
Set up your sales team for quoting
Sales agents review quotes by signing in on the customer's behalf. A sales agent is anyone in your business who places orders for customers. Their role at Customers,Roles (opens in your SparkLayer Dashboard in a new tab) sets their access:
| Role | What they can do with quotes |
|---|---|
| Sales administrator | Everything a sales agent can do, plus assign quotes to sales agents and other higher-level tasks. |
| Sales agent | Review, edit, message and complete the quotes assigned to them. |
Without a sales team, set up one account with the Sales administrator role. Someone must be able to sign in on a customer's behalf to review their quotes. What they do day to day is in Work on a quote.
Set up quote statuses
Quote statuses group your quotes and set the rules for each stage. For example, stop customers editing a quote while you review it, or archive quotes when they expire.
There are 2 statuses to start with: Quote Requested, where every new quote starts (marked Default), and Awaiting Customer, for when a sales agent is waiting on the customer. See What happens at each status.
- Go to Settings,Configurations,Quotes and invoices (opens in your SparkLayer Dashboard in a new tab).
- Next to Quote statuses, click Edit. The Quote statuses window lists your statuses, with Default beside the one new quotes start in.
- To add a status, enter it in New status (such as "Awaiting approval") and click Add status. To delete one, click Remove. You can't remove the default status.
- Click Done.
Status settings
Each status also has these settings.
| Setting | What it does |
|---|---|
| Quote Status Display Name | The status customers see when viewing the quote in My Account. Up to 45 characters. |
| Quote Status Handle (or ID) | Identifies the status internally. Up to 45 characters. |
| Set as default quote status for customers | All new quotes start in this status. |
| What status should the quote move to when an edit is made? | The status a quote moves to automatically when the customer or a sales agent edits it. Choose No change in status to keep it the same. |
| Allow customers to complete quote | Customers can complete the quote and place their order. |
| Allow customers to make edits to quote | Customers can change the quote. |
| Require an expiry date before changing to a new status | A sales agent must set an expiry date before moving the quote out of this status. |
| Archive quote once quote has expired | After the expiry date, the quote is cancelled and can't be changed. Customers need to start a new quote. |
The last 4 settings are under Actions allowed in this status.
Statuses appear on quotes in My Account. Only sales agents assigned to a quote can change its status.
Choose who is notified about quotes
Quote emails go to:
| Recipient | When |
|---|---|
| The assigned sales agent | Once a Sales administrator assigns them a quote, they get all its notifications, at their email address in Sales rep setup. |
| Additional email addresses | For quotes with no assigned sales agent, such as new quotes, if you've added addresses in Purchase notifications. |
| Your store email (fallback) | If no sales agent is assigned and no additional addresses are set up. |
To email extra addresses about unassigned quotes:
- Go to Settings,Configurations,Quotes and invoices (opens in your SparkLayer Dashboard in a new tab).
- Next to Purchase notifications, click Edit. Until you add someone, it says "No one is emailed when quotes and orders update."
- In Email addresses, enter the addresses, separated with commas.
- Click Save.
This covers new quotes, and quotes and orders that become unassigned.
Where the fallback store email comes from
It's your eCommerce platform's store email. On Shopify, it's the Store email at Settings,General (opens in your Shopify admin in a new tab), in your store profile, where your standard Shopify notifications usually go. For other platforms, see the developer docs.
Choose which customer groups can request quotes
- Go to Customers,Groups (opens in your SparkLayer Dashboard in a new tab) and click the group's name. For every group, click Edit on the base customer group.
- Under Inherited rules, click + Override next to Quoting engine (on the base group, + Customize), then Configure.
- Tick Allow quotes to be submitted, then click Save.
Customers in the group then see Request Quote beside Checkout in their cart. Click Reset on the rule to hand it back to the base customer group. See Customer groups.
To make a group quote-only, also override its Checkout access rule so customers can't check out. See Disable checkout.
Let customers open quotes from email links
To make links in quote emails open the quote or order details directly, turn on My Account quick links. See My Account.
Change the quote text
Change this text without code at Storefront,Options,Translation overrides (opens in your SparkLayer Dashboard in a new tab). See Change checkout text and Languages and international.
| Key | Default text |
|---|---|
pdp.messaging.poa | POA |
cart.request-quote | Request Quote |
cart.edit-quote | Edit Quote |
cart.checkout.confirm-btn.quote | Submit Quote: {total} |
account.order-view.quote | View & Download Quote |
account.order-view.edit-quote | Edit Quote |
account.order-view.confirm-and-complete | Confirm & Complete |
account.order-view.cancel-and-archive | Cancel and archive. |
account.order-view.redirect-to-checkout | You'll be redirected to the checkout to edit or complete your order. |
account.order-view.quote-not-required | No longer require this quote? |
cart.request-quote is the button in the cart, and cart.checkout.confirm-btn.quote is the last button of the quote checkout, where {total} is replaced with the quote total.
Core Script code for your developer
A developer can set the same text in your Core Script:
translations: {
en: {
"pdp.messaging.poa": "POA",
"cart.request-quote": "Request Quote",
"cart.edit-quote": "Edit Quote",
"cart.checkout.confirm-btn.quote": "Submit Quote: {total}",
"account.order-view.quote": "View & Download Quote",
"account.order-view.edit-quote": "Edit Quote",
"account.order-view.confirm-and-complete": "Confirm & Complete",
"account.order-view.cancel-and-archive": "Cancel and archive.",
"account.order-view.redirect-to-checkout": "You'll be redirected to the checkout to edit or complete your order.",
"account.order-view.quote-not-required": "No longer require this quote?",
},
},<!-- SparkLayer Core Script: in your theme, just before </head>.
Already have window.sparkOptions? Add just the setting to it. -->
<script>
window.sparkOptions = {
translations: {
en: {
"pdp.messaging.poa": "POA",
"cart.request-quote": "Request Quote",
"cart.edit-quote": "Edit Quote",
"cart.checkout.confirm-btn.quote": "Submit Quote: {total}",
"account.order-view.quote": "View & Download Quote",
"account.order-view.edit-quote": "Edit Quote",
"account.order-view.confirm-and-complete": "Confirm & Complete",
"account.order-view.cancel-and-archive": "Cancel and archive.",
"account.order-view.redirect-to-checkout": "You'll be redirected to the checkout to edit or complete your order.",
"account.order-view.quote-not-required": "No longer require this quote?",
},
},
};
</script>The text of quote emails and the quote PDF comes from your templates. See Email notifications.
Reference
Features
Every Quoting Engine feature
| Area | What you can do |
|---|---|
| Configuration | Show or hide quoting for each customer group. Email your sales team when a new quote arrives. |
| Workflow | Assign a quote to a sales agent. Set a status on each quote, choose a default status, and set rules for each status: whether the customer can edit or complete the quote, whether they can download a PDF, and whether an expiry date is required. |
| Ordering | Add custom line items, custom shipping, unavailable or POA (price on application) products and out-of-stock products to a quote. Set the payment method on the quote, for the customer to use when they complete it. |
| Download the quote as a PDF, and theme and customise the PDF. | |
| Expiry | Set quotes to expire after a date. |
| Timeline and communications | Send messages to the customer, save internal notes all sales agents can see, track changes to the quote, and send email notifications when the quote changes or a message arrives. |
For what each quote action does and what the timeline records, see Work on a quote.
Limitations
| Item | Limitation |
|---|---|
| Company users | Limited users can't request quotes. |
| Discounts | You can't add discounts to a quote. |
BigCommerce only
Out-of-stock products: on BigCommerce, you can't add out-of-stock products when a quote is created or edited.
Email notifications
Change these emails with a template at Settings,Templates (opens in your SparkLayer Dashboard in a new tab): see Settings. Turn on My Account quick links so each email's link opens the quote directly.
Quote management and communication emails are sent on creation, assignment, messages and updates.
Trigger: Sent when an end-customer requests a new quote
Recipient: Sales administrator (and any emails added in Purchase notifications)
Template: Emails/new-quote-notification-to-merchant
Email Subject:
[Company name] has requested a new quote [#Pxxxx]
Email Copy:
[Customer name] has requested a new quote [#Pxxxx].
To review, approve, or amend the details, please click the button below.
Button: [View requested quote]
Trigger: Sent when a quote is assigned to a Sales Agent
Recipient: Sales Agent
Template: Emails/quote-assigned-notification-to-agent
Email Subject: [Sales Admin name] has assigned you a quote for [Company name] [#Pxxxx]
Email Copy: A quote for [Customer name] has been assigned to you by [Sales Admin name]. Assigned on [Date] with Quote ID [#Pxxxx].
Button: [View assigned quote]
Trigger: Sent when a Sales Agent sends their first reply on a new quote
Recipient: End-customer
Template: Emails/quote-request-responded-to-notification-to-customer
Email Subject: [Sales Agent name] has responded to your quote request [#Pxxxx]
Email Copy: [Sales Agent name] from [Merchant name] has responded to your quote request [#Pxxxx].
Customer Message: xxxxx
Email Copy: To access the full conversation in your account and reply, click below.
Button: [View quote and conversation]
Trigger: Sent when a Sales Agent updates an existing quote (price, quantities, products, etc)
Recipient: End-customer
Template: Emails/quote-updated-notification-to-customer
Email Subject: [Sales Agent name] has updated your quote [#Pxxxx]
Email Copy: [Sales Agent name] from [Merchant name] has updated your quote [#Pxxxx].
Customer Message: xxxxx
Email Copy: To access the full conversation in your account and reply, click below.
Button: [View quote and conversation]
Trigger: Sent when a Sales Agent creates a quote and sends it to the customer
Recipient: End-customer
Template: Emails/quote-created-notification-to-customer
Email Subject: [Sales Agent name] has sent a quote to review [#Pxxxx]
Email Copy: [Sales Agent name] from [Merchant name] has created a new quote for you to review [#Pxxxx].
Customer Message: xxxxx
Email Copy: To access the full conversation in your account and reply, click below.
Button: [View quote and conversation]
Trigger: Sent to a customer when a sales agent leaves a note
Recipient: End-customer
Template: Emails/purchase-history-message-notification-to-customer
Email Subject: [Sales Agent name] has sent you a message about your quote [#Pxxxx]
Email Copy: [Sales Agent name] from [Merchant name] has sent you a new message about your quote [#Pxxxx].
Customer Message: xxxxx
Email Copy: To access the full conversation in your account and reply, click below.
Button: [View quote and conversation]
Trigger: Sent to a Sales Agent when a customer leaves a note
Recipient: Sales Agent
Template: Emails/purchase-history-message-notification-to-agent
Email Subject: [Company name] has sent you a message about their quote [#Pxxxx]
Email Copy: [Customer name] from [Company name] has sent a new message about their quote [#Pxxxx].
Customer Message: xxxxxx
Email Copy: To access the full conversation in your account and reply, click below.
Button: [View quote and conversation]
Limited user approval flow emails are sent when a limited user submits an order for approval, and when it's approved.
Trigger: Sent when a limited user (end-customer) submits an order created from a quote for approval
Recipient: Main company user (merchant) / approver
Template: Emails/limited-user-purchase-review
Email Subject: [Limited User name] has submitted a new order for your review [#Pxxxx]
Email Copy: [Limited User name], a limited user on your account, has requested to place order [#Pxxxx].
As a main user, your approval is required before the order can be processed.
To review and approve or amend the details, please click the button below:
Button: [Review Order]
Trigger: Sent when a main company user (merchant) approves an order submitted by a limited user
Recipient: Limited user (end-customer)
Template: Emails/limited-user-purchase-approved
Email Subject: Your order [#Pxxxx] has been approved by [Main User name]
Email Copy: Your order [#Pxxxx] for [Company name] has been approved by [Main User name] and will now be processed for shipment. For any questions, please contact [Main User name].To access the full conversation in your account and reply, click below.
Button: [View Approved Order]
FAQs
For problems with a quote itself, such as Confirm & Complete being greyed out, see Troubleshooting in Work on a quote.
You don't need a sales team, but someone must be able to sign in on a customer's behalf to review quotes. Give them the Sales administrator role: see Sales rep setup. This is why quotes aren't available on Basic: sales agents start on Starter.
With your templates (see Email notifications). For help, contact our team.
No. Once you turn on Quotes, customers no longer see Request for Quote at checkout.
Shopify only
No. Quotes live in SparkLayer. A confirmed quote becomes a regular Shopify order in your usual workflow.
We'd love to hear your feedback on the Quoting Engine. Email our product team at product@sparklayer.io.
Last updated