The quote follow-up engine: win the jobs you lost to silence
When you send a quote, the system watches it and drafts nudges on day three, seven and fourteen. You approve before it sends. When the customer accepts, reminders stop.
Every quote chases itself — in your words, with your approval — until it's a yes, a no, or expired
Paste it into your AI assistant — ChatGPT, Claude, Gemini, whichever you use. It first asks what tools you already have, then rebuilds this blueprint to fit them.
- Every quote must go out through Invoice Ninja, not a Word file or a text message
- A mailbox or SMTP relay that can send as your domain, with SPF and DKIM set, or the chases land in spam
- About 16 GB of RAM if you want Ollama drafting the wording locally
- A machine that stays on — a mini PC, NAS or cheap VPS, not your laptop
Version history
Most quotes you never hear back on were winnable. A system that watches every quote and nudges — in your words, with your approval — until it ends in a clean yes, no, or expired.
The architecture
the same flow as text
▼
[ Invoice Ninja (self-hosted) — the quote book ]
│ status per quote: sent · viewed · accepted · expired
│ valid-until date, one-click accept for the client
▼ checked daily via API (accept = instant webhook)
[ n8n (self-hosted) — the follow-up engine ]
├─ day 3: gentle nudge · day 7: value + question
├─ day 14: last check · day 21: close as lost
▼
[ Local model (Ollama) drafts the message in your voice ]
▼
[ You approve ] → sends · accepted or replied → reminders stop. No nagging a client who already said yes.
Three parts on one box. The quote tool owns the truth about each quote. n8n owns the timing. The local model turns "quote 5 days old, €8,500 roof, viewed twice, no reply" into a two-line message that sounds like you, not like a debt collector. Nothing sends without your tap — this is a drafting assistant with a schedule, not an autopilot that emails your customers behind your back. If you already run the late-invoice chaser from this library, this is the same box doing the pre-sale half: one is chasing a yes, the other is chasing a payment.
Paste it into your AI assistant — ChatGPT, Claude, Gemini, whichever you use. It first asks what tools you already have, then rebuilds this blueprint to fit them.
The problem
You do the site visit, build the numbers, send the quote. Then silence. It is easy to assume you lost on price. Usually you did not. The customer got three quotes, got busy, and yours slipped down the inbox — and nobody reminded them. The sales-training figures you will see quoted (roughly 80% of deals need five contacts, about half of people never follow up once) are the caveat-worthy kind, so treat them as direction, not gospel. The direction is not controversial: a quote that goes quiet is not automatically a lost quote, it is an un-chased one. That is revenue you already spent time and diesel to create, leaking out of a process gap.
The reason it does not get chased is not laziness. It is that nobody can see the quotes by age and status, nobody owns the follow-up, and writing a fourth polite-but-not-pushy message from scratch is friction at exactly the moment you are tired. Fix the visibility and the drafting, and the follow-up happens on its own.
Tool choices — and why
Setup outline
- Deploy Invoice Ninja (official Docker image) behind HTTPS on your domain — quotes.yourbusiness.example. Set your company details, tax, and a default "valid for 30 days" on quotes so every quote has an expiry the engine can act on.
- Send your next few real quotes through it instead of a PDF by email. This is the habit change; the automation is worthless if quotes still leave as attachments it cannot see.
- Deploy n8n on the same box. Build one workflow on a daily schedule: read open quotes → for each, compute days since sent and current status → branch to the day-3 / day-7 / day-14 / day-21 action.
- Add the accept webhook so a quote marked accepted immediately stops its pending nudges. Test this path first — it is the one that embarrasses you if it is wrong.
- Wire the drafting step: n8n sends the quote's context (amount, what was quoted, days since sent, viewed or not) to your local model with a short instruction, gets back a two-line message.
- Route every draft to you for approval — a message in Telegram or email with Approve / Edit / Skip — before anything sends. Never let day-1 of this system auto-send to a live customer.
- Set up SPF, DKIM and DMARC on your sending domain before the first real follow-up, or your nudges land in spam and you will swear the system is broken when it is your DNS.
- Run it in "draft only, I send manually" mode for two weeks. Once the drafts are consistently good, let approved ones send automatically. Keep the day-21 "close as lost" — a clean pipeline is the point.
Pitfalls — what goes wrong when you build this
Verified repos
Invoice Ninja — Elastic License 2.0 (self-host for your own business), 9.9k stars, active (release 25/06/2026)
n8n — Sustainable Use License (free self-hosted internal use), 180k+ stars, active (2026)
Ollama — MIT, 177k stars, active (release 16/07/2026)
Get the next blueprint as it publishes — free, practical, verified tooling only.
Subscribe · Want this audited or extended for your business? DM @RXed_EU
What this costs to run
Priced as Draft a reply — incoming message plus tone/policy context; output is a full email. one follow-up per open quote. Adjust the volume to yours; the bill is a range because the assumptions are ranges.
| Model | $/day | $/month | Reasoning |
|---|
Cheapest eight shown — straight per-token
arithmetic on list prices: no caching, no batch discount, thinking tokens bill as output.
All models + every assumption in the full explorer →
Capability & cost data: Artificial Analysis