toolgrader.com

N8N WORKFLOWS — E-COMMERCE AUTOMATION

Abandoned Cart Recovery Workflow

Our Guidance

Here’s exactly how to connect the four accounts this workflow needs — every other setting lives in one “Store Config” node.

Shopify — Settings → Apps → Develop apps → Build in Dev Dashboard, create an app with the read_orders scope, install it, then paste the Access Token into the two trigger nodes.

SendGrid — verify your sender email under Settings → Sender Authentication, then create an API key under Settings → API Keys and paste it into the email nodes.

Twilio or WhatsApp — grab your Account SID + Auth Token (or WhatsApp Business phone number ID) and paste it into the SMS or WhatsApp nodes, whichever you choose in Store Config.

Google Sheets — just click “Sign in with Google” on any Log node. No manual key needed — create the sheet, paste its ID into Store Config, done.

Full step-by-step screenshots for all four are in the included Credentials Guide (Word document).

Abandoned Cart Recovery Workflow

Get the Workflow File

{"name":"Abandoned Cart Recovery Workflow","nodes":[{"parameters":{"authentication":"accessToken","topic":"checkouts\/create"},"id":"5db8b5c3-7fde-4156-a627-55db1fe958df","name":"Shopify - Checkout Created","type":"n8n-nodes-base.shopifyTrigger","typeVersion":1,"position":[-416,48],"webhookId":"82e792b4-e3ef-473b-8e2a-d8023d57a80c"},{"parameters":{"assignments":{"assignments":[{"id":"shopDomain","name":"shopDomain","value":"<__PLACEHOLDER_VALUE__e.g. my-store.myshopify.com__>","type":"string"},{"id":"fromEmail","name":"fromEmail","value":"<__PLACEHOLDER_VALUE__e.g. orders@yourstore.com__>","type":"string"},{"id":"fromName","name":"fromName","value":"<__PLACEHOLDER_VALUE__e.g. Your Store Name__>","type":"string"},{"id":"twilioFromNumber","name":"twilioFromNumber","value":"<__PLACEHOLDER_VALUE__e.g. +15551234567__>","type":"string"},{"id":"whatsappPhoneNumberId","name":"whatsappPhoneNumberId","value":"<__PLACEHOLDER_VALUE__WhatsApp Business phone number ID__>","type":"string"},{"id":"secondaryChannel","name":"secondaryChannel","value":"sms","type":"string"},{"id":"sheetId","name":"sheetId","value":"<__PLACEHOLDER_VALUE__paste your Google Sheet ID or full URL__>","type":"string"},{"id":"sheetName","name":"sheetName","value":"Sheet1","type":"string"},{"id":"minCartValue","name":"minCartValue","value":20,"type":"number"},{"id":"discount1Code","name":"discount1Code","value":"<__PLACEHOLDER_VALUE__real Shopify discount code, e.g. COMEBACK10__>","type":"string"},{"id":"discount2Code","name":"discount2Code","value":"<__PLACEHOLDER_VALUE__real Shopify discount code, e.g. COMEBACK15__>","type":"string"},{"id":"discount3Code","name":"discount3Code","value":"<__PLACEHOLDER_VALUE__real Shopify discount code, e.g. COMEBACK20__>","type":"string"}]},"includeOtherFields":true,"options":[]},"id":"daccbcc3-007b-4b63-8575-d551d9274586","name":"Store Config (edit me)","type":"n8n-nodes-base.set","typeVersion":3.4,"position":[-192,112]},{"parameters":{"jsCode":"\nconst items = $input.all();\n\nreturn items.map(item => {\n const checkout = item.json;\n const lineItems = checkout.line_items || [];\n\n const cartItemsHtml = lineItems.map(li => `\n <tr>\n <td style=\"padding:8px;border-bottom:1px solid #eee;\">\n <img src=\"${(li.image_url || (li.image && li.image.src) || '')}\" width=\"56\" height=\"56\" style=\"border-radius:6px;object-fit:cover;\" \/>\n <\/td>\n <td style=\"padding:8px;border-bottom:1px solid #eee;\">\n ${li.title || li.name || 'Product'}${li.variant_title ? ' - ' + li.variant_title : ''}<br\/>\n <span style=\"color:#777;font-size:12px;\">Qty: ${li.quantity}<\/span>\n <\/td>\n <td style=\"padding:8px;border-bottom:1px solid #eee;text-align:right;\">$${li.price}<\/td>\n <\/tr>`).join('');\n\n const cartItemsText = lineItems\n .map(li => `${li.title} x${li.quantity} - $${li.price}`)\n .join(', ');\n\n const customer = checkout.customer || {};\n const billing = checkout.billing_address || {};\n const customerName = (customer.first_name || customer.last_name)\n ? `${customer.first_name || ''} ${customer.last_name || ''}`.trim()\n : (billing.name || 'there');\n\n const cartTotalNumber = parseFloat(checkout.total_price || '0') || 0;\n const itemCount = lineItems.reduce((sum, li) => sum + (li.quantity || 1), 0);\n const isNewCustomer = !customer.orders_count || customer.orders_count === 0;\n const device = (checkout.source_name || '').toLowerCase().includes('mobile') ? 'mobile' : 'desktop';\n\n let predictedReason = 'Just Browsing';\n if (cartTotalNumber > 200) {\n predictedReason = 'Price Sensitivity';\n } else if (isNewCustomer) {\n predictedReason = 'Checkout Complexity (New Customer)';\n } else if (itemCount > 5) {\n predictedReason = 'Comparison Shopping';\n }\n\n return {\n json: {\n email: checkout.email || customer.email || '',\n customerName,\n phone: checkout.phone || customer.phone || billing.phone || '',\n checkoutToken: checkout.token || checkout.checkout_token || '',\n recoveryUrl: checkout.abandoned_checkout_url || '',\n completedAt: checkout.completed_at || '',\n cartItemsHtml,\n cartItemsText,\n cartTotal: checkout.total_price || '',\n cartTotalNumber,\n itemCount,\n device,\n currency: checkout.currency || 'USD',\n predictedReason\n }\n };\n});\n"},"id":"6a3b6f27-f7d7-4f7b-9180-7d9825a35e52","name":"Extract & Validate Data","type":"n8n-nodes-base.code","typeVersion":2,"position":[0,112]},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":1},"combinator":"and","conditions":[{"leftValue":"={{ $json.email }}","operator":{"type":"string","operation":"notEmpty"},"rightValue":""},{"leftValue":"={{ $json.completedAt }}","operator":{"type":"string","operation":"empty"},"rightValue":""},{"leftValue":"={{ $json.cartTotalNumber }}","operator":{"type":"number","operation":"gte"},"rightValue":"={{ nodeJson(storeConfig, 'minCartValue') }}"}]},"options":[]},"id":"143e7380-09e5-4ae9-b545-26284f2fd2d8","name":"Has Email, Not Completed & Above Min Value?","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[272,112]},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Abandoned - Awaiting Reminder 1","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"3405e9a6-223d-4a44-96c0-075f39c1baab","name":"Log: Cart Abandoned (Awaiting Reminder 1)","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[528,112],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"amount":1,"unit":"hours"},"id":"9bf70b7b-da5a-42c5-aabb-68964db7199b","name":"Wait 1 Hour","type":"n8n-nodes-base.wait","typeVersion":1.1,"position":[784,112],"webhookId":"62e90f1e-e9c2-458f-9d3f-28a349af770c"},{"parameters":{"documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"filtersUI":{"values":[{"lookupColumn":"CheckoutToken","lookupValue":"={{ nodeJson(extractData, 'checkoutToken') }}"}]},"options":[]},"id":"15d71049-414c-443e-8730-9617dd58909a","name":"Read Status (Before Reminder 1)","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[1040,112],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":1},"combinator":"and","conditions":[{"leftValue":"={{ $json.Converted }}","operator":{"type":"string","operation":"empty"},"rightValue":""}]},"options":[]},"id":"06421f1e-edaa-4d18-866d-cd16fbb0fa59","name":"Still Abandoned? (Before Reminder 1)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[1312,112]},{"parameters":{"resource":"mail","fromEmail":"={{ nodeJson(storeConfig, 'fromEmail') }}","fromName":"={{ nodeJson(storeConfig, 'fromName') }}","toEmail":"={{ nodeJson(extractData, 'email') }}","subject":"You left something in your cart!","contentType":"text\/html","contentValue":"=<div style=\"font-family:Arial,Helvetica,sans-serif;max-width:600px;margin:auto;color:#222;\"><h2>Hi {{ nodeJson(extractData, 'customerName') }},<\/h2><p>You left some great items in your cart. Complete your order below before they sell out!<\/p><p style=\"text-align:center;\"><span style=\"background:#eef7f2;color:#0a6b42;padding:8px 16px;border-radius:6px;font-weight:bold;display:inline-block;\">Code: {{ nodeJson(storeConfig, 'discount1Code') }}<\/span><\/p><table style=\"width:100%;border-collapse:collapse;margin:16px 0;\">{{ nodeJson(extractData, 'cartItemsHtml') }}<\/table><p style=\"text-align:center;margin-top:24px;\"><a href=\"{{ nodeJson(extractData, 'recoveryUrl') }}\" style=\"background:#111;color:#fff;padding:12px 26px;text-decoration:none;border-radius:6px;display:inline-block;\">Complete Your Purchase<\/a><\/p><p style=\"color:#999;font-size:12px;margin-top:32px;\">If you already completed this order, please ignore this email.<\/p><\/div>","additionalFields":[]},"id":"94c521b2-a0c2-4007-9727-63ac9b969acf","name":"Email: Reminder 1 (Gentle Nudge)","type":"n8n-nodes-base.sendGrid","typeVersion":1,"position":[1568,112],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":1},"combinator":"and","conditions":[{"leftValue":"={{ nodeJson(extractData, 'phone') }}","operator":{"type":"string","operation":"notEmpty"},"rightValue":""}]},"options":[]},"id":"52ea8ac2-90ee-43ea-bd9c-116dc98d1021","name":"Has Phone? (Reminder 1)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[1568,512]},{"parameters":{"conditions":{"options":{"caseSensitive":false,"leftValue":"","typeValidation":"loose","version":1},"combinator":"and","conditions":[{"leftValue":"={{ nodeJson(storeConfig, 'secondaryChannel') }}","operator":{"type":"string","operation":"equals"},"rightValue":"whatsapp"}]},"options":[]},"id":"04c847bb-691b-4a66-8201-8558b6b70b3f","name":"WhatsApp or SMS? (Reminder 1)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[1440,352]},{"parameters":{"operation":"send","phoneNumberId":"={{ nodeJson(storeConfig, 'whatsappPhoneNumberId') }}","recipientPhoneNumber":"={{ nodeJson(extractData, 'phone') }}","textBody":"You left something in your cart! Tap your link to complete your order.","additionalFields":[]},"id":"4e465c1b-8a2b-42d5-a01e-dc47ac285d8b","name":"WhatsApp: Gentle Reminder","type":"n8n-nodes-base.whatsApp","typeVersion":1.1,"position":[1312,224],"retryOnFail":true,"maxTries":2,"waitBetweenTries":1500,"webhookId":"e1ea4e0a-bb87-4ee1-92f9-65013e77d275","onError":"continueRegularOutput"},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Reminder 1 Sent - Gentle Nudge","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"fed0da67-b1b2-4c46-a6b8-184539a167d0","name":"Log: Reminder 1 Sent","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[1312,512],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"amount":23,"unit":"hours"},"id":"ab9b3344-c319-4ab6-9282-593c2df8f022","name":"Wait 23h (reach 24h total)","type":"n8n-nodes-base.wait","typeVersion":1.1,"position":[1040,512],"webhookId":"6c4706b6-e6d2-4dac-b962-3390d0859d6d"},{"parameters":{"documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"filtersUI":{"values":[{"lookupColumn":"CheckoutToken","lookupValue":"={{ nodeJson(extractData, 'checkoutToken') }}"}]},"options":[]},"id":"2ab9c284-cc20-4352-a635-dfe844ea2d30","name":"Read Status (Before Reminder 2)","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[784,512],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":1},"combinator":"and","conditions":[{"leftValue":"={{ $json.Converted }}","operator":{"type":"string","operation":"empty"},"rightValue":""}]},"options":[]},"id":"f3a7964f-78d6-4ae4-b4eb-0bd439e75f15","name":"Still Abandoned? (Before Reminder 2)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[528,512]},{"parameters":{"resource":"mail","fromEmail":"={{ nodeJson(storeConfig, 'fromEmail') }}","fromName":"={{ nodeJson(storeConfig, 'fromName') }}","toEmail":"={{ nodeJson(extractData, 'email') }}","subject":"Need a hand?","contentType":"text\/html","contentValue":"=<div style=\"font-family:Arial,Helvetica,sans-serif;max-width:600px;margin:auto;color:#222;\"><h2>Hi {{ nodeJson(extractData, 'customerName') }},<\/h2><p>Still thinking it over? We are here to help - if you had any trouble at checkout (payment issues, shipping questions), just reply to this email and we will sort it out.<\/p><p style=\"text-align:center;\"><span style=\"background:#eef7f2;color:#0a6b42;padding:8px 16px;border-radius:6px;font-weight:bold;display:inline-block;\">Code: {{ nodeJson(storeConfig, 'discount2Code') }}<\/span><\/p><table style=\"width:100%;border-collapse:collapse;margin:16px 0;\">{{ nodeJson(extractData, 'cartItemsHtml') }}<\/table><p style=\"text-align:center;margin-top:24px;\"><a href=\"{{ nodeJson(extractData, 'recoveryUrl') }}\" style=\"background:#111;color:#fff;padding:12px 26px;text-decoration:none;border-radius:6px;display:inline-block;\">Complete Your Purchase<\/a><\/p><p style=\"color:#999;font-size:12px;margin-top:32px;\">If you already completed this order, please ignore this email.<\/p><\/div>","additionalFields":[]},"id":"da2b4b9b-3220-49d9-a4ac-8ff7c87a2147","name":"Still need help with your order?","type":"n8n-nodes-base.sendGrid","typeVersion":1,"position":[272,512],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":1},"combinator":"and","conditions":[{"leftValue":"={{ nodeJson(extractData, 'phone') }}","operator":{"type":"string","operation":"notEmpty"},"rightValue":""}]},"options":[]},"id":"a566611d-5c5a-4046-bfdc-8a33f025c553","name":"Has Phone? (Reminder 2)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[0,512]},{"parameters":{"conditions":{"options":{"caseSensitive":false,"leftValue":"","typeValidation":"loose","version":1},"combinator":"and","conditions":[{"leftValue":"={{ nodeJson(storeConfig, 'secondaryChannel') }}","operator":{"type":"string","operation":"equals"},"rightValue":"whatsapp"}]},"options":[]},"id":"d63baff9-9dab-4da4-a194-814caaf6bd1d","name":"WhatsApp or SMS? (Reminder 2)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[144,752]},{"parameters":{"operation":"send","phoneNumberId":"={{ nodeJson(storeConfig, 'whatsappPhoneNumberId') }}","recipientPhoneNumber":"={{ nodeJson(extractData, 'phone') }}","textBody":"Still shopping? Need help finishing your order? Reply here or tap your cart link.","additionalFields":[]},"id":"572b7323-98c3-4da0-903f-996da8b081d2","name":"WhatsApp: Help Reminder","type":"n8n-nodes-base.whatsApp","typeVersion":1.1,"position":[272,832],"retryOnFail":true,"maxTries":2,"waitBetweenTries":1500,"webhookId":"4be1a2ce-078f-4703-81b1-ab463a3f5d7d","onError":"continueRegularOutput"},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Reminder 2 Sent - Help\/FAQ","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"a0c77da4-0094-4ea7-8897-4c433d96fb78","name":"Log: Reminder 2 Sent","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[0,944],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"amount":24,"unit":"hours"},"id":"5482c0f7-47cc-45eb-83e9-7735c97807e6","name":"Wait 24h (reach 48h total)","type":"n8n-nodes-base.wait","typeVersion":1.1,"position":[272,944],"webhookId":"4d8cac2e-15e4-4f95-99d6-c0891cf0d30c"},{"parameters":{"documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"filtersUI":{"values":[{"lookupColumn":"CheckoutToken","lookupValue":"={{ nodeJson(extractData, 'checkoutToken') }}"}]},"options":[]},"id":"853b7108-24d9-49f5-bf17-9af8aaa1a966","name":"Read Status (Before Reminder 3)","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[528,944],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":1},"combinator":"and","conditions":[{"leftValue":"={{ $json.Converted }}","operator":{"type":"string","operation":"empty"},"rightValue":""}]},"options":[]},"id":"80f49ecb-843b-419f-9d14-674f5544426e","name":"Still Abandoned? (Before Reminder 3)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[784,944]},{"parameters":{"resource":"mail","fromEmail":"={{ nodeJson(storeConfig, 'fromEmail') }}","fromName":"={{ nodeJson(storeConfig, 'fromName') }}","toEmail":"={{ nodeJson(extractData, 'email') }}","subject":"Final reminder + discount","contentType":"text\/html","contentValue":"=<div style=\"font-family:Arial,Helvetica,sans-serif;max-width:600px;margin:auto;color:#222;\"><h2>Hi {{ nodeJson(extractData, 'customerName') }},<\/h2><p>This is your last reminder - complete your order before it expires.<\/p><p style=\"text-align:center;\"><span style=\"background:#eef7f2;color:#0a6b42;padding:8px 16px;border-radius:6px;font-weight:bold;display:inline-block;\">Code: {{ nodeJson(storeConfig, 'discount3Code') }}<\/span><\/p><table style=\"width:100%;border-collapse:collapse;margin:16px 0;\">{{ nodeJson(extractData, 'cartItemsHtml') }}<\/table><p style=\"text-align:center;margin-top:24px;\"><a href=\"{{ nodeJson(extractData, 'recoveryUrl') }}\" style=\"background:#111;color:#fff;padding:12px 26px;text-decoration:none;border-radius:6px;display:inline-block;\">Complete Your Purchase<\/a><\/p><p style=\"color:#999;font-size:12px;margin-top:32px;\">If you already completed this order, please ignore this email.<\/p><\/div>","additionalFields":[]},"id":"fc8f84d3-d8d4-4ace-9ae9-6d45f484af55","name":"Last chance - your discount is waiting","type":"n8n-nodes-base.sendGrid","typeVersion":1,"position":[1040,944],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":1},"combinator":"and","conditions":[{"leftValue":"={{ nodeJson(extractData, 'phone') }}","operator":{"type":"string","operation":"notEmpty"},"rightValue":""}]},"options":[]},"id":"7266f3ce-2a51-47ac-89ba-7f14b750e25c","name":"Has Phone? (Reminder 3)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[1312,944]},{"parameters":{"conditions":{"options":{"caseSensitive":false,"leftValue":"","typeValidation":"loose","version":1},"combinator":"and","conditions":[{"leftValue":"={{ nodeJson(storeConfig, 'secondaryChannel') }}","operator":{"type":"string","operation":"equals"},"rightValue":"whatsapp"}]},"options":[]},"id":"fc0ac419-e08b-4134-9ae9-55dee2839305","name":"WhatsApp or SMS? (Reminder 3)","type":"n8n-nodes-base.if","typeVersion":2.3,"position":[1440,784]},{"parameters":{"operation":"send","phoneNumberId":"={{ nodeJson(storeConfig, 'whatsappPhoneNumberId') }}","recipientPhoneNumber":"={{ nodeJson(extractData, 'phone') }}","textBody":"Last chance! Your cart is about to expire. Use your discount code to complete your order now.","additionalFields":[]},"id":"c1323ba1-80b8-4ed8-8eb6-1ca239a2c3f0","name":"WhatsApp: Final Discount Reminder","type":"n8n-nodes-base.whatsApp","typeVersion":1.1,"position":[1312,704],"retryOnFail":true,"maxTries":2,"waitBetweenTries":1500,"webhookId":"4628742e-7673-4296-9c7e-df4eeed2ca0d","onError":"continueRegularOutput"},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Reminder 3 Sent - Final Discount Offer","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"714a6a8d-bf83-4cd1-bfc0-d59c84d268e4","name":"Log: Reminder 3 Sent (Final)","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[1568,944],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"from":"={{ nodeJson(storeConfig, 'twilioFromNumber') }}","to":"={{ nodeJson(extractData, 'phone') }}","message":"Last chance! Your cart is about to expire. Use your discount code to complete your order now.","options":[]},"id":"1d88e610-7417-4e37-8f89-3c57d5c9493c","name":"SMS: Final Discount Reminder","type":"n8n-nodes-base.twilio","typeVersion":1,"position":[1568,704],"retryOnFail":true,"maxTries":2,"waitBetweenTries":1500,"onError":"continueRegularOutput"},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Converted (before final reminder)","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"5925cfa9-519e-4a7b-9666-062731c47d7b","name":"Log: Converted After Reminder 2","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[784,1120],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"from":"={{ nodeJson(storeConfig, 'twilioFromNumber') }}","to":"={{ nodeJson(extractData, 'phone') }}","message":"Still shopping? Need help finishing your order? Reply to this text or tap your cart link.","options":[]},"id":"27db0d2b-42f7-4379-8193-9fc954bd9091","name":"SMS: Help Reminder","type":"n8n-nodes-base.twilio","typeVersion":1,"position":[0,832],"retryOnFail":true,"maxTries":2,"waitBetweenTries":1500,"onError":"continueRegularOutput"},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Converted (before reminder 2)","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"9a7d4d53-f4e2-429f-afb7-1c3c23f2126b","name":"Log: Converted After Reminder 1","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[528,688],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"from":"={{ nodeJson(storeConfig, 'twilioFromNumber') }}","to":"={{ nodeJson(extractData, 'phone') }}","message":"You left something in your cart! Tap your link to complete your order.","options":[]},"id":"22bf822f-b527-436d-8145-767c3f8048c6","name":"SMS: Gentle Reminder","type":"n8n-nodes-base.twilio","typeVersion":1,"position":[1568,224],"retryOnFail":true,"maxTries":2,"waitBetweenTries":1500,"onError":"continueRegularOutput"},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Converted (before any reminder)","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"1ebc1139-9dfd-469d-af41-9f65747e7c0e","name":"Log: Converted Before Reminder 1","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[1312,288],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"operation":"appendOrUpdate","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ nodeJson(extractData, 'checkoutToken') }}","Email":"={{ nodeJson(extractData, 'email') }}","CustomerName":"={{ nodeJson(extractData, 'customerName') }}","Status":"Skipped - No Email, Low Value, or Already Completed","LastUpdated":"={{ $now.toISO() }}","RecoveryUrl":"={{ nodeJson(extractData, 'recoveryUrl') }}","Converted":"","AbandonReason":"={{ nodeJson(extractData, 'predictedReason') }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"64e56f0a-a5b1-4329-a60d-2efea9db3a1b","name":"Log: Skipped (No Email \/ Low Value \/ Already Completed)","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[272,288],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"authentication":"accessToken","topic":"checkouts\/update"},"id":"70972be7-fc9e-42e7-9c6d-91c8ea9b2c52","name":"Shopify - Checkout Updated","type":"n8n-nodes-base.shopifyTrigger","typeVersion":1,"position":[-416,160],"webhookId":"bae0483b-7df3-4ba5-bd9f-36b3b6f3661a"},{"parameters":{"authentication":"accessToken","topic":"orders\/create"},"id":"acdeaa1d-298c-4db5-a4c5-9b44261667ec","name":"Shopify - Order Created","type":"n8n-nodes-base.shopifyTrigger","typeVersion":1,"position":[-416,-288],"webhookId":"8fef876d-4f39-4a48-ae5b-a5df8dfd8914"},{"parameters":{"jsCode":"\nconst items = $input.all();\nreturn items.map(item => {\n const order = item.json;\n const email = order.email || (order.customer && order.customer.email) || '';\n return { json: { email } };\n});\n"},"id":"c861098d-723c-4749-80b5-f62e380caa24","name":"Extract Order Email","type":"n8n-nodes-base.code","typeVersion":2,"position":[-160,-288]},{"parameters":{"documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"filtersUI":{"values":[{"lookupColumn":"Email","lookupValue":"={{ nodeJson(extractOrderEmail, 'email') }}"},{"lookupColumn":"Converted"}]},"options":[]},"id":"a21062cf-8d66-4357-b681-3f8ee16417a0","name":"Find Abandoned Rows for Email","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[112,-288],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"operation":"update","documentId":{"__rl":true,"mode":"id","value":"={{ nodeJson(storeConfig, 'sheetId') }}","cachedResultName":"From Store Config"},"sheetName":{"__rl":true,"mode":"name","value":"={{ nodeJson(storeConfig, 'sheetName') }}","cachedResultName":"From Store Config"},"columns":{"mappingMode":"defineBelow","value":{"CheckoutToken":"={{ $json.CheckoutToken }}","Converted":"TRUE","Status":"Converted (Order Placed)","LastUpdated":"={{ $now.toISO() }}"},"schema":[{"id":"CheckoutToken","displayName":"CheckoutToken","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":true},{"id":"Email","displayName":"Email","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"CustomerName","displayName":"CustomerName","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Status","displayName":"Status","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"LastUpdated","displayName":"LastUpdated","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"RecoveryUrl","displayName":"RecoveryUrl","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"Converted","displayName":"Converted","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false},{"id":"AbandonReason","displayName":"AbandonReason","required":false,"defaultMatch":false,"display":true,"type":"string","canBeUsedToMatch":false}],"matchingColumns":["CheckoutToken"]},"options":[]},"id":"e303040f-404c-44d6-8fd0-b84baf9afe25","name":"Mark as Converted","type":"n8n-nodes-base.googleSheets","typeVersion":4.7,"position":[368,-288],"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":[],"id":"51af9e1f-ea0d-4194-8c58-c3b74f43b938","name":"On Any Error","type":"n8n-nodes-base.errorTrigger","typeVersion":1,"position":[-416,-560]},{"parameters":{"select":"channel","channelId":{"__rl":true,"mode":"name","value":"<__PLACEHOLDER_VALUE__e.g. ops-alerts__>","cachedResultName":"From placeholder"},"text":"={{ \"\ud83d\udea8 Abandoned Cart Recovery failed: \" + $json.execution.error.message + \" (node: \" + $json.execution.error.node.name + \")\" }}","otherOptions":[]},"id":"5935fb7e-319d-49c5-9b44-5264a16a7232","name":"Notify Ops (Slack)","type":"n8n-nodes-base.slack","typeVersion":2.5,"position":[-160,-560],"webhookId":"64eff4d2-5a69-4665-a333-d32e06cd0d5b"},{"parameters":{"content":"## \ud83d\uded2 Abandoned Cart Recovery \u2014 Professional Edition\n\nRecovers abandoned Shopify checkouts with a 3-stage sequence (1h \/ 24h \/ 48h) over Email + your choice of SMS or WhatsApp, with real purchase-confirmation checks, retry logic, and failure alerts.\n\n**Built after reviewing 6 competing templates** \u2014 keeps what worked, fixes what didn't:\n\u2705 Real conversion check before every reminder (most competitors skip this \u2014 causes customer complaints)\n\u2705 No dependency on Shopify's discontinued Checkout API\n\u2705 Retry logic + Slack alert on failure\n\u2705 Minimum cart-value filter (skip low-value carts)\n\u2705 WhatsApp or SMS \u2014 your choice, not both (avoids over-messaging)\n\nSee the numbered notes below for setup, and the separate Word guides for full credential instructions.","height":420,"width":480,"color":7},"id":"dc583a32-d856-4544-b153-9c23513d8e38","name":"Overview","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-976,-288]},{"parameters":{"content":"## 0\ufe0f\u20e3 Error Monitoring\n\nIf ANY node in this workflow fails after its retries are exhausted, **On Any Error** fires and **Notify Ops** posts to Slack immediately \u2014 so you find out before your customer does.\n\n\u26a0\ufe0f One manual step required: open this workflow's **Settings \u2192 Error Workflow** and select this same workflow from the list (self-reference). n8n needs this to route errors here.","height":300,"width":480,"color":3},"id":"793fb6a8-937d-4504-adf6-3e4960c8ecc7","name":"0\ufe0f\u20e3 Error Monitoring","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-416,-720]},{"parameters":{"content":"## 1\ufe0f\u20e3 Purchase Detection\n\nInstead of repeatedly calling Shopify's checkout API (deprecated, and needs constant token refreshing), a dedicated **Order Created** trigger watches for completed purchases and marks the matching row(s) as Converted directly in your Google Sheet \u2014 by customer email, so ALL their pending reminders stop at once.","height":300,"width":480,"color":4},"id":"c76dc06e-6731-4771-a493-2d5f767ac4f4","name":"1\ufe0f\u20e3 Purchase Detection (no polling)","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-416,48]},{"parameters":{"content":"## 2\ufe0f\u20e3 Qualify the Cart\n\nOnly proceeds if: has an email, isn't already completed, AND meets your minimum cart value (set in Store Config). Skips low-value carts so you're not spending discount budget recovering $5 orders.","height":300,"width":480,"color":5},"id":"177426e1-a757-4d15-9a91-3cf15b7c0e98","name":"2\ufe0f\u20e3 Qualify the Cart","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[272,-288]},{"parameters":{"content":"## 3\ufe0f\u20e3 The Reminder Loop (repeats 3 times: 1h \/ 24h \/ 48h)\n\nEach stage: wait \u2192 **read the actual Converted status from your Sheet** \u2192 if still abandoned, send Email (with your real discount code from Store Config) \u2192 if a phone number exists, send EITHER WhatsApp or SMS (your choice, set once in Store Config, never both) \u2192 log the outcome.\n\nAll external sends use retry logic (up to 3 tries). SMS\/WhatsApp failures don't block the sequence \u2014 Email is always the reliable fallback.","height":460,"width":1700,"color":6},"id":"b5b87c92-b215-45c1-9455-5f6f5573aa7d","name":"3\ufe0f\u20e3 The Reminder Loop (\u00d73)","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1520,-624]},{"parameters":{"content":"## \ud83e\udded How to Use This, Start to Finish\n\n**Day 1 setup (about 20 minutes, once):**\n1. Fill in the 6 fields in Store Config (see the blue Setup Guide note)\n2. Connect your 4 accounts: Shopify, SendGrid, Twilio\/WhatsApp, Google Sheets (see the separate Credentials Guide document)\n3. Create your Google Sheet with the required columns\n4. Flip the **Active** toggle, top right of this screen\n\n**After that \u2014 you don't touch anything.** This is the whole point:\n- A customer abandons a cart \u2192 they automatically enter the recovery sequence\n- A customer completes their purchase, any time \u2192 all their pending reminders stop automatically, on their own\n- Something breaks (a credential expires, an API is down) \u2192 you get a Slack message before your customer ever notices a problem\n\n**Your one \"dashboard\":** open your Google Sheet whenever you like. Every row is one abandoned cart \u2014 its current status, which reminder stage it reached, and whether it converted. No separate reporting tool needed, no logging in to check anything else.\n\n**That's it.** Set it up once, then let it run.","height":560,"width":520,"color":2},"id":"7732af97-fe2e-4b54-9ba2-9bd7608a047b","name":"\ud83e\udded How to Use This, Start to Finish","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-976,192]},{"parameters":{"content":"## \ud83c\udf81 Free Updates, Forever\n\nThis isn't a \"buy once, goes stale in 3 months\" template. E-commerce platforms change their APIs, discount tactics evolve, and this workflow will keep getting better.\n\n**What that means for you:**\n- You paid once \u2014 every future update is yours, free\n- When a new version ships, you'll get an email about it\n- Come back anytime, grab the latest version, no extra charge\n\nMost competing templates are shipped once and abandoned. This one isn't.","height":340,"width":520},"id":"7925b0e9-ea72-4320-ba80-a70cea5a636c","name":"\ud83c\udf81 Free Updates, Forever","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-976,784]}],"connections":{"Shopify - Checkout Created":{"main":[[{"node":"Store Config (edit me)","type":"main","index":0}]]},"Store Config (edit me)":{"main":[[{"node":"Extract & Validate Data","type":"main","index":0}]]},"Extract & Validate Data":{"main":[[{"node":"Has Email, Not Completed & Above Min Value?","type":"main","index":0}]]},"Has Email, Not Completed & Above Min Value?":{"main":[[{"node":"Log: Cart Abandoned (Awaiting Reminder 1)","type":"main","index":0}],[{"node":"Log: Skipped (No Email \/ Low Value \/ Already Completed)","type":"main","index":0}]]},"Log: Cart Abandoned (Awaiting Reminder 1)":{"main":[[{"node":"Wait 1 Hour","type":"main","index":0}]]},"Wait 1 Hour":{"main":[[{"node":"Read Status (Before Reminder 1)","type":"main","index":0}]]},"Read Status (Before Reminder 1)":{"main":[[{"node":"Still Abandoned? (Before Reminder 1)","type":"main","index":0}]]},"Still Abandoned? (Before Reminder 1)":{"main":[[{"node":"Email: Reminder 1 (Gentle Nudge)","type":"main","index":0}],[{"node":"Log: Converted Before Reminder 1","type":"main","index":0}]]},"Email: Reminder 1 (Gentle Nudge)":{"main":[[{"node":"Has Phone? (Reminder 1)","type":"main","index":0}]]},"Has Phone? (Reminder 1)":{"main":[[{"node":"WhatsApp or SMS? (Reminder 1)","type":"main","index":0}],[{"node":"Log: Reminder 1 Sent","type":"main","index":0}]]},"WhatsApp or SMS? (Reminder 1)":{"main":[[{"node":"WhatsApp: Gentle Reminder","type":"main","index":0}],[{"node":"SMS: Gentle Reminder","type":"main","index":0}]]},"WhatsApp: Gentle Reminder":{"main":[[{"node":"Log: Reminder 1 Sent","type":"main","index":0}]]},"Log: Reminder 1 Sent":{"main":[[{"node":"Wait 23h (reach 24h total)","type":"main","index":0}]]},"Wait 23h (reach 24h total)":{"main":[[{"node":"Read Status (Before Reminder 2)","type":"main","index":0}]]},"Read Status (Before Reminder 2)":{"main":[[{"node":"Still Abandoned? (Before Reminder 2)","type":"main","index":0}]]},"Still Abandoned? (Before Reminder 2)":{"main":[[{"node":"Still need help with your order?","type":"main","index":0}],[{"node":"Log: Converted After Reminder 1","type":"main","index":0}]]},"Still need help with your order?":{"main":[[{"node":"Has Phone? (Reminder 2)","type":"main","index":0}]]},"Has Phone? (Reminder 2)":{"main":[[{"node":"WhatsApp or SMS? (Reminder 2)","type":"main","index":0}],[{"node":"Log: Reminder 2 Sent","type":"main","index":0}]]},"WhatsApp or SMS? (Reminder 2)":{"main":[[{"node":"WhatsApp: Help Reminder","type":"main","index":0}],[{"node":"SMS: Help Reminder","type":"main","index":0}]]},"WhatsApp: Help Reminder":{"main":[[{"node":"Log: Reminder 2 Sent","type":"main","index":0}]]},"Log: Reminder 2 Sent":{"main":[[{"node":"Wait 24h (reach 48h total)","type":"main","index":0}]]},"Wait 24h (reach 48h total)":{"main":[[{"node":"Read Status (Before Reminder 3)","type":"main","index":0}]]},"Read Status (Before Reminder 3)":{"main":[[{"node":"Still Abandoned? (Before Reminder 3)","type":"main","index":0}]]},"Still Abandoned? (Before Reminder 3)":{"main":[[{"node":"Last chance - your discount is waiting","type":"main","index":0}],[{"node":"Log: Converted After Reminder 2","type":"main","index":0}]]},"Last chance - your discount is waiting":{"main":[[{"node":"Has Phone? (Reminder 3)","type":"main","index":0}]]},"Has Phone? (Reminder 3)":{"main":[[{"node":"WhatsApp or SMS? (Reminder 3)","type":"main","index":0}],[{"node":"Log: Reminder 3 Sent (Final)","type":"main","index":0}]]},"WhatsApp or SMS? (Reminder 3)":{"main":[[{"node":"WhatsApp: Final Discount Reminder","type":"main","index":0}],[{"node":"SMS: Final Discount Reminder","type":"main","index":0}]]},"WhatsApp: Final Discount Reminder":{"main":[[{"node":"Log: Reminder 3 Sent (Final)","type":"main","index":0}]]},"SMS: Final Discount Reminder":{"main":[[{"node":"Log: Reminder 3 Sent (Final)","type":"main","index":0}]]},"SMS: Help Reminder":{"main":[[{"node":"Log: Reminder 2 Sent","type":"main","index":0}]]},"SMS: Gentle Reminder":{"main":[[{"node":"Log: Reminder 1 Sent","type":"main","index":0}]]},"Shopify - Checkout Updated":{"main":[[{"node":"Store Config (edit me)","type":"main","index":0}]]},"Shopify - Order Created":{"main":[[{"node":"Extract Order Email","type":"main","index":0}]]},"Extract Order Email":{"main":[[{"node":"Find Abandoned Rows for Email","type":"main","index":0}]]},"Find Abandoned Rows for Email":{"main":[[{"node":"Mark as Converted","type":"main","index":0}]]},"On Any Error":{"main":[[{"node":"Notify Ops (Slack)","type":"main","index":0}]]}},"pinData":[],"meta":{"aiBuilderAssisted":true,"builderVariant":"mcp","instanceId":"a8610f00e1fe2a5bce768598a7e63848df427bd4d8770071107d6f6e694414de"}}

Paste into n8n via Import from Clipboard.

Scroll to Top