Home / Auto Repair / Declined-work call list: one ranked Monday list for advisors, safety items first

Auto Repair problem 4: Declined work is written down on the invoice and never mentioned again

Declined-work call list

One ranked Monday list for advisors, safety items first

Verified with mocksLast tested 2026-10-31 · pricing checked October 2026
Download the workflowauto-declined-work-call-list.zip

12/12 test scenarios passed against mock APIs. Includes the n8n workflow, mock data and the test runner.

  • n8n
  • Twilio
  • Resend
  • Shopmonkey
  • Google Sheets

When an order is invoiced in Shopmonkey, its declined and deferred services are logged. Every Monday at 8 a.m. the service advisors get one email: work declined 14-180 days ago that is still deferred in Shopmonkey, brakes, tires, steering and other safety-related items first, then by dollar value, with the customer's phone. Customers with a car in the shop right now are left off with a note. An item drops off after it has been on three lists. No customer is contacted automatically; a person makes the call.

How the workflow runs

Trigger · When an event arrives

Shopmonkey webhook (order invoiced)

Steps

  1. Verify, log declined services

Outcome

  • Send errors

Also runs on: Mondays 8 am → Build ranked call list → Email advisors

Drawn from the node names in the workflow file inside the download (workflow.json).

The problem

One vendor-commissioned consumer survey and one shop-owner survey.

Background reading: Declined work at your shop: Shopmonkey's Deferred Service Reminder or an advisor call list?

Who it's for

Shopmonkey shops whose advisors want a short, ranked list instead of digging through old invoices.

Tools and monthly cost

ToolOfficial 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
n8nCommunity 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. This recipe sends emails only (one list a week), which stays inside Resend's free tier. n8n and your Shopmonkey plan are the only costs.

Setup

  1. 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.
  2. 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.
  3. 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.
  4. Company details: AUTO_COMPANY_NAME, AUTO_COMPANY_PHONE, AUTO_COMPANY_ADDRESS, COMPANY_TZ (the shop's time zone; texting hours follow it).
  5. 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.
  6. 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.
  7. In Shopmonkey, add a webhook for Order changes pointing at /webhook/mss-ar4-sm (the same signing secret as the car-ready recipe).
  8. DECLINED_MIN_DAYS (14), DECLINED_MAX_DAYS (180), DECLINED_LIST_TIMES (3), SAFETY_WORDS (comma-separated words that move an item to the top: brake, tire, steering...).

Download

Downloadauto-declined-work-call-list.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.

12/12 scenarios passed (run 2026-10-31)

PASSAR4-01Four invoiced ROs: 5 declined items logged; authorized work and the item marked 'exclude from deferred' are not; nothing sent
PASSAR4-02Same RO invoiced event again, and a non-invoice order update: nothing new logged
PASSAR4-03Monday Mar 8 (under 14 days since declined): no list
PASSAR4-04Monday Mar 22: one list, 5 items, $2,465.00; safety items first (struts, brakes, tires by value), then transmission fluid, belt; phones and the customer's reason shown
PASSAR4-05Run again the same week: no second list
PASSAR4-06Next Monday: Dana's struts were done since (revived in Shopmonkey) so they drop off; June has a car in the shop, so she's left off with a note
PASSAR4-07After three lists an item stops appearing (Ray's brakes listed Mar 22, 29, Apr 5; gone Apr 12); June's tires, listed only twice, are still there
PASSAR4-08Declined more than 180 days ago: left out (and with nothing else due, no email)
PASSAR4-09Badly signed webhook: rejected and logged, nothing read or logged
PASSAR4-10Shopmonkey 500 while reading an invoiced RO: office told it's not on the list (Shopmonkey still has it)
PASSAR4-11Shopmonkey retries the event after the failure (new webhook-id): logged that time
PASSAR4-12Shopmonkey 429 during the Monday run: retried, full list

Actual output from the test run

Scenario AR4-04: the Monday call list email to the advisors (invented customers). Names and numbers are invented.

Work customers declined 14-180 days ago that is still deferred in Shopmonkey. Safety-related items first, then by value.
Call, don't push: ask how the car is doing and offer a time. Mark it done or declined again in Shopmonkey and it drops off.

1. [safety] Dana Whitfield +15555550311: Rear struts, $1,120.00 (2018 Honda CR-V, declined Mar 1, RO #3002) - listed 1 of 3
2. [safety] Ray Okafor +15555550344: Front brake pads and rotors, $489.00 (2010 Toyota Camry, declined Mar 1, RO #3001, said: Next paycheck) - listed 1 of 3
3. [safety] June Park +15555550333: Two front tires, $388.00 (2015 Subaru Outback, declined Mar 1, RO #3004) - listed 1 of 3
4. Marco Ruiz +15555550322: Transmission fluid service, $249.00 (2012 Ford F-150, declined Mar 2, RO #3006) - listed 1 of 3
5. Ray Okafor +15555550344: Serpentine belt, $219.00 (2010 Toyota Camry, declined Mar 1, RO #3001) - listed 1 of 3

Riverside Auto Care
(555) 555-0150
1800 River Rd, Lawrence, KS

Verified with mocks

  • Four invoiced ROs: 5 declined items logged; authorized work and the item marked 'exclude from deferred' are not; nothing sent
  • Same RO invoiced event again, and a non-invoice order update: nothing new logged
  • Monday Mar 8 (under 14 days since declined): no list
  • Monday Mar 22: one list, 5 items, $2,465.00; safety items first (struts, brakes, tires by value), then transmission fluid, belt; phones and the customer's reason shown
  • Run again the same week: no second list
  • Next Monday: Dana's struts were done since (revived in Shopmonkey) so they drop off; June has a car in the shop, so she's left off with a note
  • After three lists an item stops appearing (Ray's brakes listed Mar 22, 29, Apr 5; gone Apr 12); June's tires, listed only twice, are still there
  • Declined more than 180 days ago: left out (and with nothing else due, no email)
  • Badly signed webhook: rejected and logged, nothing read or logged
  • Shopmonkey 500 while reading an invoiced RO: office told it's not on the list (Shopmonkey still has it)
  • Shopmonkey retries the event after the failure (new webhook-id): logged that time
  • Shopmonkey 429 during the Monday run: retried, full list
  • 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; the list goes to your own advisors. Calls to customers are your advisors' judgment.
  • Ranking by words in the service name is a sorting aid, not a safety assessment. The list never tells anyone a car is unsafe.
  • 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.