Home / Recipes / 3-touch quote follow-up (Jobber)

Problem 2: Quotes go quiet and nobody follows up

3-touch quote follow-up (Jobber)

Verified with mocksLast tested 2026-10-27 · pricing checked October 2026

Every morning the workflow checks open Jobber quotes and sends up to three texts: a check-in on day 2, a short AI-written note on day 5, and a polite close-out on day 10. Replies pause the sequence and go to the office; quotes that stay silent go to the owner for a personal call.

The problem

Unanswered quotes are work you've already done for free. We don't have a reliable figure for how many could be saved by follow-up, so we don't give one.

Background reading: Why HVAC quotes go quiet: a 3-touch follow-up you can set up this week

Who it's for

Shops that send quotes from Jobber (replacements, repipes, water heaters, mini-splits) and don't have time to chase each one. If you're on Jobber Connect or higher, try Jobber's built-in quote follow-ups first; this recipe is for Core users or for a custom sequence with an owner hand-off.

Tools and monthly cost

ToolOfficial price
Twilio US SMS, sent or received$0.0083 per 160-character segment, plus carrier fees of about $0.0035-$0.005 per segment pricing page
AI model (example: OpenAI gpt-4o-mini)$0.15 per 1M input tokens, $0.60 per 1M output tokens pricing page
n8nCommunity Edition: free if you self-host (you pay for the server). n8n Cloud: from EUR 20 / month (Starter) or EUR 50 (Pro) pricing page
Jobber (you probably already pay for it)Core from $29 / month billed annually ($49 monthly); Connect from $99 (built-in quote and invoice follow-ups); Grow from $149 pricing page

Example month: Illustrative arithmetic. Assume 40 open quotes a month that get all 3 touches, about 5 segments each (the first text includes the quote link): 200 segments x $0.0083 = $1.66 plus about $0.70-$1.00 carrier fees. AI: one short call per quote, under $0.01 in total. Uses the same Twilio number and A2P campaign as the missed-call recipe (or about $2.65 + one-time $19.50 on its own), plus n8n.

Setup

  1. Use a Twilio number with an approved A2P 10DLC campaign (see the missed-call recipe).
  2. Create a Jobber Developer Center app with quote and client read scopes; connect it with an n8n OAuth2 credential.
  3. Import workflow.json; set business name, time zone, owner and office phone numbers, and your model API key.
  4. Adjust the schedule (default 9:00 Mon-Sat), touch days (2 / 5 / 10) and the 21-day owner hand-off at the top of the 'Decide touches' node.
  5. Point your Twilio inbound-SMS router at the 'reply' webhook so customer replies pause the sequence.
  6. Check the quotes query filter in Jobber's GraphiQL (see below), then run the test webhook once with a test client before turning the schedule on.

Download

Download quote-follow-up.zip

Contains the n8n workflow, AI prompts, the mock data, the test runner with its last results, and the mock server we tested against. All keys in .env.example are fake.

Test result

Every workflow was imported into n8n 2.45.4 and run end to end on our test machine. Twilio, Jobber and Stripe were replaced by a local mock server that accepts the same request shapes as their documented APIs and records every call. The AI steps used a small local model (Qwen2.5-3B-Instruct, 4-bit) and the speech-to-text steps used Whisper base.en running locally. Mock data (customers, quotes, invoices, recordings) is invented. Nothing was sent to a real phone, customer or account.

8/8 scenarios passed (run 2026-10-27)

PASSD1First daily run: three quotes due a first check-in, one too fresh, one too old to cold-text
PASSD1bSame day re-run (e.g. n8n restarted): must not double-text
PASSD2Next day: drain-camera quote reaches day 2
PASSD3Day 5+ quotes get the AI-written second touch
PASSD4Furnace quote approved in Jobber overnight: its sequence stops; mini-split gets the close-out text
PASSR1Marcus (water heater) replies by text: his sequence pauses and the reply goes to the office
PASSD5A week later: drain-camera close-out; water heater skipped (customer replied); mini-split (3 texts, no reply, 22 days) goes to the owner
PASSD6Quiet day: nothing due, owner not re-alerted

Actual output from the test run

A text from scenario D2 (Next day: drain-camera quote reaches day 2). Names and numbers are invented.

to +15555550145: Hi Linda, it's Jess at Ridgeline Heating & Plumbing. Checking you got our quote for the main drain camera inspection. Happy to answer any questions - just reply here. https://clienthub.getjobber.com/client_hubs/mock/quotes/1044 Reply STOP to opt out.

Verified with mocks

  • Day counting in the business time zone, touches on day 2 / 5 / 10 with a minimum 2-day gap, no double texts when the workflow runs twice in a day.
  • Quotes approved in Jobber stop their sequence; clients who opted out of follow-ups are skipped; quotes older than 21 days are never cold-texted.
  • Touch 2 written by a real (small, local) AI model with guardrails: no prices, discounts, links or financing talk, under 300 characters, must use the first name; failures fall back to a template.
  • Customer reply pauses all sequences for that phone and forwards the text to the office; silent quotes go to the owner once.

Documented from official API docs only

Built to the vendor's documentation but not run against a live account. Check these on yours.

  • Jobber quotes query fields and the filter argument syntax for 'awaiting response' quotes: assumed from a community schema copy. Check in GraphiQL.
  • Twilio Messages API and inbound-SMS webhook (Twilio docs).

Limitations

  • Built for Jobber only. Housecall Pro's API is on its MAX plan and we could not open its API docs; ServiceTitan not checked.
  • A small model wrote touch 2 in our tests; one early draft swapped the customer and company roles before we added a guardrail for it. Review a few real drafts before trusting it.
  • The first text includes the quote link, so it's 2 SMS segments.