WhatsApp Commerce in LATAM and MENA: The Stack That Actually Converts
WhatsApp isn't a marketing channel in Brazil, Mexico, or the UAE — it's the storefront. Here's the architecture we use when checkout has to happen inside a chat, not on a PDP.

If your growth team is still measuring success in PDP scroll depth while your Brazilian or Saudi customers are DMing your support number asking "tem no tamanho M?" or "متوفر؟", you're already losing the sale to a competitor who replied in ninety seconds. WhatsApp isn't a top-of-funnel channel in these markets — for a meaningful slice of buyers, it is the funnel. The question isn't whether to support it; it's how to wire it up without turning your ops team into a 24/7 call centre.
We've shipped WhatsApp-first commerce flows for brands in São Paulo, Mexico City, Riyadh, and Dubai, and the architecture that survives contact with real shoppers looks very different from the demos Meta shows on stage. Here's what we actually build.
Why WhatsApp Beats the Storefront in These Markets
Three things stack up in LATAM and MENA that don't apply in, say, Germany or the US:
- Trust deficit on web checkouts. Card fraud history, unfamiliar brands, and a strong preference for talking to a human before paying. A chat thread feels safer than a Stripe modal.
- Payment fragmentation. Pix in Brazil, OXXO and SPEI in Mexico, Mada and Tabby/Tamara in the Gulf. Shoppers want to confirm "do you accept X?" before committing. WhatsApp makes that one message.
- Mobile-only behaviour with patchy connectivity. A 4MB PDP with hero video is a tax. A chat thread loads on 3G.
When we A/B'd a classic Shopify checkout against a WhatsApp-assisted checkout for a Mexican apparel brand last year, the chat path closed a meaningfully higher share of high-AOV orders. We won't quote a hard percentage — sample size and category bias matter — but it was large enough that the client killed the "chat with us" widget and replaced it with a WhatsApp CTA on every PDP within a sprint.
The Core Stack
There's no single product that does this well end-to-end in 2026. You're integrating four layers:
- Messaging layer: WhatsApp Business Platform (Cloud API) — direct from Meta, or via a BSP like Twilio, 360dialog, or Gupshup.
- Conversation orchestration: your bot/agent runtime. This is where intent detection, catalog lookup, and human handoff live.
- Commerce backend: Shopify, WooCommerce, or your custom OMS. The source of truth for inventory, pricing, and orders.
- Payments: a hosted checkout link (Stripe, Mercado Pago, Tap, HyperPay) or native WhatsApp Pay where available.
The mistake we see most often: teams pick a BSP first and discover six weeks in that its bot builder can't call their Shopify catalog without a brittle Zapier chain. Pick the orchestration layer first, then the BSP.
Cloud API vs BSP: a quick honest take
Go direct with Cloud API if you have engineering bandwidth and your volume is under a few hundred thousand conversations a month. You save the per-message markup, and you own the webhook pipeline.
Go with a BSP if you need a pre-approved template library, a shared inbox for human agents, or you're launching in multiple countries with different compliance footprints. The markup buys you time.
Catalog Sync: The Boring Part That Breaks Everything
Meta's product catalog (the one that powers product messages and the in-chat shopping experience) is a separate object from your Shopify or Woo catalog. You have to sync it, and the sync is where most projects rot.
A few hard-won rules:
- Sync on webhook, not cron. When a variant goes out of stock on Shopify, you have minutes — not hours — before someone gets sent a product card for an unavailable SKU.
- Don't sync your full catalog. Sync the top 200–500 SKUs by velocity. WhatsApp's UX falls apart with thousands of items, and Meta's review process punishes bloated catalogs.
- Mirror identifiers. Store the Meta
retailer_idagainst your Shopify variant ID in your own database. When the inevitable reconciliation bug happens, you'll need both sides.
A minimal sync worker, conceptually:
// Triggered by Shopify products/update webhook
async function syncVariantToMeta(variant: ShopifyVariant) {
if (!isInTop500(variant.product_id)) return;
const payload = {
retailer_id: variant.id.toString(),
name: variant.title,
price: Math.round(variant.price * 100),
currency: variant.currency,
availability: variant.inventory_quantity > 0 ? 'in stock' : 'out of stock',
image_url: variant.image?.src,
url: `https://shop.example.com/products/${variant.handle}`,
};
await metaCatalogApi.upsert(CATALOG_ID, payload);
await db.variantMapping.upsert({
shopifyId: variant.id,
metaRetailerId: variant.id.toString(),
lastSyncedAt: new Date(),
});
}
Queue it, retry it, and log every failure to a dashboard your ops team actually checks.
Designing the Conversation Flow
The template that converts, across every market we've launched in, looks roughly like this:
- Customer messages from a CTA (PDP button, Instagram ad, QR code in physical store).
- Bot acknowledges in under two seconds with a context-aware greeting ("saw you were looking at the linen shirt — want to see sizes?").
- Bot sends a product list message with 3–5 relevant SKUs.
- Customer picks one; bot confirms size/colour, total, and shipping ETA in plain text.
- Bot sends a hosted payment link OR offers cash-on-delivery / Pix / OXXO voucher.
- On payment webhook, bot sends order confirmation and tracking link.
Two things to get right:
Hand off to humans before they ask
If the customer types anything that doesn't match an intent in two consecutive turns, route to a human. Don't make them say "agent." The cost of a misrouted bot conversation is a lost order; the cost of a human picking up a clear question is thirty seconds.
Templates vs session messages
WhatsApp charges per conversation (a 24-hour window), and you can only initiate one with an approved template. Design your template library before you build the bot. Common ones you'll need approved: abandoned-cart recovery, back-in-stock, shipping update, review request. Get them submitted week one — approvals can take days, and rejections compound.
Payment Handoff Without Losing the Thread
Native WhatsApp Pay exists in some markets (India, Brazil for some merchants) but coverage is uneven. The reliable pattern is a hosted checkout link with the cart pre-filled.
For Shopify, the cleanest way is generating a Draft Order via Admin API, then sending the invoice_url. The customer pays through standard Shopify checkout — same fraud rules, same payment methods, same tax logic — and your bot listens on the orders/paid webhook to close the loop.
const draft = await shopify.draftOrder.create({
line_items: [{ variant_id: selectedVariant, quantity: 1 }],
customer: { phone: waPhoneNumber },
note: `WA conversation ${conversationId}`,
tags: 'whatsapp-commerce',
});
await wa.sendText(waPhoneNumber,
`All set. Pay here: ${draft.invoice_url}\nLink expires in 24h.`);
Tag the order. You'll want to report on WhatsApp-attributed revenue separately, and your finance team will thank you when they're reconciling channel performance.
What Actually Goes Wrong in Production
A few patterns we keep seeing:
- Template rejections at scale. Meta's review is stricter than the docs suggest. Avoid promotional language in utility templates, and never put a URL shortener in a template body.
- The 24-hour window trap. Agents reply at hour 25 and suddenly you owe a template fee, or the message silently fails. Build a timer into your agent console.
- Phone number churn. In LATAM especially, customers change SIMs. Don't treat the WhatsApp number as a stable customer ID — link to email or a loyalty ID where you can.
- Compliance. Saudi Arabia and the UAE have specific consent requirements for marketing messages. Bake opt-in capture into the first conversation and store the timestamp.
Where We'd Start
If you're a Shopify brand doing meaningful volume in Brazil, Mexico, Colombia, the UAE, or Saudi, here's the order we'd ship in:
- Week 1–2: WhatsApp Business Platform account, top 200 SKUs synced to Meta catalog, one human agent on the official WhatsApp Business app. No bot yet. Measure inbound volume and intent distribution.
- Week 3–4: Build the draft-order checkout link flow. Add a WhatsApp CTA to PDPs. Keep humans answering.
- Week 5–8: Automate the top three intents you actually saw — usually size availability, shipping cost, and order status. Leave everything else to humans.
- Quarter 2: Add proactive flows — abandoned cart, back-in-stock — with approved templates.
Don't start with a full conversational AI agent. Start with humans, instrument everything they do, and automate what you've proven matters. If you want a hand mapping this against your stack, our e-commerce engineering team does exactly this work.
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 Between Shopify and Your ERP: Why It Breaks and How to Design It Right
Every mid-market Shopify store eventually oversells or ghost-stocks its way into a support crisis. Here's how to design an inventory sync that survives Black Friday, backorders, and a flaky ERP.
Product Page LCP on Shopify: Getting Under 2.0s Without Ripping Out Your Theme
A tactical breakdown of how to cut Largest Contentful Paint on Shopify product pages to under 2.0s — without going headless, rebuilding your theme, or fighting every app you have installed.
WhatsApp Checkout in LATAM and MENA: What Actually Converts
Conversational commerce isn't a novelty in Brazil, Mexico, Egypt or the UAE — it's the default. Here's what we've learned wiring WhatsApp into real Shopify and headless stacks, and where the funnel quietly breaks.
