Shopify + WhatsApp: recover abandoned carts fast
Abandoned carts hurt, but the follow-up is what really drains you. You open Shopify, copy a name, hunt for a phone number, write a message, paste a link, then wonder if the number even works on WhatsApp.
This Shopify WhatsApp recovery workflow hits store owners first. But growth marketers and small e-commerce teams feel it too, because manual outreach never scales and it’s easy to miss the best recovery window.
This automation checks abandoned checkouts on a schedule, verifies the phone number, sends a personalized WhatsApp message with a recovery link (and a discount), then logs everything in Google Sheets so you can see what’s working.
The Problem: Abandoned carts don’t recover themselves
Most stores don’t lose the sale because the customer “wasn’t interested.” They lose it because nobody followed up quickly, or the follow-up felt generic, or it went to the wrong place. And if you’re trying to do this manually, you end up juggling Shopify screens, messy contact info, and last-minute discount logic while orders keep coming in. The worst part is the mental load. You never feel caught up, and you can’t tell which messages actually drove revenue because there’s no clean audit trail.
It adds up fast. Here’s where it breaks down.
- You lose about 10 minutes per cart just assembling the basics (name, items, link, offer).
- Some “phone numbers” aren’t even on WhatsApp, so you waste time sending messages that never deliver.
- Without consistent logging, you can’t answer simple questions like “Which discount code recovered the most carts last week?”
- When the volume spikes, the outreach stops, which means your recovery process fails right when you need it most.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Shopify + WhatsApp: recover abandoned carts fast
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Initial Abandoned Checkout"]
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out1", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items1", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n9@{ icon: "mdi:web", form: "rounded", label: "Rapiwa (verify number)", pos: "b", h: 48 }
n10@{ icon: "mdi:web", form: "rounded", label: "Rapiwa (sent message)", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Store State of Rows in Verif..", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Store State of Rows in Unver..", pos: "b", h: 48 }
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code in JavaScript"]
n8 --> n10
n8 --> n13
n6 --> n7
n7 --> n14
n1 --> n5
n14 --> n9
n10 --> n12
n9 --> n8
n5 --> n6
n12 --> n11
n13 --> n11
end
subgraph sg1["Flow 2"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get customer info"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get All Abandoned checkouts"]
n2 --> n0
n0 --> n3
n4 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n1 trigger
class n8 decision
class n12,n13 database
class n5,n9,n10,n3,n4 api
class n14 code
classDef customIcon fill:none,stroke:none
class n5,n14,n3,n4 customIcon
The Solution: Scheduled cart checks + verified WhatsApp follow-ups
This workflow runs automatically on a schedule and pulls abandoned checkout data from Shopify (using the Admin APIs). It expands the results into individual carts, batches them so you don’t overload anything, and then fetches the customer details you actually need for outreach. Next, it formats a personalized WhatsApp message that includes a direct recovery link and a discount code (the workflow example uses REOXXER5 for 5% off). Before it sends anything, it verifies the phone number is registered on WhatsApp via Rapiwa, which prevents a lot of pointless sends. Finally, it logs each attempt to Google Sheets, splitting verified sends from unverified holds so you can track outcomes without guesswork.
The workflow starts with a scheduled trigger, then Shopify data collection and cleanup. After that, Rapiwa handles the WhatsApp number check and message dispatch. Google Sheets becomes your running “recovery ledger,” and the built-in delay helps keep the process stable when you’re sending a batch.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get about 20 abandoned carts a week. Manually, even a “quick” WhatsApp follow-up takes maybe 10 minutes per cart (find details, write the message, paste the link, log it somewhere), which is roughly 3 hours of repetitive work. With this workflow, you spend about 10 minutes up front setting your message and discount code, and the scheduled run does the rest while you’re doing real work. The sends and “not-sent” cases land in Google Sheets automatically, so weekly review becomes a simple scan instead of a detective story.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Shopify Admin API access to read abandoned checkouts.
- Rapiwa (WhatsApp API) to verify numbers and send messages.
- Google Sheets to log verified and unverified outreach.
Skill level: Intermediate. You’ll connect a few accounts, paste API credentials, and edit message text and sheet columns.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled run checks Shopify. The workflow starts on a timer, then pulls abandoned checkout data from Shopify so you’re always following up on recent carts, not last week’s leftovers.
Carts are expanded and processed in batches. n8n splits the list into individual carts and runs them in controlled chunks, which keeps API calls reliable when you have a lot of abandonments.
Customer details are fetched and transformed. A short code step formats the customer name, phone, recovery link, and discount message into something you can send without hand-editing every line.
WhatsApp is verified, then the message is sent and logged. Rapiwa checks if the phone number is on WhatsApp, sends the message if it is, and Google Sheets records “sent” vs “not-sent” so you can review outcomes later.
You can easily modify the message template to match your brand voice based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Set the workflow cadence so abandoned carts are checked on a reliable schedule.
- Add and open Scheduled Run Trigger.
- Define the schedule settings in Scheduled Run Trigger to match your recovery cadence (daily/hourly as needed).
- Ensure Scheduled Run Trigger connects to Fetch First Abandoned Cart as the next step in the flow.
Step 2: Connect Primary Data Sources
These nodes retrieve abandoned checkout data and client details used for WhatsApp notifications.
- Open Fetch First Abandoned Cart and configure the request URL, method, and headers for your cart platform.
- Open Utility: Retrieve Abandoned Checkouts and configure the endpoint that returns the complete set of abandoned carts.
- Open Utility: Fetch Client Details to fetch customer contact details per cart item.
- Credential Required: Connect your HTTP Request credentials in Fetch First Abandoned Cart, Utility: Retrieve Abandoned Checkouts, and Utility: Fetch Client Details.
Step 3: Set Up Item Expansion and Batching
These utility nodes expand arrays and process records in controlled batches.
- Confirm Fetch First Abandoned Cart flows into Expand Cart Items.
- Ensure Expand Cart Items outputs to Batch Cart Records to process carts in batches.
- Verify Utility: Retrieve Abandoned Checkouts outputs to Utility: Expand Items List and then to Utility: Batch Through Records.
- Set batch size in Batch Cart Records and Utility: Batch Through Records if your API rate limits require it.
Step 4: Set Up Processing and Validation
Transform cart data and validate WhatsApp numbers before sending notifications.
- Open Custom JS Transform and add JavaScript logic to normalize cart/customer fields for WhatsApp messaging.
- Ensure Custom JS Transform outputs to Validate WhatsApp Number.
- In Validate WhatsApp Number, configure the validation parameters for your WhatsApp provider.
- Credential Required: Connect your rapiwa credentials in Validate WhatsApp Number.
Step 5: Configure Routing and Messaging
Use conditional logic to send messages to verified numbers and route unverified cases for holding.
- Open Conditional Branch and set the rule that determines whether the number is verified or not.
- Verify the true path of Conditional Branch connects to Dispatch WhatsApp Notice.
- Verify the false path of Conditional Branch connects to Log Unverified Holds.
- Configure Dispatch WhatsApp Notice with your message template and recipient mapping.
- Credential Required: Connect your rapiwa credentials in Dispatch WhatsApp Notice.
Step 6: Configure Logging and Wait Handling
Log verified and unverified cases to Google Sheets, then hold execution.
- Open Log Verified Sends and map fields for successful sends.
- Open Log Unverified Holds and map fields for unverified numbers.
- Ensure both Log Verified Sends and Log Unverified Holds connect to Delay Hold.
- Credential Required: Connect your Google Sheets credentials in Log Verified Sends and Log Unverified Holds.
Step 7: Test and Activate Your Workflow
Validate end-to-end behavior before enabling the schedule.
- Manually execute Scheduled Run Trigger to simulate a scheduled run.
- Confirm data flows from Fetch First Abandoned Cart → Expand Cart Items → Batch Cart Records → Custom JS Transform.
- Verify successful validation routes through Validate WhatsApp Number → Conditional Branch → Dispatch WhatsApp Notice → Log Verified Sends.
- Verify unverified numbers route to Log Unverified Holds and then to Delay Hold.
- Activate the workflow by toggling the Active switch once test results look correct.
Common Gotchas
- Shopify API access can fail if your token lacks checkout/customer permissions. If things break, check your Shopify app scopes and the Admin API credentials in n8n first.
- If you’re using Wait nodes or external sending, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Rapiwa templates and default messaging can feel generic. Add your brand voice early (and your store name) or you will be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your Shopify, Rapiwa, and Google Sheets accounts are ready.
No. You’ll mostly connect accounts and edit the message template and discount code.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Rapiwa WhatsApp API usage fees, which depend on how many messages you send.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Swap the discount code in the message-building step (the workflow uses REOXXER5 by default), and edit the text that gets sent in the “Dispatch WhatsApp Notice” node. You can also change the schedule trigger to follow up sooner, or add a second message after a delay for customers who still don’t convert. If you want deeper personalization, adjust the “Custom JS Transform” step to include cart items or total value in the message.
Usually it’s an expired or incorrect API credential in n8n. Update the Rapiwa credentials (the workflow expects a credential named like “Rapiwa account 2”), then re-test the “Validate WhatsApp Number” node to confirm verification works before you try sending. If it fails only on larger batches, you may be hitting rate limits, so slow the workflow down with a slightly longer wait.
On n8n Cloud Starter, you can typically run thousands of executions per month, and self-hosting removes the execution cap entirely (your server becomes the limit). In practice, this workflow handles cart lists in batches, so it can comfortably process dozens of carts per run for most small stores.
Often, yes. This workflow pulls Shopify data, expands and batches items, runs conditional logic, verifies WhatsApp registration, then logs different outcomes to Google Sheets, and that’s a lot of branching for a typical Zap. n8n is also easier to self-host, which matters when you want higher volume without paying per task. Zapier or Make can still be fine if you only want a basic “Shopify abandoned cart → send message” flow and you don’t care about verification or logging detail. If you’re on the fence, Talk to an automation expert and map it to your weekly cart volume.
Once this is running, cart recovery becomes a system instead of a daily scramble. The workflow handles the repetitive follow-up so you can focus on merchandising, ads, and the stuff that actually grows revenue.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.