Home / Auto Repair / Estimate approval escalation: a 'call them' nudge for advisors and one end-of-day number
Auto Repair problem 2: Estimates sit unapproved for hours while the car blocks a bay and nobody calls the customer
Estimate approval escalation
A 'call them' nudge for advisors and one end-of-day number
Every 15 minutes in shop hours, the workflow reads open Shopmonkey orders. Any estimate sent to the customer and still not approved after 2 hours (you set it) gets one email to the service advisors with the customer's name, phone, vehicle and total: call them. Re-sending the estimate restarts the clock. At 4:30 p.m. the manager gets one text and email: how many estimates are waiting, the dollars, the oldest one, and estimates that were written but never sent. Nothing goes to customers; Shopmonkey's own Estimate Reminders can do that.
How the workflow runs
Trigger · On a schedule
Every 15 min, 7 am-6 pm Mon-Sat
Steps
- Read open estimates, escalate
Outcome
- Send internal emails/text
Drawn from the node names in the workflow file inside the download (workflow.json).
The problem
One industry survey of shop owners and one vendor-commissioned consumer survey; no figure on approval delays in hours exists that we could find.
- OEC's survey of nearly 700 US shops (Sept 2025): 50% say customers are delaying or declining work, and 49% say customers are more cautious about approving work that isn't required. Source: OEC / PartsTech: The U.S. General Auto Repair Shop Survey Report (survey Sept 2025, nearly 700 mechanical shops) (Industry survey)
- Shopmonkey's Estimate Reminders send the customer a follow-up 24 hours after an estimate by default and wait out quiet hours (8 p.m.-9 a.m.). Shopmonkey files them under CRM Essentials, which its pricing page lists as a paid add-on; the same page lists 'Automated Estimate Followups' on the Genius plan. Source: Shopmonkey Help Center: CRM Essentials: Send Estimate Reminders (Vendor docs)
Background reading: Declined work at your shop: Shopmonkey's Deferred Service Reminder or an advisor call list?
Who it's for
Shopmonkey shops where a car waiting for approval holds up a bay and a technician.
Tools and monthly cost
| Tool | Official price |
|---|---|
| Shopmonkey (you probably already pay for it) | Basic $239 / month, Clever $399, Genius $499 (about 10% less billed annually: $215 / $359 / $449). The pricing page lists 'API and Webhooks' and unlimited 2-way SMS and email in every plan, and 'Automated Estimate Followups' on Genius. CRM Essentials (campaigns, online booking) is a paid add-on at $349 / month ($314 annual) pricing page |
| Twilio US local phone number | $1.15 / month pricing page |
| Twilio US SMS, sent or received | $0.0083 per segment, plus carrier fees on outbound texts of $0.0035-$0.005 per segment pricing page |
| A2P 10DLC registration (required to text US customers from a local number) | One-time: $4.50 brand registration and $15 campaign vetting. Monthly: $1.50-$10 per campaign by use case pricing page |
| Resend (sends the emails; any email API that accepts an Idempotency-Key works) | Free: 3,000 emails / month, 100 / day. Pro: $20 / month for 50,000 emails pricing page |
| Google Sheets (consent log, opt-out list, declined-work log) | Free with a Google Account pricing page |
| n8n | Community Edition: free if you self-host (you pay for the server). n8n Cloud: Starter EUR 20 / month or Pro EUR 50 / month, billed annually pricing page |
Example month: Illustrative arithmetic, not a measured result. One local number sending 25 single-segment texts and receiving 25 a month, at the highest listed carrier fee ($0.005): 25 x ($0.0083 + $0.005) + 25 x $0.0083 + $1.15 number = $1.69 a month in Twilio usage, plus the A2P 10DLC campaign fee ($1.50-$10 a month) and one-time registration ($4.50 brand + $15 campaign vetting). Emails stay inside Resend's free tier at this volume. n8n and your Shopmonkey plan come on top. Your volumes will differ.
Setup
- Shopmonkey: create an API key (Settings > Integration > API Keys) and set SHOPMONKEY_API=https://api.shopmonkey.cloud/v3 and SHOPMONKEY_API_KEY. The workflows send it as a Bearer token and honor HTTP 429 Retry-After.
- Texts need a Twilio number on an approved A2P 10DLC campaign. Set TWILIO_ACCOUNT_SID, TWILIO_BASIC_AUTH (base64 of SID:auth token) and AUTO_TWILIO_FROM.
- Email: MSS_EMAIL_API (e.g. https://api.resend.com), EMAIL_API_KEY, AUTO_EMAIL_FROM, AUTO_OFFICE_EMAIL (the service advisors' inbox). Every send carries an Idempotency-Key, so a retried run never emails twice.
- Company details: AUTO_COMPANY_NAME, AUTO_COMPANY_PHONE, AUTO_COMPANY_ADDRESS, COMPANY_TZ (the shop's time zone; texting hours follow it).
- Google Sheet stand-in: MSS_SHEET_URL points at the shared sheets (sms_consent, sms_optouts, inbound_texts and the recipe's own sheets). In production, swap these HTTP calls for n8n's Google Sheets node.
- Remove the test-only mss-ar*-tick webhooks (or put them behind n8n header auth) and make sure MSS_TEST_CLOCK is NOT set in production.
- AUTO_ESCALATE_MINUTES (default 120), AUTO_UNSENT_MINUTES (default 120: an estimate written but not sent for this long shows on the end-of-day list), AUTO_EOD_TIME (default 16:30).
- AUTO_MANAGER_PHONE and AUTO_MANAGER_EMAIL for the end-of-day summary. The text goes to your own staff, not customers.
Download
Downloadauto-estimate-approval-escalation.zip
Contains the n8n workflow, 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 on an isolated test instance and run end to end. Shopmonkey (REST v3 with a Bearer key, HTTP 429 with Retry-After, HMAC-signed webhooks), Twilio, the email API (Resend-style) and Google Sheets were replaced by a local mock server built from the vendors' public docs. A frozen test clock checks the 8 a.m.-9 p.m. texting window. These recipes use no AI model; every decision is a written rule. Customers, vehicles and repair orders are invented. Verified with mocks; nothing was sent to a real person or account. How we test.
11/11 scenarios passed (run 2026-10-31)
| PASS | AR2-01 | 11:05 am: #1042 (sent 9:10) is under 2 hours: no email |
| PASS | AR2-02 | 11:15 am: #1042 passes 2 hours: one advisor email with customer, vehicle, total and phone; nothing to the customer |
| PASS | AR2-03 | 11:30 am: no repeat for #1042; #1043 (sent 11:00) not due; approved #1044, unsent #1045 and archived #1046 never escalated |
| PASS | AR2-04 | 1:00 pm: #1043 passes 2 hours: one email, Marco's '(555) 555-0322' shown as +15555550322 |
| PASS | AR2-05 | Advisor re-sends #1042 at 1:30 pm: the clock restarts, a new email only after 2 more hours |
| PASS | AR2-06 | 4:30 pm: manager gets one text + one email: 1 open estimate sent (#1042), 1 written-not-sent (#1045); approved #1043 left out |
| PASS | AR2-07 | 4:45 pm: end-of-day summary not repeated |
| PASS | AR2-08 | Nothing open at 4:30 pm: no summary sent at all |
| PASS | AR2-09 | Shopmonkey 429 once: Retry-After honored, escalation still sent once |
| PASS | AR2-10 | Shopmonkey down: office told once per hour that the check couldn't run, no guesses; recovers on the next good read |
| PASS | AR2-11 | 125 open estimates (more than one page of 100): all counted in the summary |
Actual output from the test run
Scenario AR2-06: the end-of-day text to the manager (invented shop). Names and numbers are invented.
Riverside Auto Care end of day: 2 estimates not approved, $1,459.50 waiting. Oldest: #1042 sent 1:30 PM Tue. 1 written but never sent.
Verified with mocks
- 11:05 am: #1042 (sent 9:10) is under 2 hours: no email
- 11:15 am: #1042 passes 2 hours: one advisor email with customer, vehicle, total and phone; nothing to the customer
- 11:30 am: no repeat for #1042; #1043 (sent 11:00) not due; approved #1044, unsent #1045 and archived #1046 never escalated
- 1:00 pm: #1043 passes 2 hours: one email, Marco's '(555) 555-0322' shown as +15555550322
- Advisor re-sends #1042 at 1:30 pm: the clock restarts, a new email only after 2 more hours
- 4:30 pm: manager gets one text + one email: 1 open estimate sent (#1042), 1 written-not-sent (#1045); approved #1043 left out
- 4:45 pm: end-of-day summary not repeated
- Nothing open at 4:30 pm: no summary sent at all
- Shopmonkey 429 once: Retry-After honored, escalation still sent once
- Shopmonkey down: office told once per hour that the check couldn't run, no guesses; recovers on the next good read
- 125 open estimates (more than one page of 100): all counted in the summary
- Verified with mocks; invented customers, vehicles and repair orders only.
Documented from official API docs only
Built to the vendor's documentation but not run against a live account. Check these on yours.
- Shopmonkey REST v3 paths, field names (order, customer, deferred services, workflow status) and webhook signing (webhook-signature 'v1,' base64 HMAC-SHA256 of id.timestamp.body) come from Shopmonkey's public developer docs; not run against a live Shopmonkey account.
- Twilio request signing, Messages API, Dial action callbacks, 429 behavior and built-in STOP handling (from Twilio's docs). The email API follows Resend's documented request shape.
Limitations
- Internal only: if you want customers reminded too, turn on Shopmonkey's Estimate Reminders rather than building a second set of texts.
- If Shopmonkey can't be read, the advisors get one email per hour saying so; the next run catches up.
- Every message is checked against a word list first (AUTO_LINT in autolib.py): 'guaranteed', 'safe / unsafe to drive', 'dangerous', 'will fail', 'diagnosis', storage fees and collection threats are blocked, and the office is told instead. A text can't see the car; a technician's words belong in the estimate, not in an automated message.
- Written and tested for Shopmonkey's API only. Tekmetric's API isn't open to the public, and Mitchell 1, Shop-Ware, AutoLeap and other shop systems are not built; we make no claim these recipes work with them.
- Not legal advice and not a compliance guarantee. Texts to customers go only to numbers with consent recorded on our check-in form (or that just called the shop, for the missed-call reply), only between 8 a.m. and 9 p.m. shop time, and plain-English opt-outs are honored (47 CFR 64.1200 is the federal rule we design around). Some states are stricter; have your attorney review texting consent before going live.