Mini Sesi 4 — Promo & Loyalty Berbasis Data untuk Retail...
Mini Sesi 4 — Promo & Loyalty Berbasis Data untuk Retail/Grocery
Sesi ini memandu perancangan program promo dan loyalty yang terukur: tipe promo (price-off, percent, multi-buy, bundle, B1G1, happy hour, mix & match), aturan (conditions–benefits), prioritas & stacking, penjadwalan & segmentasi, hingga anti-fraud. Disertai template CSV aturan promo & kupon, desain poin loyalty & tier, contoh payload JSON, serta SQL analitik (redeem rate, lift penjualan, ROI promo, cannibalization, breakage).
Promo & loyalty adalah mesin penggerak trafik dan frekuensi belanja. Namun keduanya mudah menggerus margin bila tidak dikendalikan. Kuncinya: rules yang jelas, prioritas & stacking yang terdefinisi, targeting yang tepat, serta pengukuran lift & ROI yang disiplin.
Daftar Isi- 1. Konsep Inti & Tujuan Promo
- 2. Tipe Promo Umum di Grocery
- 3. Desain Aturan: Conditions & Benefits
- 4. Pricebook vs Promo Rules
- 5. Prioritas, Konflik, & Stacking
- 6. Penjadwalan & Segmentasi
- 7. Loyalty: Poin, Tier, Voucher, & Breakage
- 8. Anti-Fraud & Kepatuhan
- 9. Template CSV: Rules Promo & Kupon
- 10. Contoh JSON Payload Kupon/Voucher
- 11. SQL Analitik: Redeem, Lift, ROI, Cannibalization
- 12. SOP Eksekusi dan Audit Promo
- 13. Matriks Perbandingan Tipe Promo
- Checklist Implementasi
- Kesimpulan
- Sumber/Referensi
1. Konsep Inti & Tujuan Promo
- Traffic builder (menarik kunjungan), basket builder (meningkatkan item per transaksi), margin builder (mix & match untuk mendorong komplementer).
- Tujuan harus kuantitatif: tambahan transaksi, lift unit, GM% terjaga, atau pergeseran pangsa kategori.
2. Tipe Promo Umum di Grocery
- Price-off (potongan harga langsung).
- Discount % (10%, 20%).
- Multi-buy (beli 3 seharga X, beli 2 diskon Y).
- Bundle (paket beberapa item dengan harga paket).
- B1G1 (beli satu gratis satu) atau mix & match antar kategori.
- Happy hour (jam/hari tertentu).
- Near-expiry markdown (FEFO; D-30/D-14/D-7).
- Voucher/Kupon (kode unik) & poin loyalty.
3. Desain Aturan: Conditions & Benefits
Mesin promo umumnya memerlukan conditions (syarat) dan benefits (manfaat).
- Condition: item, brand, kategori, total belanja, jam/hari, lokasi/cabang, level member.
- Benefit: price-off, %, gratis item, poin ekstra, voucher cashback.
- Kuantitas: min qty, max qty per transaksi/pelanggan, limit harian.
4. Pricebook vs Promo Rules
- Pricebook: harga normal per lokasi/periode. Stabil, prioritas rendah.
- Promo rules: harga spesial/perilaku diskon dengan conditions. Prioritas lebih tinggi, masa berlaku ketat.
5. Prioritas, Konflik, & Stacking
- Set priority numerik (besar = lebih diutamakan).
- Definisikan stackable=true/false (boleh ditumpuk?).
- Jika konflik, gunakan urutan: kupon (pelanggan) → promo rule → pricebook.
6. Penjadwalan & Segmentasi
- Schedule: start/end date, jam, hari, musim, kalender gajian.
- Segmentasi: RFM (Recency, Frequency, Monetary), level member, demografi, toko/cabang.
7. Loyalty: Poin, Tier, Voucher, & Breakage
7.1. Akumulasi Poin
# Poin dasar per transaksi:
# points_earned = floor(net_sales / rupiah_per_point)
# Booster: kategori/brand tertentu, jam tertentu, atau tier (Silver/Gold/Platinum)
7.2. Redeem & Breakage
- Redeem menjadi voucher/kupon (nilai tetap atau diskon %).
- Breakage = poin/kode yang tidak pernah ditebus (potensi margin).
7.3. Tiering
Tier Silver: total belanja 3 bulan ≥ 1,5 jt → booster 1.1x poin
Tier Gold : total belanja 3 bulan ≥ 3 jt → booster 1.25x poin
Tier Plat : total belanja 3 bulan ≥ 6 jt → booster 1.5x poin
8. Anti-Fraud & Kepatuhan
- Kupon satu kali pakai + validasi pelanggan + masa berlaku + blacklist SKU tertentu.
- Audit event: pembuatan kupon, percobaan redeem gagal, refund setelah redeem.
- Ikuti aturan pajak & perlindungan data pelanggan (email/telepon disimpan aman).
9. Template CSV: Rules Promo & Kupon
9.1. Rules Promo (contoh generik)
rule_id,rule_name,scope,selector,benefit_type,benefit_value,min_qty,max_qty,start_date,end_date,days_of_week,start_hour,end_hour,location,priority,stackable,member_level,active
RUL-0001,Snack Hemat,item,sku=GRY-SNCK-INDO-CHIT-68G-0012,price_off,400,1,,2025-12-01,2025-12-07,ALL,,,"STORE-001",90,false,ALL,TRUE
RUL-0002,Happy Hour Minuman,category,category=Beverages,percent,10,1,,2025-12-10,2025-12-24,MON-FRI,16:00,18:00,ALL,70,true,ALL,TRUE
RUL-0003,Mix&Match 3 Chips,category,category=Chips,multi_buy(3,disc_each),300,3,9,2025-12-10,2025-12-24,ALL,,,"STORE-001",80,true,ALL,TRUE
RUL-0004,Near Expiry D-7,item,tag=near_expiry,percent,25,1,12,2025-12-01,2025-12-31,ALL,,,"ALL",95,false,ALL,TRUE
9.2. Kupon/Voucher
coupon_code,issued_to,channel,valid_from,valid_to,max_redeem,amount_type,amount_value,applicable_scope,applicable_selector,min_basket,stack_with_promos,notes,active
NY25-ABCD1234,user:6281234567890,SMS,2025-12-20,2026-01-05,1,price_off,10000,category,category=Beverages,50000,false,Tahun Baru,TRUE
MEM-GOLD-15-XYZ,user:john@example.com,Email,2025-12-01,2025-12-31,2,percent,15,item,brand=Indomilk,75000,true,Gold booster,TRUE
10. Contoh JSON Payload Kupon/Voucher
{
"coupon_code": "NY25-ABCD1234",
"customer_ref": "user:6281234567890",
"valid_from": "2025-12-20T00:00:00+07:00",
"valid_to": "2026-01-05T23:59:59+07:00",
"constraints": {
"max_redeem": 1,
"min_basket": 50000,
"applicable": {"scope": "category", "selector": "category=Beverages"},
"stack_with_promos": false
},
"benefit": {"type": "price_off", "value": 10000},
"metadata": {"campaign": "NewYear2025", "channel": "SMS"}
}11. SQL Analitik: Redeem, Lift, ROI, Cannibalization
Catatan: sesuaikan nama tabel/kolom dengan sistem Anda. Contoh menggunakan gudang data POS sederhana.
11.1. Redeem Rate & Breakage
-- coupons(coupon_code, issued_to, valid_from, valid_to)
-- redemptions(coupon_code, order_id, redeemed_at, amount_benefit)
SELECT
COUNT(DISTINCT c.coupon_code) AS issued,
COUNT(DISTINCT r.coupon_code) AS redeemed,
ROUND(100.0 * COUNT(DISTINCT r.coupon_code) / NULLIF(COUNT(DISTINCT c.coupon_code),0), 2) AS redeem_rate_pct,
COUNT(DISTINCT c.coupon_code) - COUNT(DISTINCT r.coupon_code) AS breakage_count
FROM coupons c
LEFT JOIN redemptions r ON r.coupon_code = c.coupon_code
AND r.redeemed_at BETWEEN c.valid_from AND c.valid_to;11.2. Lift Penjualan (Before–During)
-- sales_lines(order_time, sku, qty, total)
WITH base AS (
SELECT sku, AVG(qty) AS avg_qty_before
FROM sales_lines
WHERE order_time BETWEEN DATE '2025-11-01' AND DATE '2025-11-30'
GROUP BY sku
),
during AS (
SELECT sku, AVG(qty) AS avg_qty_during
FROM sales_lines
WHERE order_time BETWEEN DATE '2025-12-01' AND DATE '2025-12-07'
GROUP BY sku
)
SELECT d.sku, b.avg_qty_before, d.avg_qty_during,
ROUND(100.0 * (d.avg_qty_during - b.avg_qty_before) / NULLIF(b.avg_qty_before,0), 2) AS lift_pct
FROM during d
JOIN base b ON b.sku = d.sku
ORDER BY lift_pct DESC;11.3. ROI Promo Sederhana
-- pricebook & cost_view seperti sesi sebelumnya
-- promo_cost bisa diisi: biaya materi, fee platform, dsb.
SELECT
s.sku,
SUM(s.qty) AS units,
SUM(s.total) AS revenue,
SUM(s.qty * c.moving_avg_cost) AS cogs,
SUM(s.discount_amount) AS discount_given,
(SUM(s.total) - SUM(s.qty * c.moving_avg_cost)) AS gross_margin_after_discount,
((SUM(s.total) - SUM(s.qty * c.moving_avg_cost)) - SUM(s.discount_amount) - SUM(s.promo_cost)) AS roi_value
FROM sales_lines s
JOIN cost_view c ON c.sku = s.sku
WHERE s.order_time BETWEEN DATE '2025-12-01' AND DATE '2025-12-07'
GROUP BY s.sku
ORDER BY roi_value DESC;11.4. Cannibalization (Substitusi Antar SKU)
-- bandingkan SKU target vs SKU sekeluarga (kategori/brand sama) di periode promo
WITH fam AS (
SELECT sku, category FROM products WHERE category = 'Chips'
),
b AS (
SELECT sku, SUM(qty) qty_bef FROM sales_lines
WHERE order_time BETWEEN DATE '2025-11-01' AND DATE '2025-11-30'
GROUP BY sku
),
d AS (
SELECT sku, SUM(qty) qty_dur FROM sales_lines
WHERE order_time BETWEEN DATE '2025-12-01' AND DATE '2025-12-07'
GROUP BY sku
)
SELECT f.category, COALESCE(d.sku,b.sku) AS sku,
COALESCE(b.qty_bef,0) AS before_qty,
COALESCE(d.qty_dur,0) AS during_qty,
(COALESCE(d.qty_dur,0) - COALESCE(b.qty_bef,0)) AS delta_qty
FROM fam f
LEFT JOIN b ON b.sku = f.sku
LEFT JOIN d ON d.sku = f.sku
ORDER BY delta_qty ASC;12. SOP Eksekusi dan Audit Promo
1) Rancang tujuan promo (metric & target).
2) Buat rules & kupon (CSV/JSON), set prioritas & stacking.
3) Uji di sandbox: 5 skenario transaksi + konflik promo.
4) Sinkron ke POS, cetak label rak, training kasir.
5) Monitoring harian: redeem rate, margin, keluhan harga.
6) Tutup periode: hitung lift & ROI, review cannibalization.
7) Audit jejak perubahan & tindak lanjut anomali.13. Matriks Perbandingan Tipe Promo
| Tipe | Tujuan Utama | Kelebihan | Keterbatasan | Kontrol Margin |
|---|---|---|---|---|
| Price-off | Traffic cepat | Sederhana, jelas | Margin tergerus | Batasi durasi & qty |
| Percent % | Perluas minat kategori | Fleksibel | Risk diskon terlalu besar | Cap nilai diskon |
| Multi-buy | Tingkatkan basket | Dorong unit | Kompleks di kasir | Batas max qty |
| Bundle | Jual komplementer | Tingkatkan mix | Butuh label jelas | Kontrol komponen margin |
| Happy hour | Isi jam sepi | Target waktu | Ekspektasi pelanggan | Hari & jam spesifik |
Checklist Implementasi
- Tetapkan kamus promo (condition/benefit, prioritas, stacking).
- Definisikan near-expiry markdown otomatis (D-30/14/7).
- Rancang tier loyalty & rupiah per poin; tetapkan TTL kupon.
- Aktifkan audit trail, limit redeem per pelanggan, dan blacklist SKU.
- Siapkan dashboard: redeem rate, lift, ROI, breakage, cannibalization.
Kesimpulan
Program promo & loyalty yang sehat bukan sekadar diskon, melainkan arsitektur rules, targeting yang tepat, serta pengukuran lift & ROI yang ketat. Dengan template CSV/JSON, SOP, dan SQL analitik di atas, Anda bisa merancang kampanye yang menaikkan trafik dan basket tanpa kehilangan kendali atas margin.
Sumber/Referensi
- Shopify — Discounts
- Square — Create Discounts
- Lightspeed Retail (X-Series) — Promotions
- Odoo — Point of Sale (Promotions & Loyalty)
/* Blok kode + tombol salin */
pre{position:relative;background:#0b1020;color:#e2e8f0;border-radius:12px;padding:14px 42px 14px 14px;overflow:auto;border:1px solid #1f2937}
pre code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:13.5px;white-space:pre}
.copy-btn{position:absolute;top:8px;right:8px;border:1px solid #334155;background:#111827;color:#e5e7eb;border-radius:8px;padding:6px 10px;cursor:pointer}
.copy-btn:hover{background:#0f172a}
.copy-ok{background:var(--accent);border-color:var(--accent)}
Post Terkait
Transformasi Manajemen Kredensial IT: Dari Bottleneck Manager ke Sistem Password Vault Terpusat
Artikel ini membahas strategi transformasi manajemen kredensial IT dari model manual yang bergantung pada Manager menjad...
Panduan Menghitung Penyusutan Aset Komputer, Server, dan Perangkat Teknologi di Perusahaan
Penyusutan aset komputer, server, dan perangkat teknologi tidak boleh sekadar “feeling” IT atau kebiasaan lama. Ia harus...
CAPEX dan OPEX: Mengapa Keduanya Sangat Penting dalam Sistem Akuntansi Modern?
Capital Expenditure (CAPEX) dan Operating Expenditure (OPEX) bukan sekadar istilah teknis di laporan keuangan. Pemahaman...