Playbooks · 5 min read
Grocery on WhatsApp: One Basket Should Not Cost Five Messages
Grocery is different from every other retail vertical on this channel for one reason: frequency.
A boutique customer buys twice a year. A grocery customer buys every week, sometimes twice. Over a year that is fifty or sixty transactions with one household, and every transaction generates a small pile of legitimate operational messages.
That is the opportunity and it is also the whole problem.
Count the messages in one basket
Here is what a careless implementation sends for a single order.
Order received. Order being packed. Aata is out of stock, sending the other brand. Order out for delivery. Delivery boy is five minutes away. Order delivered. Rate your experience.
Seven messages. All of them defensible individually. All of them utility — they are about an order this customer placed, which is exactly the category that lets you message outside the twenty-four-hour window using an approved template.
Now multiply by weekly. That household gets several hundred messages a year from a shop that sells them rice.
Every one of those messages is allowed. That is not the same as every one of them being wanted.
The cost model points the same way
Meta charges per conversation, by category. What a conversation costs depends on the country and the rates change, so the figure is not the point and is not something to take from a blog post. The shape is the point, and the shape is: you are billed for conversations, not for messages inside them.
Which means the design lever for a grocery business is compression. Fewer initiated conversations, more said inside each one.
- Collapse the pre-delivery states. "Order received" and "order being packed" are the same information to the customer. Send one.
- Make the substitution message do double duty. "Aata out of stock — sending the other brand, or shall we drop it? Order is out for delivery by 6." One message, one decision, one status.
- Skip the ones that add nothing. "Delivery boy is five minutes away" matters. "Order delivered" is a message about a thing the customer just physically received.
- Put feedback requests on a cadence, not on every order. Asking a weekly customer to rate you weekly is how you stop getting ratings.
Substitution is the message that earns its place
If a grocery business gets only one thing right on WhatsApp, it should be this one.
Out-of-stock substitution is where grocery orders go wrong, and it is the only routine moment where the customer genuinely has a decision to make before the van leaves. A message that says what is missing, what you propose instead, and asks for a yes or no is worth more than the other six combined.
It also has a useful side effect. The customer replies — which opens the twenty-four-hour service window from their side, and everything you need to say for the rest of that delivery can be said freely, in your own words, without templates. A conversation the customer joins is a conversation that stops being a broadcast.
What a kirana actually needs
Worth separating two very different businesses that both call themselves grocery.
A neighbourhood kirana taking orders on WhatsApp — a list arrives as a voice note or a photo of a handwritten page, someone packs it, a boy delivers it, payment on delivery. That business is running on the free WhatsApp Business app, and the app is not the Cloud API. No Meta Business account, no business verification, no templates. Quick replies, labels for who has paid, an away message for after closing. For that shop, the platform's whole apparatus solves a problem it does not have.
An online grocery with a few thousand orders a day is a different animal. The order states are generated by software, the volume makes manual messaging impossible, and the per-conversation cost is a line in a spreadsheet somebody owns. That business needs the Cloud API, and everything above about compression is written for it.
The mistake is a kirana being sold the second thing.
Two smaller grocery-specific traps
The standing order. Regulars who send the same list every week are your best customers, and they are also the ones most likely to be over-messaged, because they generate the most order events. Consider giving them fewer updates, not more — a customer who has ordered the same twelve items for two years does not need a packing notification.
Payment reminders on credit. Many neighbourhood shops run a khata. A message about an outstanding balance is about a transaction that exists, so it sits on the utility side, but it is also the message most likely to be read by someone other than the intended person. Keep it brief and keep the itemisation out of it.
The channel we actually run
PostEngage answers Instagram comments and DMs, and that is the whole of it today. Grocery is not a heavy Instagram vertical, but the local food end of it is — the reel about a new stock of Kashmiri apples, the comments asking whether you deliver to a particular pincode.
The clocks are different there in a way that suits repetitive questions. A comment stays answerable for seven days; a DM thread for twenty-four hours, restarted only when the customer writes again. Templated replies are free and unlimited, and a credit is spent only when the AI writes something new. Free tier is 100 credits with no card and packs start at ₹499, so answering "delivery karte ho?" a thousand times with a fixed reply is free.
If that end of the business is yours, grocery and local food on Instagram is the specific playbook, local business automation covers the timings-and-delivery-area tail, and cart recovery is the honest version of the abandoned-basket message.



