WhatsApp Checkout in LATAM: What We Learned Wiring a Shopify Store to a Conversational Funnel
We replaced a third of a Shopify store's checkout volume with a WhatsApp-driven flow. Here's the architecture, the conversion math, and the parts we'd build differently next time.

A client in Colombia asked us a question we get a lot now: why is our paid traffic converting at 0.7% on desktop checkout but our WhatsApp inbox closes at 11%? The honest answer is that in much of LATAM, the checkout page isn't the checkout — the chat is. This is what we learned wiring a real Shopify store to a WhatsApp-first funnel, and where the seams actually show.
Why WhatsApp checkout is not a gimmick in LATAM
In Brazil, Colombia, Mexico, and Argentina, WhatsApp is not an app — it's the default communication layer. Zero-rated mobile plans, social proof through voice notes, and a deep cultural distrust of entering card details on unknown sites all push buyers toward a conversation before a transaction.
We see it in the data on every store we audit in the region:
- 40 – 70% of mobile sessions touch a WhatsApp button before checkout
- Stores with a visible WhatsApp CTA on PDPs usually show a higher blended conversion rate than stores optimising the standard funnel alone
- Cash-on-delivery and bank-transfer orders, still common in the region, almost always start in chat
The trap is treating WhatsApp as a support channel bolted onto a Western funnel. It's a checkout surface. Once you accept that, the engineering decisions change.
The architecture we landed on
We tried three versions before settling. The first was a pure click-to-chat link (wa.me/...) with a pre-filled message containing the product title. Easy to ship, terrible to operate — agents had no context, no cart, no inventory check.
The second was a third-party WhatsApp widget. It worked, but it owned the conversation data, charged per session, and made it impossible to write our own routing logic.
The third version, which is what we run now, looks like this:
Shopify Storefront (Liquid or Hydrogen)
│
│ signed cart payload
▼
Edge function (Cloudflare Worker)
│
│ WhatsApp Cloud API
▼
WhatsApp Business Account
│
▼
Agent console (custom) ──► Shopify Admin API
(draft order, inventory, customer)
The storefront generates a short-lived signed token containing the cart and any discount context. The Worker validates the token, calls the WhatsApp Cloud API to open a session with a template message, and registers a webhook so subsequent messages route to our agent console. The console reads and writes to Shopify through the Admin API — draft orders, inventory reservations, customer tags.
Why we kept Shopify as the source of truth
We were tempted to let the agent console own orders and sync to Shopify later. Don't. Inventory desync between a chat-based sale and the web storefront will burn you within a week. Every confirmed chat order becomes a Shopify draft order immediately, and stock is reserved through the standard order lifecycle. The chat is the funnel; Shopify is still the system of record.
The handoff that actually converts
The single biggest CRO lever is not the chat itself — it's the handoff from product page to chat. We tested four variants on a mid-sized fashion store:
- Generic floating WhatsApp button
- PDP button labelled "Ask about this product"
- PDP button labelled "Buy by WhatsApp" with product image preloaded into the first message
- Inline option at the cart step, alongside the standard checkout button
Variant 3 outperformed the others meaningfully in our test. "Ask about" pulled tyre-kickers; "Buy by WhatsApp" pulled intent. Variant 4, at the cart step, also did well but cannibalised standard checkout for users who would have completed it anyway — which matters if your payment processor fees are lower than your agent cost per order.
The pre-filled message we use looks roughly like this:
const message = [
`Hi! I'd like to buy:`,
`• ${product.title}`,
`• Size: ${variant.option1}`,
`• Qty: ${qty}`,
``,
`Ref: ${signedCartToken}`
].join('\n');
const url = `https://wa.me/${BUSINESS_NUMBER}`
+ `?text=${encodeURIComponent(message)}`;
The signedCartToken is the part most tutorials skip. Without it, the agent has to ask the customer what they want, which destroys the whole point. With it, the agent console fetches the cart, the customer's previous orders, and any active discount the moment the conversation opens.
Templates, sessions, and the part Meta will fine you for
The WhatsApp Cloud API has two message types you need to internalise:
- Session messages: free-form, only allowed within 24 hours of the customer's last message to you
- Template messages: pre-approved, used to start or re-engage a conversation outside the session window
If you try to send an order confirmation 26 hours after the last customer message using a session message, it will fail silently or get you rate-limited. Worse, if you use the wrong template category (utility vs marketing), Meta will reclassify it and bill you differently. We've seen accounts get throttled for repeated misuse.
Our rule of thumb:
- Order confirmation, shipping update, delivery confirmation → utility templates
- Abandoned cart, restock alert, promo → marketing templates, only to opted-in numbers
- Anything within 24h of customer reply → session message, fine
Keep a small template registry in code and never send a raw template name from the UI:
export const TEMPLATES = {
orderConfirmed: { name: 'order_confirmed_v3', category: 'utility', lang: 'es' },
shippingUpdate: { name: 'shipping_update_v2', category: 'utility', lang: 'es' },
abandonedCart: { name: 'cart_recovery_v4', category: 'marketing', lang: 'es' },
} as const;
Opt-in is not optional
You need explicit, logged opt-in for marketing templates. We store the consent event (timestamp, source, IP, checkbox text shown) against the customer record in Shopify as a metafield. When Meta audits — and they do — you want to be able to produce that record per phone number.
What broke in production
A few things we did not expect:
Agents copy-pasting payment links across chats. One agent sent the wrong customer a link that was already paid; the customer paid again. We fixed it by making the agent console the only thing that can generate a payment link, scoped to the open conversation.
Voice notes as orders. Customers send voice notes describing what they want. We added Whisper-based transcription into the agent console so agents see text alongside the audio. Order accuracy on voice-note conversations went up noticeably.
The 24-hour window quietly closing. Agents would reply to a customer 25 hours later with a session message, it would fail, and they wouldn't notice. We now show a countdown timer in the console and force a template selection once the window closes.
Number reputation. Sending too many template messages too fast to cold numbers will drop your quality rating, which lowers your daily send limit. Warm up new numbers gradually and prune unengaged contacts. Treat it like email deliverability.
When this is the wrong investment
We would not build this for:
- Stores doing under roughly 300 orders/month — agent cost per order will eat the margin
- Markets where WhatsApp adoption is low or where buyers are comfortable with card checkout (most of North America, most of Western Europe)
- Catalogues with thousands of SKUs and complex configurations where chat-based selling exhausts agents
It shines when AOV is mid-to-high, the catalogue is curated, and trust is a bigger blocker than friction. Fashion, jewellery, furniture, supplements, and B2B reorders all fit. Fast-moving low-margin commodities do not.
Where we'd start
If you run a Shopify store in LATAM and you're staring at a 1% mobile conversion rate, here's the order we'd tackle it:
- Add a "Buy by WhatsApp" CTA on PDPs only, with a pre-filled message containing the product and a signed cart token. Ship it behind a feature flag and measure blended conversion for two weeks.
- Stand up a minimal agent console that reads the token, opens the Shopify cart, and lets agents create draft orders. Don't buy a SaaS yet.
- Get a WhatsApp Business Account and register three or four utility templates: order confirmed, payment received, shipped, delivered. Nothing else.
- Only after steps 1 – 3 are stable, add marketing templates, abandoned-cart recovery, and broadcast flows.
The trap everyone falls into is buying the broadcast tool first and the architecture last. The architecture is the moat. If you want a second pair of eyes on yours, our commerce engineering team does this work, and we've written more on the broader funnel question over on the blog.
Want a team like ours?
72Technologies builds production software for the kind of teams who actually read this blog.
Start a projectKeep reading

Inventory Sync Hell: Why Your Shopify Store Oversells on Black Friday (And the Architecture That Fixes It)
Overselling on peak days is rarely a Shopify bug. It's a sync architecture problem. Here's how we redesigned a multi-channel inventory pipeline to stop the bleed without rewriting the ERP.

Variant Switching Without a Full Page Reload: A Practical PDP Pattern for Shopify
Most Shopify themes still reload the PDP when a customer picks a size. Here's the pattern we use to swap variants in under 150ms without breaking SEO, analytics, or the cart.

Headless Shopify Is Not Free: A Honest Look at Hydrogen vs Liquid for Mid-Market Stores
We've shipped both Hydrogen storefronts and heavily customized Liquid themes for stores doing $5M–$50M GMV. Here's where headless actually pays for itself, and where it quietly bleeds money for two years before anyone admits it.
