Physical and Digital · One consumer loop

Make every pack and every sample a measured sale.

A consumer scans a code on a pack or at a booth, verifies their number, and gets a coupon for Honest Farms products. That scan becomes a known consumer, and the eventual purchase on Amazon, Blinkit or Instamart is credited back to the exact pack or booth that started it. Built on a frugal stack, so cost grows with results.

98%
WhatsApp message open rate, at ~₹0.145 per utility message
1 in 8
Marketers connect a scan to revenue today. This system does.
+15%
Coupon redemption from QR versus traditional codes
Jul 2025
Plastic packs in India already carry a QR for compliance
The ideas

Four ideas, from a sticker today to a tracked sale tomorrow

Each one builds on the last. We can start this week with stickers on current packs, then add serialized codes at the next print run. The proven examples and data behind each idea are linked on the card.

1. On-pack QR, starting with stickers

Add a QR sticker to current packs now, with no packaging change. Move to a printed code at the next run. Plastic packs sold in India already carry a QR for EPR compliance from July 2025, so the space is on-pack regardless. We use that same square to start a consumer relationship.

Start this week

2. A unique code per pack

One serialized code per pack, not a single shared code for the whole SKU. Each scan records its time, location and product. One pack earns one reward, which stops a single code being shared to drain coupons. Pampers and Coca-Cola already run packs this way.

Next print run

3. Scan, identify, reward, track

The code carries pack id, SKU, batch and city into the landing page. Register and an OTP turn an anonymous scan into a known consumer. The coupon is tied to that consumer and that pack, so the next purchase is credited back to its source. This closes the gap most brands leave open.

Core of the system

4. Track the scanner before sign-up

On the first scan we set a first-party id in the browser and log the pack, time and approximate location. The consumer is anonymous but counted. The coupon is the reason they register, which converts that anonymous scan into a known profile we can reach again on WhatsApp.

Built in
The full cycle

One loop, two ways in

A pack in a kitchen and a booth at a mall feed the same loop. Both carry a source code, both end in an attributed sale and a consumer we can talk to again.

1

Scan

On-pack code or on-ground booth QR. The source travels with every record.

2

Land & log

Honest Farms page opens. The anonymous scan is logged with pack, time and city.

3

Register & verify

Name and mobile, confirmed by OTP. The scan becomes a known consumer.

4

Coupon issued

A unique code from the master table, tied to the consumer and the pack.

5

Redeem

On Amazon, Blinkit or Instamart, under set cart, SKU and platform rules.

6

Attribute

The sale value is credited back to the pack or booth that started it.

7

Engage

WhatsApp, SMS and email journeys, triggered by what the consumer did.

8

Repeat

The next scan or purchase reuses the same profile. The loop compounds.

Steps 1 to 4 take under a minute for the consumer. Steps 5 to 8 run on their own.

How it can be done

The build, step by step

Nothing here needs new hardware or a long IT project. Each step uses a known standard or a pay-per-use service. The references show the same approach already in use.

1
Idea 1 · On-pack QR, this week

Print QR stickers and apply them to current pack stock

Generate a dynamic QR that points to a short redirect URL we control, so the destination can change after printing with no reprint. Order sticker rolls and apply them at the warehouse or co-packer on existing stock. Over 95% of QR codes in use are dynamic for this reason.

Dynamic QRSticker rollsShort redirect URL
2
Idea 2 · Unique code per pack, next print run

Add serialized codes with variable-data printing

At the next artwork run, print a unique code per pack using variable-data printing, on the GS1 Digital Link standard so one code serves compliance, retail and consumer engagement. Each printed code maps to a row in the master table with pack id, SKU and batch. The GS1 retail move to 2D barcodes runs through 2027, so this aligns with where packs are headed anyway.

GS1 Digital LinkVariable-data printingSerialized codes
3
Idea 3 · Scan, identify, reward

Run the landing, OTP and coupon on a serverless stack

The QR opens a landing page on Cloudflare Pages. A Worker reads the pack id, SKU, batch and city from the URL, sends an OTP over WhatsApp or SMS through MSG91 or Gupshup, and on success issues a unique coupon from a pre-generated pool in the database. The coupon is tied to the consumer and the pack, ready to attribute the sale.

Cloudflare Pages + WorkersD1 / SheetsMSG91 / Gupshup OTP
4
Idea 4 · Track before sign-up

Log the scan, set a first-party id, then convert with the coupon

On the first scan the Worker writes a scan event and sets a first-party id in the browser, so an anonymous visitor is still counted with their pack, time and city. The coupon is the reason to register. After the OTP, that anonymous id becomes a known profile we can reach again on WhatsApp at about ₹0.145 per utility message. Consent is captured at registration.

First-party idScan event logWhatsApp opt-in
5
Close the loop · Attribution

Reconcile redemptions and report ROI

Each unique coupon carries its source and platform. Redemptions come back by platform feed or a periodic reconciliation upload, and the dashboard credits each sale to its pack batch or booth. ROI is attributed sales over activation cost, visible per source.

Coupon-to-source mappingReconciliation uploadLive dashboard

Same standards and services used by Coca-Cola, Pepsi and Pampers for on-pack codes, applied at a frugal scale. Start with stickers and Sheets, move to serialized codes and D1 as volume grows.

Why it holds together

The same database powers all four parts

Acquisition, conversion, engagement and attribution read and write to one master table. That shared spine is what lets a redemption point back to a pack.

Acquisition

QR plus verified registration

Every pack and booth carries its own code. The page captures the consumer, and an OTP confirms the lead before anything else.

Conversion

Coupon engine and rules

Unique codes mapped to platforms and rules, then each redemption recorded against its consumer and source.

Engagement

CRM and journeys

First-party profiles drive triggered WhatsApp, SMS and email, from non-redemption nudges to repeat-purchase prompts.

Attribution

Dashboard and reporting

Every event rolls up into leads, verification, redemption and city-wise sales, so each pack and booth carries its own number.

Frugal by design

A stack where cost follows results

No heavy CRM licence to begin. The build uses pay-per-use messaging and serverless hosting with free tiers, so a pilot costs little and the bill grows only as scans and redemptions grow.

Landing and logic

Cloudflare Pages and Workers

The QR landing page, OTP logic and coupon API run serverless. The free tier covers a pilot and scales cheaply.

Free tier, then usage-based
Database

Cloudflare D1, or Google Sheets to start

One database holds consumers, scans, coupons and redemptions. Start lean on Sheets and Apps Script, move to D1 as volume grows.

Begins at zero
OTP and messaging

WhatsApp and SMS via MSG91 or Gupshup

Pay per OTP and per message. WhatsApp utility templates run near ₹0.145 each at a 98% open rate, with SMS as fallback.

Per message, no fixed fee
Coupons and attribution

Pre-generated codes and platform mapping

Unique codes generated in bulk, mapped to Amazon, Blinkit and Instamart offers. A redemption feed or upload closes the loop on sales.

Reuses existing platform offers

In a pilot, the only real variable cost is messaging, a few paise to low single rupees per consumer per OTP and reminder cycle. Sources: AiSensy, Haptik.

Automated journeys

The right nudge at the right moment

Each journey is triggered by what the consumer did, and sent on the lowest-cost channel that works. Nothing goes to everyone.

Coupon issued, not redeemed
A day-two reminder with the code and a one-tap link to the mapped platform.
WhatsAppSMS
Coupon nearing expiry
A 48-hour nudge before the offer lapses.
WhatsApp
Coupon redeemed
A thank-you with a cross-sell into a complementary product.
WhatsAppEmail
Repeat-purchase window
A reminder timed to the category re-order cycle.
WhatsAppSMS
New product launch
A targeted note to consumers who bought adjacent products.
WhatsAppEmail
Festive and promotional
Seasonal campaigns segmented by city and past behaviour.
WhatsAppSMSEmail
Attribution

From a scan to a return-on-investment number

The dashboard turns each step into a metric, then ties redemption value back to the pack or booth that produced it.

What it tracks

  • Scans logged, by pack batch, activation and city
  • Leads generated and verified (OTP completion)
  • Coupon redemption rate
  • City-wise sales attribution
  • ROI per activation and per pack batch

How attribution closes

Each unique code carries its source and platform. When a code redeems, by platform feed or a periodic reconciliation upload, its sale value is credited back to that source. ROI is attributed sales over activation cost, visible per booth and per batch.

How we take it forward

A small, measurable first step

Prove the loop in one city before scaling. Each phase adds capability only once the last one works and is measured.

Phase 1 · Weeks 1 to 3

Pilot loop

One city, sticker QRs on packs plus a few booths. Scan, register, OTP, coupon and dashboard live on the frugal stack. Goal: prove scan to redemption end to end.

Phase 2 · Weeks 4 to 8

Journeys on

Switch on WhatsApp and SMS journeys and platform redemption mapping. Goal: lift redemption and start repeat purchases.

Phase 3 · Quarter 2

Serialize and scale

Move to printed per-pack codes and across cities. Add D1, A/B-tested offers, and ROI reporting by pack batch and booth.

See the whole loop working

Three clickable prototypes built on this plan: the consumer journey, the on-pack scan and tracking, and the dashboard that measures it.