All articles
E-commerceJune 12, 2026 6 min read

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.

WhatsApp Checkout in LATAM: What We Learned Wiring a Shopify Store to a Conversational Funnel

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:

  1. Generic floating WhatsApp button
  2. PDP button labelled "Ask about this product"
  3. PDP button labelled "Buy by WhatsApp" with product image preloaded into the first message
  4. 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:

  1. 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.
  2. 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.
  3. Get a WhatsApp Business Account and register three or four utility templates: order confirmed, payment received, shipped, delivered. Nothing else.
  4. 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.

#E-commerce#Shopify#WhatsApp#CRO#LATAM

Want a team like ours?

72Technologies builds production software for the kind of teams who actually read this blog.

Start a project