5. Measurement & Compliance
5.1 The funnel we measure
These are the events the product actually records, so every campaign claim can be checked against reality:
| # | Event | Recorded as | Notes |
|---|---|---|---|
| 1 | Account created | User | Signup |
| 2 | Account verified (email or SMS) | emailVerified + verifiedAt | Verified accounts is the honest signup number |
| 3 | Receipt uploaded | Receipt created | The activation metric |
| 4 | Line items captured | Receipt line items | Data quality layer (see below) |
| 5 | Repeat uploads / streak | Points, streaks | Habit |
| 6 | Premium activated | Subscription (active, plan, expiry) | Revenue |
| 7 | Referral credited | Referrer +25 points on referral's first upload | Virality, measured on the right event |
| 8 | Credit redeemed | Upload credit redemption | Giveaway effectiveness |
| 9 | Nudge email sent | nudge.sent in the audit log | Lifecycle marketing performance |
| 10 | Receipt data quality | OCR Quality dashboard | Ensures the product is delivering before we scale spend |
Report activation, not signups. A verified account with no receipt is a lead, not a customer.
5.2 UTM convention (mandatory)
Every link the agency posts uses this scheme. No exceptions — untagged links are invisible in reporting.
https://app.breadwinner.deals/?utm_source=<platform>&utm_medium=<type>&utm_campaign=<campaign>&utm_content=<asset>
| Parameter | Allowed values | Example |
|---|---|---|
utm_source | facebook, instagram, tiktok, youtube, blog, newsletter, whatsapp, creator-<handle> | tiktok |
utm_medium | paid-social, organic-social, email, referral, influencer, qr, print | paid-social |
utm_campaign | launch, basket-watch-sep, referral-push, creator-q4 | launch |
utm_content | asset id — e.g. video-guess-price-01, carousel-pricing | video-guess-price-01 |
Rules
- Lowercase only, hyphens not underscores, no spaces.
- One campaign name per initiative — don't invent new ones mid-flight.
- For creators use
utm_source=creator-<handle>&utm_medium=influencerso activations can
be split by creator.
- For QR flyers use
utm_source=qr&utm_medium=print&utm_content=<store-or-city>.
5.3 Attribution: what we can and can't know
Breadwinner is a web app, not a store app. There is no mobile attribution SDK, so be honest about the limits:
We can do: platform pixel conversions (view, click, signup), UTM-tagged traffic, per-creator codes and links, referral codes, and a "how did you hear about us?" field at signup if we add one.
We cannot do: perfectly de-duplicate multi-touch journeys, or attribute offline word of mouth. Expect the channel numbers to sum to more than reality, and treat each channel's relative performance as the signal.
Recommendation: add a single optional question at signup — "Where did you hear about Breadwinner?" — for a self-reported attribution baseline to triangulate against pixels. Small build, high value. Decision needed.
5.4 KPIs
Set targets with Breadwinner in week 1 — they own the business numbers. The shape of the scorecard:
| Level | Metric | Why |
|---|---|---|
| North star | Verified users → first receipt upload (%) | The activation rate. Everything else is upstream or downstream of it |
| Acquisition | Reach, CPC, cost per verified signup | Efficiency of spend |
| Activation | Median hours from verification → first upload | Speed to value |
| Habit | % of uploaders who upload a 2nd time; average streak | Habit is what makes revenue real |
| Referral | Signups per referrer; referral → first upload | Virality that actually activates |
| Revenue | Active Premium, free → Premium rate, MRR | Business health |
| Quality | Line-item capture rate; items matching the total | Never scale spend into broken capture — check the OCR Quality dashboard weekly |
Guard-rail metric: if line-item capture rate drops while spend increases, pause paid acquisition and tell Breadwinner. It means the product isn't delivering the promise the ads make.
5.5 Reporting rhythm
Weekly (one page, every Monday): activation rate and trend · spend and cost per verified signup by channel · top three creatives and bottom three · experiments running and their read-outs · what we're killing and doubling.
Monthly: funnel cohort view (did last month's signups go on to upload?) · referral performance · organic search landing pages · Basket Watch performance · Premium conversion from the limit moment.
Keep one shared log of decisions so agency and client work from the same facts.
5.6 Compliance & claim discipline
Claims that require sign-off before publishing
| Claim type | Status |
|---|---|
| "Average household spends P3,000+ a month on groceries" | ⚠️ Unverified. Either finance signs it off with a source, or it doesn't go out |
| "Users save P100+ a month" | ⚠️ Unverified. We should earn this: measure real overpayment from platform data and publish that instead |
| "Cheapest supermarket in Botswana" | ❌ Never. Comparisons must be about a specified basket, this month, with a stated method |
| "Save up to X%" | ⚠️ Only from measured data, with the sample and period stated |
| "Bank-level security" / absolute privacy claims | ❌ Never. Describe what's true: users control separate permissions |
| Any health, credit or investment implication | ❌ Never. This is not a financial service |
The better play: every number we publish comes from our own measured data — sample size, period and method stated. That's defensible, ownable and impossible for a competitor to copy.
Data protection
Botswana's Data Protection Act 18 of 2024 applies to organisations processing personal data in Botswana, with explicit consent required for sensitive categories and duties of transparency and accountability (DLA Piper data protection portal, Data Protection Act 18 of 2024 overview, practitioner summary).
Practical rules for the campaign — all of which the product already supports:
- Consent flags are granular and must be respected. Users separately control: data
use, WhatsApp contact, anonymised use, and market-wide insight participation. Only contact users through channels they've permitted — never treat a signup as blanket marketing consent.
- No customer lists uploaded to ad platforms without a lawful basis and the client's
explicit written approval. Custom/lookalike audiences built from user emails need a documented consent basis.
- No personal data in creative. Blur names, phone numbers and card fragments on any
real receipt shown in content. Never show a user's basket without written permission.
- Publish only aggregates, never individual baskets, and always state the sample
size in Basket Watch.
- Honour opt-outs immediately across all channels, including WhatsApp.
- Ask counsel to confirm specifics (registration duties, retention, cross-border
transfer) before launch — this document is practical guidance, not legal advice.
Platform ad policy pitfalls
- No unrealistic earnings promises ("make money fast").
- No implication of a guarantee of savings on any individual's basket.
- Ensure the landing page delivers what the ad promises — the product is free to try,
which is the strongest thing we can say.
Content rights
- Testimonials and user quotes need written permission — including a screenshot of a
user's dashboard or a named saving.
- Creator contracts must cover usage rights for paid amplification and reposting.
- Store names: naming Choppies, SPAR, Pick n Pay, Sefalana or Checkers factually is
fine (and useful); never in a defamatory or disparaging way. Comparisons are neutral and measured.
5.7 Do-not-publish list
- ❌ Any savings or price figure not measured by us or signed off by the client
- ❌ Any claim that we move, hold or protect money
- ❌ Screenshots containing personal data of a real user without written consent
- ❌ "Download our app" (it's a website — say "open it in your browser")
- ❌ Nomination of a "best" or "worst" retailer as a brand position
- ❌ Comparisons to named competitors' products
- ❌ Predictions dressed as facts about inflation or the economy