Quoting & negotiation
How long should a B2B quote be valid? Quote expiry on Shopify
By Jahangir Alam · August 22, 2026 · Updated August 23, 2026 · 10 min read
There's no universal number. Thirty days is the common B2B default, and it's a reasonable starting point - but the right validity period is set by whatever can move underneath your price while the buyer decides: material costs, exchange rates, available stock, and production capacity. Where those are volatile, 7 to 14 days is more honest. Where the buyer's purchasing process genuinely takes longer, 60 or 90 days can be right - as long as you've priced for it.
The mistake isn't picking the wrong number. It's picking a number without knowing which of those four things you're exposed to. This guide covers what an expiry is actually protecting, a decision table for setting yours, how to configure it on Shopify, and what to do when a quote lapses on a deal you still want.
What a quote expiry is for
A quote expiry - sometimes called the validity period - is the date after which your priced offer no longer stands. It does three separate jobs, and they pull in slightly different directions:
- It protects you from a price you can no longer honour. This is the real one. Without an expiry, a quote is an open-ended commitment: a buyer can accept a figure you calculated against costs, stock, and an exchange rate that have all since moved.
- It gives the buyer a decision deadline. Not as a pressure tactic - as information. Procurement teams work to deadlines, and a quote with a date is easier to prioritize than one without.
- It keeps your pipeline honest. Quotes with no expiry never leave your forecast. An open quote from four months ago isn't pipeline; it's a lost deal that hasn't been marked lost.
That first job is why "just make it long so we don't annoy anyone" is a bad instinct. A long validity period is a promise about your own costs, and you should only make it when you can keep it.
Setting yours: a decision table
Work from exposure, not from habit.
| Situation | Direction | Why |
|---|---|---|
| Commodity or raw-material inputs | Shorter (7-14 days) | Your cost can move before the buyer decides. You'd be honouring a price you no longer have. |
| Quoted in the buyer's currency | Shorter | The exchange rate is fixed on your side once the quote is issued; your cost base isn't. |
| Limited, allocated, or single-batch stock | Shorter | A long validity period is an implicit reservation you haven't actually made. |
| Standard catalog reorder, stable pricing | Longer (30-60 days) | Nothing underneath is moving. A short expiry here is friction with no upside. |
| Long production lead time | Longer, deliberately | But the expiry is the deadline to accept, not the delivery date. Don't conflate them. |
| Seasonal or end-of-line availability | Tie it to the window | An expiry after the season has closed is a promise you can't fulfil. |
| Buyer's procurement runs to a committee or budget cycle | Longer | If sign-off genuinely takes six weeks, a 14-day quote just generates re-issue work for both sides. Ask what their cycle is. |
| Custom or made-to-order, quoted from an estimate | Shorter, then re-confirm | The estimate ages faster than the catalog does. |
Two rules that survive most situations:
The expiry is a deadline to accept, not a deadline to receive. A quote for a part with a ten-week lead time can still be valid for fourteen days. Conflating the two produces absurdly long validity periods on exactly the products whose costs move most.
If you can't say what would change, you don't need a short expiry. Friction should buy you something. On a stable catalog line to a repeat account, a 7-day quote is just an errand.
What about "30 days"?
Thirty days is genuinely the most common default in B2B, and it's fine as a starting point. But treat it as a convention, not a finding - the figures circulating about typical validity periods come from vendor blogs and templates rather than from any published study, so there's no benchmark to hit. (The same is true of quote response time and conversion rate - see what the published benchmarks actually say.) The useful version of the convention is narrower:
- 7-14 days where pricing is volatile or stock is tight.
- 30 days as a default when nothing in particular is moving.
- 60-90 days where the buying process genuinely needs it and your costs are fixed for that horizon.
Then vary it deliberately by quote type rather than applying one number to everything you send.
Setting expiry on Shopify
Shopify has no native concept of a quote, so expiry comes from your quote app. In QuotWay it works at two levels:
A shop-wide default. Set Settings → General → default quote expiry days (any value from 1 to 365; it ships at 14). This is applied at intake - the moment a buyer submits a request, before you've priced anything - so every quote in your inbox already has a date attached.
A per-proposal override. When you build the proposal you set that quote's expiry directly, so the default is a starting point rather than a policy. A negotiation round can also carry its own expiry: if you counter, that version can hold a tighter deadline than the original.
Two behaviours worth knowing, both of which exist to stop you making a promise you didn't mean:
- You can't send an offer that's already lapsed. A proposal with an expiry in the past is rejected on send rather than quietly going out.
- A draft that goes stale doesn't break. If you saved a draft proposal and its expiry passed before you sent it, the lapsed date is cleared on reopening and the shop default applies again, with a notice - rather than the editor failing or, worse, sending yesterday's deadline.
Pair the expiry with the reminder
The expiry date and the reminder that precedes it are one decision, not two. QuotWay sends one reminder per quote, a set number of days before expiry - configurable from 0 to 90 days, defaulting to 3, available from the Starter plan.
Three days works on a 14-day quote. It's wrong at both extremes:
- On a 7-day quote, a 3-day reminder lands at day 4 - roughly right.
- On a 90-day quote, a reminder 3 days out is useless. The buyer forgot about it eleven weeks ago; you want a nudge with real time left to act on.
So when you change the validity period for a class of quote, change the reminder lead with it. As a rule of thumb, the reminder wants to land with enough time for the buyer to actually do something - which on a long quote means weeks, not days.
One interaction to know: the expiry reminder and the automated follow-up mute each other for 48 hours in both directions, so a buyer never gets two nudges stacked on the same deal. (How to follow up on a B2B quote covers the cadence side.)
What actually happens when a quote expires
Not everything expires, and the exclusions are deliberate.
Quotes that lapse automatically are the ones where the ball is in the buyer's court: a proposal that's been sent, a quote waiting on your approval chain, one waiting on the buyer's approval chain, and one where an invoice has been sent. These move to expired on the date, and - if you've left the notification on - the buyer gets an email telling them so.
Quotes that deliberately don't lapse are the ones mid-negotiation on your side: a request that's just come in, one you're reviewing, and one the buyer has countered and you haven't answered. Closing those is a commercial decision, not a scheduling one, and software shouldn't make it for you. They sit in your inbox until you act - which is also why an aging-quote review matters more than an expiry setting.
Expiry is also available as a trigger in Shopify Flow, so a lapsed quote can start a workflow on your side rather than just going quiet.
Reissuing a lapsed quote without re-sending a stale price
When a quote expires on a deal you still want, the temptation is to re-send the same numbers with a new date. Don't - that's how a deal gets won at last quarter's costs.
Duplicating the quote is the safer path, and the way it's built enforces the discipline. A duplicate carries over everything about the deal: the buyer, their company context, the line items, shipping and billing addresses, the PO number, buyer-visible notes, and their custom-field answers. What it deliberately resets is everything about the offer: all prices, the expiry, the requested delivery date, and the whole negotiation and approval history. The new quote links back to the one it came from, so the history is still traceable.
In other words, you can't accidentally re-issue an old price - you have to price it again. Duplication is available from the Starter plan.
Before you reissue, it's worth asking the buyer whether it's still live at all. An expired quote is a natural, non-pushy reason to make contact, and "should I close this off, or is it still in play?" gets you a real answer more often than another quote does.
Should you ever extend an expiry?
Yes - but treat it as a re-pricing decision, not an administrative one. Extending is fine when nothing underneath has moved and the buyer needs another week for a sign-off. It's not fine as a way to avoid an awkward conversation about costs that have changed. If your inputs moved, the honest move is to say so and reissue.
Quietly extending expiries is also a good way to end up with a pipeline full of quotes nobody believes in.
Common mistakes
- One expiry for everything you sell. A stable catalog reorder and a commodity-exposed custom job don't want the same date.
- Making the expiry match the lead time. They're different clocks. Accept-by is not deliver-by.
- A long validity on allocated stock. You've implicitly reserved inventory you're still selling to other people.
- Leaving the reminder at the default after lengthening the quote. A 3-day heads-up on a 90-day quote isn't a reminder, it's a formality.
- Re-sending an expired quote unchanged. Re-price it. The one time this bites is the one time it matters.
- No expiry at all. Your forecast slowly fills with deals that ended months ago.
FAQ
How long should a B2B quote be valid?
There's no universal figure - 30 days is the common default, but the right period depends on what can change underneath your price. Use 7-14 days where material costs, exchange rates, or stock are volatile; 30 days where nothing in particular is moving; and 60-90 days only where the buyer's purchasing process genuinely needs it and your costs are fixed for that horizon.
What is a quote validity period?
The validity period is the window during which your priced offer stands. After it lapses, the buyer can no longer accept at those figures and the quote has to be reissued at current pricing. It protects you from honouring a price your costs no longer support, gives the buyer a decision deadline, and stops dead deals sitting in your pipeline indefinitely.
Is 30 days standard for a quotation?
It's the most common convention, but it isn't a standard in any formal sense, and the figures quoted around the web come from vendor articles rather than published research. Treat 30 days as a sensible default for stable pricing, and shorten it deliberately when you're exposed to commodity costs, currency movement, or limited stock.
How do I set a quote expiry date on Shopify?
Shopify has no native quote object, so expiry comes from a quote app. In QuotWay, set a shop-wide default under Settings → General (1 to 365 days, shipped at 14), which is applied when a request arrives, then override it per proposal when you price the deal. Individual negotiation rounds can also carry their own expiry.
What happens when a quote expires?
Quotes waiting on the buyer - a sent proposal, one in either approval chain, or one with an invoice sent - move to expired on the date, and the buyer is notified if you've left that email on. Quotes that are mid-negotiation on your side, including ones the buyer has countered, deliberately don't auto-expire, because closing those is a commercial decision.
Should I extend a quote's expiry if the buyer asks?
Extend it when nothing underneath has changed and the buyer needs more time for internal sign-off. Don't extend it to avoid re-pricing: if your costs, exchange rate, or stock position have moved, reissue at current figures instead. Extending as a habit produces a pipeline of quotes nobody believes in.
How far before expiry should the reminder go out?
Far enough that the buyer can still act on it. Three days is about right on a 14-day quote and far too late on a 90-day one - on longer validity periods, think in weeks. QuotWay sends one reminder per quote at a lead time you set between 0 and 90 days, defaulting to 3, so adjust it whenever you change the validity period for a class of quote.
Where QuotWay fits
QuotWay is a B2B quote and negotiation app for Shopify, built by EFOLI. Expiry runs through it end to end: a shop-wide default applied the moment a request arrives, a per-proposal override when you price it, per-version expiry on negotiation rounds, one reminder before the date at a lead time you choose (Starter and up), automatic expiry for quotes waiting on the buyer - with mid-negotiation quotes deliberately left for you to decide - a Shopify Flow trigger when one lapses, and duplication that carries the deal forward while resetting every price so a stale figure can't be reissued by accident. See negotiation and proposals, automation, the plans and pricing, or add QuotWay on Shopify.
Sources
- QuotWay docs: Proposals and versions - setting a proposal's expiry.
- QuotWay docs: Email notifications - expiry reminders and lapse notices.
- QuotWay docs: Quoting in the buyer's currency - the FX rate snapshot that makes currency exposure an expiry question.
- Shopify Help Center: Draft orders
Related articles
- Quoting & negotiationQuote approval thresholds: building an approval matrix for B2B discounts11 min read
- Quoting & negotiationHow to follow up on a B2B quote: timing, cadence, and what to automate10 min read
- Quoting & negotiationShipping and freight on B2B quotes: how to price it on Shopify10 min read
See how QuotWay handles this on your store.