Home / Auto Repair / Car-ready pickup message from Shopmonkey: balance, hours, one reminder, then a person

Auto Repair problem 3: 'Is my car ready?' calls all afternoon, and finished cars sit in the lot overnight

Car-ready pickup message from Shopmonkey

Balance, hours, one reminder, then a person

Verified with mocksLast tested 2026-10-31 · pricing checked October 2026
Download the workflowauto-car-ready-pickup.zip

17/17 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 moves to your 'Ready for pickup' workflow status in Shopmonkey, a signed webhook triggers one message to the customer: the vehicle is ready, the balance (or 'paid in full'), your pickup hours and address. It's a text if they gave consent on the check-in form, otherwise an email; with neither, the advisors are asked to call. Status changes after 9 p.m. wait for 8 a.m. If the car is still at that status and unpaid at 10 a.m. the next day, one reminder goes out and the office is told; after that a person takes over. Duplicate webhooks never send twice.

How the workflow runs

Trigger · When an event arrives

Shopmonkey webhook (order updated)

Steps

  1. Verify, ready? Tell the customer

Outcome

  • Send pickup message

Also runs on: Every 15 min, 8 am-8 pm → Held texts + next-day reminder → Send held/reminders

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

The problem

Vendor docs and one industry survey; we found no public figure for how many calls a shop gets asking 'is it ready?', so we quote none.

Background reading: Car-ready text templates for auto shops (and two you shouldn't send)

Who it's for

Shopmonkey shops that use workflow statuses and want customers told the moment the car is done.

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. One local number sending 150 single-segment texts and receiving 150 a month, at the highest listed carrier fee ($0.005): 150 x ($0.0083 + $0.005) + 150 x $0.0083 + $1.15 number = $4.39 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

  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. READY_STATUS_ID: the id of your 'Ready for pickup' workflow status in Shopmonkey. AUTO_PICKUP_HOURS: one sentence with your pickup hours.
  8. In Shopmonkey, add a webhook for Order changes pointing at /webhook/mss-ar3-sm and set SHOPMONKEY_WEBHOOK_SECRET to its signing secret. Bad signatures are rejected and logged to the webhook_rejects sheet.

Download

Downloadauto-car-ready-pickup.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.

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

PASSAR3-01June (text consent on file) moves to Ready at 3 pm: one text with vehicle, balance, hours, address, STOP; office told
PASSAR3-02Shopmonkey retries the same webhook-id: nothing sent twice
PASSAR3-03A second event for the same Ready status (new webhook-id, same status date): still one message
PASSAR3-04No text consent on file: email instead, no text
PASSAR3-05Marco: no consent and no email: nothing to the customer, office asked to call
PASSAR3-06Consent on file but later texted STOP: no text, email instead
PASSAR3-07Marked Ready at 9:30 pm: text held, not at 7:45 am, sent at 8:00 am
PASSAR3-08Still at Ready and unpaid next day: one reminder at 10 am, office told to call; never a third message
PASSAR3-09Paid and picked up before 10 am next day: no reminder
PASSAR3-10Prepaid order: message says paid in full, no balance line
PASSAR3-11Order moves to some other status: nothing happens
PASSAR3-12A customer-table event: ignored
PASSAR3-13Forged signature, 15-minute-old timestamp, garbage signature: all rejected and logged, nothing sent
PASSAR3-14Secret rotation: two signatures in the header, the second one valid: accepted
PASSAR3-15Signed with the whole secret string instead of the decoded key (docs don't say which): also accepted
PASSAR3-16Shopmonkey 429 on the read-back: retried, one text
PASSAR3-17Shopmonkey 500 on the read-back: nothing guessed to the customer, office told to tell them by hand

Actual output from the test run

Scenario AR3-01: the ready-for-pickup text with the balance (invented customer and shop). Names and numbers are invented.

Hi June, your 2015 Subaru Outback is ready for pickup at Riverside Auto Care. Balance due: $412.50. We're open until 6 pm today and 7:30 am to 6 pm on weekdays. 1800 River Rd, Lawrence, KS. Questions? Call (555) 555-0150. Reply STOP to opt out.

Verified with mocks

  • June (text consent on file) moves to Ready at 3 pm: one text with vehicle, balance, hours, address, STOP; office told
  • Shopmonkey retries the same webhook-id: nothing sent twice
  • A second event for the same Ready status (new webhook-id, same status date): still one message
  • No text consent on file: email instead, no text
  • Marco: no consent and no email: nothing to the customer, office asked to call
  • Consent on file but later texted STOP: no text, email instead
  • Marked Ready at 9:30 pm: text held, not at 7:45 am, sent at 8:00 am
  • Still at Ready and unpaid next day: one reminder at 10 am, office told to call; never a third message
  • Paid and picked up before 10 am next day: no reminder
  • Prepaid order: message says paid in full, no balance line
  • Order moves to some other status: nothing happens
  • A customer-table event: ignored
  • Forged signature, 15-minute-old timestamp, garbage signature: all rejected and logged, nothing sent
  • Secret rotation: two signatures in the header, the second one valid: accepted
  • Signed with the whole secret string instead of the decoded key (docs don't say which): also accepted
  • Shopmonkey 429 on the read-back: retried, one text
  • Shopmonkey 500 on the read-back: nothing guessed to the customer, office told to tell them by hand
  • 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

  • Texts only go to numbers in our own consent log (the check-in form fills it). Shopmonkey's own opt-in fields aren't documented in the API, so we don't rely on them.
  • The balance is what Shopmonkey reports when the status changes; the message never mentions storage fees.
  • 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.