The Quote That Lived Forever
Every small shop has one. A quotation from three months ago, still sitting in a customer's email, still showing last quarter's price. The customer finally replies, ready to buy. Your team has to scramble: check if the cost is the same, check if the lead time is the same, check if you even still sell that configuration. Half the time the answer is no. The other half you honor a price you should not, just to avoid looking messy.
I used to leave validity blank because it felt friendlier. It was not friendlier. It was lazy. An open-ended quote asks the customer to remember something you already stopped standing behind. Putting a date on it is not a hardball tactic. It is clear communication.

What an Expiration Date Actually Does in Odoo
On a sales quotation in Odoo there is a validity / expiration field. Fill it. When the date passes, the quote is no longer treated as a live offer you are expected to honor at face value. Your team sees it. Reporting sees it. The customer sees it on the PDF if you include it in the template.
That one field does three jobs at once:
- It tells the customer when they need to decide.
- It tells your salespeople which quotes still deserve follow-up energy.
- It tells your forecast which numbers are real and which are museum pieces.
Without it, every old quote looks as current as today's. That is how forecasts get soft and how margin walks out the door.
How I Set the Default (and Why It Is Short)
I do not invent a new validity window for every deal. I pick a default that fits how we sell, then override only when the deal is genuinely long-cycle.
For most of what I quote, fourteen days is enough. The customer has time to talk internally. I have time to follow up twice. Past that, the market, my costs, or their own priorities have usually moved. For bigger implementation quotes I stretch to thirty days because more people have to read it. I almost never go past thirty unless we are waiting on a known external event the customer already named.
The point is not the exact number. The point is that every quote has one, and the whole team knows what the default is. When somebody leaves it blank, that is a process miss, not a style choice.
Train the Team to Talk About the Date Out Loud
An expiration date only works if the salesperson mentions it. On the call or in the email that carries the quote, say it plainly: this pricing holds through this date. After that we will refresh numbers if you still want to move.
Customers rarely push back on that. They push back when you surprise them later with a higher price and never warned them. The date is the warning, written down.
When the date is close, Odoo activities make the nudge easy. Set a reminder a few days before expiration. Call or email once. If they are quiet, let it expire. Do not keep extending forever just to keep the card looking warm on the kanban. Warm cards that never close are how pipelines get bloated.
Frequently asked questions
How long should an Odoo sales quotation stay valid?
Pick a default that matches your sales cycle and stick to it. For most small-business quotes I use fourteen days. Bigger implementation quotes often get thirty. Longer than that usually means the deal is not ready, not that the quote needs to live forever.
Can customers still order after a quotation expires in Odoo?
Yes, but you should not confirm against the old PDF. Reissue a fresh quotation with updated validity, and change the numbers if costs or scope moved. That keeps both sides looking at the same offer.
Does setting an expiration date make me look pushy?
No. It makes you look organized. Customers already assume prices change. Naming the window removes surprise. The pushy move is honoring a three-month-old number you no longer mean, then resenting the deal later.
Where do I set the validity date on an Odoo quotation?
On the sales quotation form itself, in the validity or expiration field. Put it on your quote PDF template too so the customer sees the same date you see in Odoo. Then add a reminder activity a few days before it hits so follow-up is automatic.





