This job already has a quote. How should the prices behave on this new version?
This explains the automatic follow-up system so anyone can maintain it — not just whoever built it. It's plain English on purpose.
A ServiceM8 job has one current quote. Each time you send or revise it, the version steps up (v1 → v2 → v3), counted per job — so you'll never see two “v2”s. The moment a newer version goes out, the older one is deactivated: the customer's old link stops working and sends them to the current quote, so they can never accept an out-of-date price. You (staff) can still open any old version — find them under the 🗂 Superseded tab in the Quote portal. Every send also writes a version-stamped note into the ServiceM8 job diary.
Revising never hurts your win rate. A deactivated version isn't a “lost” quote — it's just an earlier draft. Metrics count one job = one opportunity, and only the final version's result (accepted or declined) counts.
When you revise, you're asked how prices should behave: Hold the previously-quoted prices — keep every existing line at the last version's price and only price brand-new items at today's rate (use this when you've agreed a number and are just adding to it); or Update everything to today's prices — re-price the whole quote at current supplier & bundle prices (use this when you're genuinely re-quoting). While a held revision is open, the status line up top reads “Prices: HELD from the previous version.” A signed quote is always frozen forever regardless.
Don't start a brand-new quote for a job that already has one — always Revise the existing one, so the job keeps one clean quote with the right version number.
Got a new job that's a lot like an old one? Open the old quote and tap “📋 Copy to a new job” (on the Dashboard, or in the builder's quote panel). It clones the items and scope into a brand-new quote — you then enter the new ServiceM8 job number and customer and add or remove to suit. Site photos aren't copied (they belong to the old property), and the original quote is never touched. Your first send creates it as v1 on the new job.
The customer can either message inside their quote or just hit reply on any email we send them — both land in the same conversation on the quote. When they reply, the quote is flagged 🔴 Reply to the client and the team is emailed, so the technician can answer from the quote (their reply reaches the customer as an email). A message that came in by email is tagged ✉ via email in the thread. Management still sees everything in ee@. Techs never use their own inbox for this — one clean conversation per quote, whichever way the customer prefers to talk.
Every quote is valid for 14 days from the day it's sent. The customer sees “Valid until [date]” on their quote, a gentle “N days left” note in the last 3 days, and once it lapses the Accept button becomes “Ask us to refresh this quote” (with a note that prices move, so we can only hold it 14 days). To change 14 days: it's set server-side in the create_quote/revise_quote steps (interval '14 days'). Re-sending a quote restarts the 14 days fresh.
A robot checks once a day (8am) and sends one friendly nudge at the right moment — never a daily barrage:
Emails come from the same address as the quote itself. SMS will be added when the texting line is ready. To change the timing: the STAGES settings in the quote-reminders job.
The moment a customer asks us something, the ball is in our court: all reminders and the expiry clock freeze — it would be rude to chase them while they're waiting on us. When we reply, the ball goes back to them and the clock restarts fresh (a new 14 days + the cadence begins again from our answer).
On their quote (and in every nudge) the customer can:
Any of these stops the noise — the whole point is a clean yes / no / not-yet, not endless poking.
Each quote quietly tracks: when it was offered, its valid-until date, whether the ball's in our court, how far through the reminders it is, whether it's been opened, its outcome (accepted / declined / follow-up), and the customer's email. The robot only ever nudges a quote that is unanswered, not paused, not snoozed, and inside its window.