Promotions & marketing
Coupons, upsells, bundles, campaigns, games, referrals, charity and the safety rails.
Read the walkthrough script for this guide
- The Promotions hub. Everything that grows order value or brings customers back lives here — and every send obeys the same safety rails.
- Coupons: make WELCOME10, ten percent off above a minimum. Watch checkout: the customer types it and the REAL discount is computed on our side, never the phone's.
- Upsells: pair a drink with every burger, or offer a treat when the cart crosses a threshold. Set it once; the page does the selling.
- Bundles: pick-any-3-for-99. A bundle is a price, not a discount — the receipt prices the items AS the deal, cleanly.
- Campaigns: pick a template, fill the brackets — the composer refuses to send while an unfilled bracket remains. Choose audience and channel: WhatsApp, or free wallet-card notifications for cardholders.
- The safety rails, on one screen: weekly per-customer cap, the review queue that holds anyone matched by several campaigns for YOUR approval, and the 10-to-9 sending window.
- Games and referrals: a scratch-card after delivery, a friend-referral reward — switch on only what fits your brand. Everything routes through the same caps.
Step by step
Create a discount code (coupon)
A code your customers type at checkout — percentage or fixed amount.
- In your admin panel, open Settings → Coupons (also reachable from the Marketing hub).
- Press Add coupon and choose the code customers will type — short and shoutable, like EID25.
- Pick the kind: Percent (e.g. 10 = 10% off) or Fixed (e.g. 15 = 15.00 off), and enter the value.
- Optional guard rails: a Minimum order the cart must reach, a Max uses cap for the whole code, and Start/Expiry dates.
- Optional exclusions: tick categories or specific items the discount must NOT apply to — the discount then computes on the eligible part of the cart while the minimum still measures the whole cart.
- Save with Active on. Test it yourself: open your page, add items, type the code at checkout — the preview shows the real value before any order is placed.
Create a Buy X get Y deal
"Buy 2 shawarmas, get a drink free" — built as a coupon of kind bxgy.
- Settings → Coupons → Add coupon, and choose the Buy X get Y kind.
- Pick the buy item and how many must be in the cart (e.g. Chicken Shawarma × 2).
- Pick the get item, how many, and the discount on it — 100% makes it free; 50% half price.
- Save and test with a qualifying cart: the reward item is discounted only when the buy quantity is really in the cart, and it is never added to the cart automatically.
Put an upsell on your page
Offers that sell while you sleep. There are TEN rule types — this is the full list.
- Open Settings → Upsells and press Add rule.
- Choose the rule type: Pair a deal with an item · Category pairing · Free/discounted item over a cart amount · Combo upgrade · 2nd unit discount · Buy X get Y · Happy hour / day-part offer · First order welcome · Every Nth order reward · Checkout add-on shelf.
- Fill the type's own fields — which items trigger it, what is offered, at what price — and name the rule for your reports.
- Set how many times it may apply per order, switch it Active, and save.
- Watch it live: offers appear in the item popup, the cart, or the order summary depending on the type — and every offer is re-checked server-side at checkout.
- Tip: 'Smart pairings' on the same page learns real combinations from your own order history and surfaces them for approval.
Create a bundle (pick N for a price)
"Any 3 mezze for 49" — a price, not a discount, so receipts stay clean.
- Open Settings → Bundles and press Add bundle.
- Name it (the customer sees this), set the bundle size and the bundle price.
- Choose the eligible items the customer may pick from.
- Decide the switches: may it stack with other bundles in one cart, and do bundle orders earn loyalty stamps.
- Save with Active on. The bundle re-prices the chosen items to the deal — receipt, minimum-order rule and VAT all see the bundle price naturally.
Send a campaign (WhatsApp / wallet broadcast)
A one-off message to a chosen audience — with the safety rails always on.
- Open Settings → Promotions (the Marketing hub) and press New campaign.
- Name the campaign for your own records — e.g. "Weekend biryani push".
- Write the message, or start from a template (seasonal packs included). If a template has [bracketed] blanks, the composer refuses to send until every one is filled.
- Choose the audience from the built-in segments: Everyone who has ordered · Haven't ordered in a while · Ordered recently · Regulars (several orders in a period) · First-time customers · Tried once, never came back · Exactly N orders · Top spenders · Used a coupon recently · Close to a loyalty reward (shown when your loyalty programme is on). Building-level deals are separate — see condo plays.
- Choose the channel for the campaign: WhatsApp, the wallet card, or both. (Automatic promotions each have their own channel row on Marketing → Channels — including a 'Wallet first' option that sends one message per customer, card when they have one, WhatsApp when not; wallet messages are free and never count against the weekly cap.)
- Send. Delivery honours the rails automatically: the 10:00–21:00 local sending window (a campaign sent at 11pm goes out after 10:00 next morning), your weekly per-customer cap, the held-for-review queue when one customer matches several campaigns, and exclusion of recently-failed numbers.
- Read the results on the campaign's page afterwards: sent, delivered, failed — judge it by orders, not sends.
Set your marketing safety rails
The caps that protect your WhatsApp number and your customers' patience.
- Weekly cap: open Marketing → 'Review queue & weekly cap' (or Reports → Message history → the 'Marketing review' tab — same screen), and set 'Marketing messages per customer, per week' (default 2, maximum 14; 0 means "hold everything for my approval"). Wallet-card messages are free and never count against it.
- Review queue: the same 'Marketing review' tab. When one customer is matched by several campaigns at once — or a message type always needs approval — the batch is HELD there with the reason printed on each row; approve or discard, singly or all at once. The tab carries a number badge when something waits.
- The 10:00–21:00 window and failed-number exclusions are always on — nothing to configure, nothing to forget.
- Emergency stop: the marketing pause pulls a marketing-only brake — order confirmations run on a separate lane and are never affected.
Set up referrals
Every customer gets a share link. When somebody they introduce has their first order delivered, both sides get a coupon.
- Open Marketing → Referrals and tick 'Referral programme active' — nothing is issued, minted or sent while it is off.
- Set how many referrals one customer can be paid for per 30 days, and how long each coupon stays valid. Over the cap the friend still gets their coupon — only the referrer's half is held back.
- Under 'What the referrer gets', choose percentage-of-order (with a 'Most it can ever be' cap — issued as a fixed-amount coupon) or a fixed amount. Configure 'What the friend gets' independently.
- Read the 'Currently: …' line under each — it spells out in words what will actually be issued.
- Write the two messages ({name}/{restaurant} fill in; code and amount are appended automatically) and press Save.
- Payouts settle on the friend's first DELIVERED order — a fake introduction earns nothing, and a cancelled-then-replaced first order still pays exactly once.
- Judge it on the tiles: links issued, clicks (deduped, preview-filtered), customers introduced, payouts made, held over cap, and referred-customer revenue.
Set up a prize game
A scratch card or the wheel after delivery. The draw happens on our server — nothing on the customer's phone can influence it.
- Open Marketing → Games & extras (everything on this page ships off).
- Tick 'Scratch card after every delivered order', or 'Spin the wheel on a customer's Nth delivered order', or both — if both apply to one delivery, the spin wins; one delivery never earns two games.
- Set the Nth-order number (2–50), how long the link stays open (1–720 hours) and prize-coupon validity (1–365 days).
- Fill the six prize slots: what the customer sees, what it gives (nothing / % off / amount off / free item), and its Chance (weight).
- Weights are RELATIVE, not percentages — read the list the page prints underneath: it shows the real odds computed by the same function the draw uses. A weight of 0 can never be drawn. Keep a losing slot.
- Write the invitation ({name}, {restaurant}, {n} fill in; the link is added automatically) and Save.
- Prizes are food and discounts only, never cash; each is minted as an ordinary single-use coupon, so a prize and a tier discount never stack. Watch the five tiles: given, opened, won, spent, and what those orders actually cost you.
Common questions
How do coupons work?
Create a code with a percentage or fixed discount, an optional minimum order, usage cap and validity dates. The customer types it at checkout; our server re-prices the real cart and shows the true value before ordering. A code's use is only consumed when an order actually completes with it.
Can I do 'buy X get Y'?
Yes — buy-X-get-Y coupons count the qualifying items in the cart and discount the reward item accordingly. The reward is never force-added to the cart; the customer stays in control of what they're buying.
Can I exclude items from a discount?
Yes — coupons can exclude categories or specific items. The discount then applies to the eligible part of the cart, while any minimum-order requirement still measures the whole cart.
Why did a coupon show as invalid?
One message covers them all deliberately — expired, used up, below minimum, unknown code — so codes can't be fished. Check the coupon's dates, cap and minimum in your panel; the customer-facing message stays intentionally vague.
How do upsells work?
Rules like 'goes great with' (pair a drink with select mains), cart-threshold treats ('free dessert over 120'), checkout add-ons, and a first-order welcome offer. Offers appear in the item popup, the cart and the summary; every offer is re-validated server-side at checkout so an expired deal can never be charged wrongly.
What are bundles?
Pick-N-for-a-price deals ('any 3 mezze for 49'). A bundle is a PRICE, not a discount line: the chosen items are re-priced so the receipt, any minimum-order rule and even VAT all see the deal price naturally. A mystery item can ride inside a bundle too.
How do campaigns work?
Choose a template (seasonal packs included — Ramadan, Eid, National Day), fill in the bracketed blanks — the composer refuses to queue while any [bracket] is left unfilled — pick the audience, and send. Delivery respects every safety rail below.
What stops me from over-messaging customers?
Four rails, always on: a weekly per-customer cap you set; a review queue that HOLDS any customer matched by multiple campaigns at once until you approve or discard; a 10:00–21:00 local sending window enforced at send time; and automatic exclusion of numbers whose recent messages failed. These exist to protect your WhatsApp number as much as your customers.
How do I choose between WhatsApp and the wallet card for a promotion?
On Marketing → Channels, each kind of automatic message has its own row: tick WhatsApp, the wallet card, both — or 'Wallet first', which sends each customer exactly ONE message: to their wallet card when they hold one at send time, on WhatsApp when they don't. The shipped default is WhatsApp only; wallet messages are free, unbannable, and never count against the weekly cap. Untick everything on a row and that promotion goes completely silent. Ticking both is the safest combination (a deleted wallet card can go unnoticed); Wallet first is the cheapest that still reaches everyone — its one honest risk, stated on the page, is that a card deleted without Google telling us can swallow a message. Campaigns are the one exception: they choose their channels per send, in the composer.
What games can I run?
A scratch card or prize wheel offered after delivery — the customer plays, wins whatever you configured (a code, a free item), and prizes are minted single-use. Dine-in has its own set: scan-again perks, table streaks, a happy-table draw and a treasure hunt.
How does the referral programme work?
A customer shares their link; when the friend's first order is delivered, both sides receive the reward you configured. Rewards are minted as single-use codes and the payout settles exactly once per new customer — a cancelled first order pays nothing until a real one delivers. It ships OFF until you enable it.
What is review-for-reward?
After delivery the customer is invited to leave a Google review with a small thank-you attached. A visible policy note is built in: platforms frown on rewards conditioned on POSITIVE reviews, so the invitation rewards reviewing, not praising — keep it that way.
How does the charity round-up work?
Customers can round their total up to a cause you name. The pledge is computed on our side, itemised separately on the receipt, and correctly excluded from VAT (a donation is not a taxable sale). Totals per order are recorded so the amounts you hand over are auditable.
What are weather-based promotions?
Rules that react to real local weather — a hot-day drinks push, a rainy-day delivery nudge. Weather is checked platform-side; the resulting messages route through the standard marketing rails like everything else.
What are condo plays?
Building-level promotions for the towers you deliver to: a building deal that unlocks when enough distinct customers from one building order, and a 'condo captain' perk for the building's most frequent customer. Minimum sizes are enforced so no one's identity can be guessed from a tiny building.
What is Ramadan mode?
A seasonal mode that switches your page to your Ramadan hours automatically (driven by cached prayer times — never a live lookup during checkout), offers an iftar countdown, and can attach an iftar deal or gift. When Ramadan ends, normal hours return by themselves, everywhere at once.
What storefront nudges exist?
Complete-the-meal suggestions based on real pairing patterns, a beat-the-rush prompt in quiet windows, and a round-up rescue that suggests the cheapest item that lifts a cart over your minimum order. All display-only salesmanship — the money math stays server-side.
Can I discount automatically without codes?
Yes — member-tier discounts apply automatically for qualifying customers, and time-window item pricing exists for happy-hour-style pricing per item. Automatic percentages never stack with a typed coupon: the customer gets the better one.
What is the pacing advisor?
A gentle analysis of your sending patterns that suggests when a campaign would land better and warns when you're crowding your audience — advice, not automation; nothing sends itself.
Do promotions work on group orders?
Group orders don't accept coupons (a shared cart with one payer makes code discounts messy — this is deliberate), but participants still count for promotions and can be pitched the loyalty card at join time.
Where do I see what a promotion achieved?
The campaign and promotion views show sent/delivered/failed counts, and the dashboard's revenue view shows redemptions itemised on orders (coupon codes are stored on each order). Judge a promotion by orders, not sends.
Where do I set the weekly message cap and approve held messages?
Two doors, one screen: Marketing → 'Review queue & weekly cap', or Reports → Message history → the 'Marketing review' tab (it carries a badge when something waits). The field is 'Marketing messages per customer, per week' — default 2, maximum 14; set 0 to review every marketing message before it goes. The same screen lists each held message in full with the reason, and offers Approve & send, Don't send, Approve all and Discard all.
Do wallet-card messages count against my weekly cap?
No — the cap counts WhatsApp marketing only. Wallet-card messages are free and never counted or held, and order confirmations, delivery updates and rider details are never counted either.
Where is the abandoned-cart option?
Marketing → the 'Abandoned carts' card, under 'Bring them back' — it opens straight onto the right section. Switch it on, set the wait time and the message, and when somebody fills a cart, leaves their name and number, and does not order, a message is prepared. It is NEVER sent automatically: every abandoned-cart message waits on the Marketing review tab for your explicit approve — permanently, by design, with no setting to change that. Cart details themselves are kept three days at most, and deleted immediately if that person orders. Your Orders board also shows a live count chip — how many carts are currently sitting unfinished — which links to the same settings.
What is Beat the rush?
An automatic percentage off every order placed inside a time window you choose — for filling a quiet hour, no code typed. It ships off, and it costs margin on customers who would have ordered anyway. Both times are INCLUSIVE ('before noon' = end 11:59), judged on our server in your restaurant's own timezone, never on the customer's phone.
Who actually holds the charity money customers round up?
You do. The pledge is paid to you with the rest of the order — cash at the door or on your card machine — and the platform never receives, holds or forwards any of it; you remit it to the cause you named, and customers are told exactly that at checkout. The Games & extras page shows 'Pledged by customers' — that is what you owe the cause — and your revenue is reported with donations already removed.
