AutomationFlowsE-commerce › Automated Shopify Abandoned Cart Recovery with Whatsapp Messages & Google Sheets

Automated Shopify Abandoned Cart Recovery with Whatsapp Messages & Google Sheets

BySpaGreen Creative @spagreen on n8n.io

This workflow is perfect for e-commerce store owners using Shopify who want to automatically recover abandoned carts through personalized WhatsApp messages. It's ideal for businesses looking to increase conversion rates without manual outreach efforts.

Cron / scheduled trigger★★★★☆ complexity19 nodesHTTP RequestN8N Nodes RapiwaGoogle Sheets
E-commerce Trigger: Cron / scheduled Nodes: 19 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #11129 — we link there as the canonical source.

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "hMsRsWcN09Pc6dCy",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Recover Abandoned Shopify Carts via WhatsApp Notify",
  "tags": [],
  "nodes": [
    {
      "id": "28d2c723-c020-48c9-aa50-7b76f95e4e0e",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -16,
        112
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "d11eb1c8-aa4f-4c37-948b-b8e4f9250da4",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -768,
        208
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "2471fe6d-db56-47f5-a85c-9ff4e32f30a2",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -240,
        112
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "bff9c795-7545-48c5-8566-fc1f904f41e1",
      "name": "Get customer info",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        208,
        128
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "06ad24e3-e0b2-4d5a-91b0-ba74b74aab8e",
      "name": "Get All Abandoned checkouts",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -464,
        112
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "d6b76f2a-0b9b-446b-9903-12a80108d721",
      "name": "Get Initial Abandoned Checkout",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -464,
        320
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "f4cf82ac-b4fc-468f-8421-839754ace3bf",
      "name": "Split Out1",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -240,
        320
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "99526f6c-dcfb-43aa-8e81-30aac0bc11aa",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -16,
        320
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "f0c10b02-856f-41c7-afdf-50f935e406cf",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        784,
        336
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "e0b44380-e157-4b0c-b339-757a97aff37f",
      "name": "Rapiwa (verify number)",
      "type": "n8n-nodes-rapiwa.rapiwa",
      "position": [
        592,
        336
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "fa7c7fac-5ac5-48c6-9ebf-1589d2e9e001",
      "name": "Rapiwa (sent message)",
      "type": "n8n-nodes-rapiwa.rapiwa",
      "position": [
        1008,
        208
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3750c8d9-045b-4971-af1d-38b9032eca20",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1248,
        432
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "19047f31-ec30-45af-98ee-d70a62637e0a",
      "name": "Store State of Rows in Verified & Sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1248,
        208
      ],
      "parameters": {},
      "typeVersion": 4.6
    },
    {
      "id": "23a459bd-8130-41e5-8dcc-91de90cc7820",
      "name": "Store State of Rows in Unverified & Not Sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1008,
        432
      ],
      "parameters": {},
      "typeVersion": 4.6
    },
    {
      "id": "91fa09e2-12bb-4c8b-b76a-41b3b6e5ec4a",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        208,
        336
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "35a44f9a-3699-40db-9143-382485abd4b1",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        -32
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "2c6d1b46-63fd-484e-a443-25378d6da9a7",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        -64
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "55e46e4b-99e3-48ca-8aaf-13f8969b47d9",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        320
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "cbd1cf16-37e1-44fe-9067-9c429b915122",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1664,
        -80
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e8fe19d6-73a7-4f14-affc-d40c6699ba13",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Rapiwa (sent message)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Store State of Rows in Unverified & Not Sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        []
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Get customer info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [],
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get Initial Abandoned Checkout",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get customer info": {
      "main": [
        []
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Rapiwa (verify number)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rapiwa (sent message)": {
      "main": [
        [
          {
            "node": "Store State of Rows in Verified & Sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rapiwa (verify number)": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get All Abandoned checkouts": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Initial Abandoned Checkout": {
      "main": [
        [
          {
            "node": "Split Out1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store State of Rows in Verified & Sent": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store State of Rows in Unverified & Not Sent": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow is perfect for e-commerce store owners using Shopify who want to automatically recover abandoned carts through personalized WhatsApp messages. It's ideal for businesses looking to increase conversion rates without manual outreach efforts.

Source: https://n8n.io/workflows/11129/ — original creator credit. Request a take-down →

More E-commerce workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

E-commerce

This workflow automates inventory management and predictive reordering for Shopify stores. It integrates Shopify, Google Sheets, and Slack to monitor inventory levels, calculate dynamic reorder points

Shopify, Google Sheets, Gmail +2
E-commerce

A webhook or timer triggers the workflow to automatically fetch inventory data from multiple platforms. Stock levels are compared across stores to identify discrepancies, and any inconsistencies are u

HTTP Request, Google Sheets, Gmail
E-commerce

This n8n workflow automatically identifies customers who have abandoned their carts on your Shopify store, cleans and verifies their WhatsApp numbers, and sends them personalized reminders via the Rap

HTTP Request, Google Sheets
E-commerce

E-commerce store owners and sales managers who want AI-powered insights from their Shopify data without manually crunching numbers every week.

Shopify, HTTP Request, Slack +2
E-commerce

This workflow connects directly to your WooCommerce store using the REST API to fetch all recent orders. It logs them in Google Sheets for easy tracking and visibility. Every day at a scheduled time,

HTTP Request, Google Sheets, Email Send