Win back customers inactive for 90 days
Bring past customers back with a timely, personal offer.
The problem
Getting a past customer back costs far less than finding a new one, but nobody tracks who quietly stopped coming.
What it does
Every Monday it finds customers whose last purchase was 90-120 days ago (and who haven't been contacted in that window), then texts each one a personal 'we miss you' offer.
- Import
win-back-90-day-inactive.n8n.json. - Set CUSTOMERS_URL to a JSON list [{name, phone, last_visit, sms_marketing_opt_in}]: Square Customers API, a Shopify customer export, or a Sheet.
- The filter only includes customers with sms_marketing_opt_in=true. Keep that line.
- Set OFFER (e.g. '15% off your next visit with code COMEBACK'), attach Twilio, activate.
Credentials: each HTTP node uses a generic credential (Twilio = HTTP Basic Auth with Account SID/Auth Token; Resend/OpenAI = Header Auth Authorization: Bearer <key>). Values like $env.BUSINESS_NAME read environment variables. On n8n Cloud, replace them with literal text or n8n Variables ($vars).
Make / Zapier notes
Make: Square 'Search customers' → Iterator → Filter on last visit → Twilio. Zapier: weekly Schedule + Storage/Sheets lookup.
Compliance notes
SMS consent (TCPA / A2P 10DLC): Only text people who gave you their number for this purpose (form checkbox, booking, or past customer relationship for transactional messages). Marketing texts need prior express written consent. Register your Twilio number for A2P 10DLC, include your business name, honor STOP/HELP (Twilio handles STOP automatically), and only send 8am-9pm recipient local time. This is a marketing message, so it requires prior express written consent (sms_marketing_opt_in). Email (CAN-SPAM / GDPR): Promotional emails need an unsubscribe link and your physical address; honor opt-outs. In the EU/UK you need opt-in consent.
Expected result
A predictable trickle of returning customers each week; track redemptions of the code to measure it.
Workflow file: win-back-90-day-inactive.n8n.json