Bean Bae — Campaign Proposal
A Bean Bae cappuccino with latte art
Bean Bae Coffee logo
Social campaign proposal
Prepared for Emma · Sunningdale, Cape Town

Social spend you can actually measure

Spend on Instagram. Track every rand to a paying customer.

A voucher on every post turns social from a cost you hope works into a campaign you can measure — every walk-in it drives, what each one cost, and what they're worth long after the free cup.

Scroll to see how it converts
01

How a rand becomes a tracked customer

Money goes in as ad spend; a countable, attributed customer comes out. The thread connecting the two is one thing — a unique coupon code. Drag it along the track to walk each step, or let it flow on its own.

01 · Spend
Budget on a post
You put a daily budget behind an Instagram post — say R60 a day boosting the barista reel.
R60/day → this post
02 · Code
A unique code per claim
Everyone who claims the offer gets their own code — stamped with the post that minted it.
BAE·REEL·7F3K
03 · Redeem
Scanned at the till
The customer shows the code in-store. Staff scan it once on the Yoco or a phone.
BAE·REEL·7F3K
04 · Attribute
Conversion, logged
The code resolves back to its post and the rand that paid for it. A counted walk-in.
+1 walk-in
drag me ↔R60
Step 1 of 4

You put R60 of ad spend behind one Instagram post — say, boosting the barista reel. That is the only money in play, and we know exactly which post it is backing.

Everyone who taps the offer gets their own code — BAE·REEL·7F3K — stamped with the post that minted it. No two codes are alike, so every claim traces back to its source.

The customer walks in and shows the code. One scan at the till — on the Yoco or any staff phone — marks it redeemed. That scan is the hard proof a real person walked in because of the post.

The code resolves back to its post and the R60 that paid for it: one counted walk-in, tied to the exact rand that produced it. Spend in, attributed customer out.

The coupon code is the tracking key
BAE·REEL·7F3K post: Barista reel spend behind it: R60 claimed: 12 Jun redeemed: 14 Jun, 14:22

One code carries all of this. It's what lets every walk-in be traced to the exact post — and the exact rand — that produced it. No code, no proof.

01 · Spend — made real
The post your daily R60 puts behind the barista reel

This is the boosted post from step 01 — the barista reel your daily R60 runs behind — and the personal code it hands each person who taps.

beanbae_coffeeSponsored ···
First cup on us
Claim your code
128 likes
beanbae_coffee Your first flat white is on us. Tap Claim your code, show it at the counter in Sunningdale, and the next round's on you. #capetowncoffee #sunningdale #flatwhite
2 hours ago
tap the post your own code
Bean Bae · your voucher BAE·REEL·7F3K Show at the till. Redeems once.

The first time they tap, one code is minted for them and stamped with this post — tap again and the same code comes back. When it's scanned at the counter it redeems once, and that walk-in traces straight back to the R60 that paid for the post — no guesswork.

  • One code per person. They claim with a phone number, so tapping again returns the same code — never a fresh one.
  • Single-use at the till. The first scan redeems it; any later scan shows the time it was already used.
  • The contact list is Bean Bae's. Every claim adds a real phone number to a list Emma owns — not one Instagram rents back to her.
02

The proof: a voucher scanned at the till

Reach, likes and profile taps only prove attention. The redemption at the counter is the only thing that proves a paying body walked in — and it costs Bean Bae nothing to run.

A staff member opens a web page on their own phone and points the camera at the customer's voucher QR. It instantly returns one of three answers:

ValidFirst cup's on the house. Counted as a conversion.
Already usedShows the exact time it was first redeemed. No double-dipping.
ExpiredOutside the campaign window. Politely declined.
No app to downloadNo scanner to buy Nothing new to installRuns on the setup Bean Bae already has
03

It runs on the till Bean Bae already has

Bean Bae takes payments on Yoco — so the free cup gets redeemed on the exact machine that rings up every sale. That turns the voucher from a marketing gesture into hard sales data.

Day one · no setup

Rung up on the Yoco POS

Staff redeem the voucher as a "First Cup on Us" item in the Yoco app. Every free cup then lands in Yoco's own sales reports — counted on the till, not on a notepad.

A Bean Bae iced raspberry matcha latte

To be clear: Yoco doesn't run vouchers itself — Mila issues and tracks the codes. Yoco supplies the payment truth underneath them, so the conversions you count are real sales, not guesses.

04

Your campaign, in numbers

Pick a monthly budget and the model shows what it buys — impressions, clicks, and tracked walk-ins — costed on real South African ad rates. Then the live view Emma watches: spend in, customers out, and the price of each.

Entry test
R38/day
~R1 150 / month
  • ~21 000 impressions
  • ~190 link clicks
  • ~14 tracked walk-ins
~R82 per tracked walk-in
Recommended
Optimised
R60/day
~R1 800 / month
  • ~33 000 impressions
  • ~300 link clicks
  • ~23 tracked walk-ins
~R78 per tracked walk-in
Growth
R100/day
~R3 000 / month
  • ~54 000 impressions
  • ~500 link clicks
  • ~38 tracked walk-ins
~R79 per tracked walk-in
CPM ~R55 CPC ~R6 claim a code 30% redeem in-store 25% become regulars 25%

Modelled on published South African Meta ad benchmarks (Jul 2025–mid 2026), where ad costs run roughly 80% below global. Every rate here is deliberately conservative — each is replaced by Bean Bae's real number the moment the campaign is live.

The recommended tier, step by step

These are paid impressions served to a local audience around Sunningdale — not Bean Bae's 632 followers. The daily R60 compounds over the month, so ~33 000 is a month of delivery — not one post's reach.

Saw the posts~33 000
0 impressions over the month
Tapped the offer~300
0 link clicks
Claimed a code~90
0 codes claimed
Walked in & redeemed~23
0 tracked walk-ins
Came back, paid~6
0 new regulars
LIVE · CAMPAIGN PERFORMANCE Illustrative · recommended tier, one month
0
tracked walk-ins from the campaign

Each one is a redeemed voucher — a real customer who came in because of a post.

R1 800
monthly ad spend
~R78
cost per tracked walk-in
~6
became repeat regulars
Which posts converted
Barista reel8
"Your usual" story6
Signature drink4
Launch-week post3
Weekend teaser2
VoucherFrom postStatus
BAE-7F3KBarista reelRedeemed
BAE-2Q9M"Your usual"Redeemed
BAE-J8XPSignature drinkValid
BAE-C4L1Weekend teaserExpired

Figures are an illustrative example on the recommended tier, not real results — they show the shape of the reporting: spend, conversions, cost each, and the post that earned them.

05

What that new customer is worth

About R78 gets someone through the door once; roughly a quarter come back and stick. Here's how that turns into lifetime value — and which numbers are counted versus a projected dial.

Counted — voucher redemptions & Yoco sales Dial — a conservative projection we set, tightened as data arrives
Step 1 — how many walk-ins become regulars
0
tracked walk-ins / month
×
25%
come back & stick
=
0
new regulars / month
Cost: ~R1 800 ad spend + the redeemed offers ÷ ~6 regulars = ~R350 to create one lasting regular.
Step 2 — what one regular is worth in year one
R50
average ticket (placeholder — Bean Bae's Yoco number)
×
2×/mo
visit frequency (dial)
×
12
months held (dial)
=
~R0
year-one value
~R1 200 value ÷ ~R350 cost =
~3.4×
year-one return on every rand spent to create a regular — before they tell a friend, and before year two
Sustained: hold the recommended tier for a year and even ~6 new regulars a month compounds to roughly 70 regulars — about R85 000 in year-one revenue from them alone, on ~R21 600 of ad spend.

The coral inputs are the model's only estimates — deliberately conservative (a twice-a-month regular, not a daily one). The R50 ticket is a placeholder — the single number to confirm with Emma, and it comes straight from Yoco. Figures are year-one revenue, not profit.

06

What Mila does

Meet Mila

Mila is the engine that runs the whole loop and hands Emma the numbers — no agency retainer, no spreadsheets, no manual tallying at the till.

A

Runs the posts

Drafts and schedules the Instagram content in Bean Bae's own voice, each one carrying a voucher.

B

Issues the vouchers

Generates a unique, single-use code per claim and ties it to the post it came from.

C

Tracks every redemption

Logs each scan at the counter — valid, used or expired — automatically.

D

Reports spend vs. conversion

Turns it into the live number Emma cares about: what she spent, the real Yoco sales it brought in, cost each.

Why now · the timing

Vida opening in the centre is the trigger, not the pitch.

The measurement engine above earns its keep every month regardless of who's next door. But with Vida opening on the doorstep, there's fresh attention on coffee in Sunningdale right now — the ideal moment to prove Bean Bae's social spend converts, and to capture the customers deciding where their new regular spot will be.

Vida: ~400 stores, 8 countriesLoyalty locked in an appAlready runs Table View & Blaauwberg

Stop guessing whether social works. Start counting what it brings in.

A month from now, Emma isn't wondering if the posts landed. She's looking at exactly how many customers her spend converted, what each one cost — and what they'll be worth all year.

Bean Bae Coffee · Sunningdale, Cape Town  —  Measurable social campaign, run by Mila