Casino CRM stack: segmentation, campaigns, personalization
Full article
1) CRM objectives in iGaming
LTV growth and retention: return the player in time with a suitable channel and offer.
Reducing the cost of communications: smart channel/time/frequency selection.
Compliance by default: RG/AML/opt-in, age/geo-restrictions, bans on promotions for vulnerable groups.
Transparent attribution: understand what really works.
2) CRM stack reference architecture
Events (PAM/Wallet/RGS/Payments/Web/App)
│
├─CDP (Identity + Profiles + Consent) ──Feature Store (real-time + batch)
│ │
│ ├─Segmentation Service (rules, SQL, ML lists)
│ └─Orchestrator (Journeys/Triggers/Limits)
│ │
│ ├─Channels: Push / Email / SMS / On-site / In-app / Call
│ └─Offers Engine (bonuses, missions, jackpots)
└─BI/DWH (attribution, uplift, experiments)
Key elements:
- CDP (Customer Data Platform) with player profile and permissions (consent).
- Orchestrator scripts/campaigns with frequency limits and RG rules.
- Feature Store for online/batch characteristics (RTP propensity, favorite providers, risk).
- Offers Engine - generation and execution of offers (rules + ML).
- Channels with uniform contracts and feedback (delivery/open/click/reply/spam).
3) Event model and player profile
3. 1 Baseline events
`session. started/ended`- `bet. placed/settled` (stake/win/in_bonus/provider/game)
- `wallet. debit/credit` (reason, latency)
3. 2 Profile (fragment)
json
{
"player_id":"p_123", "brand_id":"A", "region":"EU", "locale":"de-DE", "rg_status":{"self_excluded":false,"limits":{"loss_daily":100}}, "consents":{"email":true,"push":true,"sms":false,"profiling":true}, "features":{
"tenure_days":186, "dep_count_30d":3, "churn_score":0. 62, "fav_providers":["studio_x","live_y"]
}, "last_seen_at":"2025-10-22T21:10:00Z"
}
Rules: all PII - tokenize; keep the sign of consent and the date of change. Any communication - only with an active opt-in.
4) Segmentation: rules + ML
4. 1 Rules (rule-based)
SQL/visual constructors: "DE + dep_count_30d=0 + last_seen>7d + consent. email».
Segment directories (VIP, beginners, high-value, dormant).
Update: real-time (stream) for critical triggers, batch (5-60 min) for wide campaigns.
4. 2 ML lists
Churn propensity, Next Best Action/Game, Deposit intent, Offer sensitivity.
DWH training, scoring in the Feature Store; explainability: top signs, trust.
5) Offers and personalization
5. 1 Types of offers
Bonuses (deposit/cashback/free spins), missions/quests, tournaments, jackpot prizes, personal recommendations of games/categories.
5. 2 Compatibility rules
RG: exclude self-excluded/limit; age/license/region.
Economy: max cost per player/day, vager/max bet, conflict block.
Anti-spam: frequency per channel and per player.
5. 3 Generating an offer (example API)
POST /v1/offers/generate
{
"player_id":"p_123", "context":{"intent":"reengage","channel":"email"}, "constraints":{"max_cost_minor":500,"rg_safe":true}
}
→ 200 {
"offer_id":"of_777", "template":"bonus_cashback", "params":{"percent":10,"cap_minor":2000,"wagerx":15}, "expires_at":"2025-10-24T21:00:00Z"
}
6) Orchestration of campaigns and triggers
6. 1 Triggers (real-time)
`bet. settled 'with a non-trivial loss → "consolation" cashback (if RG allows).
`payment. failed '(3-DS/AVS) → prompt/alternate PSP.
`churn_score>0. 7 & last_seen>14d' → re-engage chain (push→email).
6. 2 Jorney (journeys)
State graph: enter → wait → check → send → evaluate → next step.
Entry/exit conditions, deaddown by player, cooldown between steps, automatic opt-out on unsubscribe/complaint.
6. 3 Frequency limits and priorities
Per channel/day/week, global "message cap," VIP/incident priority.
"Four-eyes" on sensitive campaigns (manual approval of high-denomination offers).
7) Channels and delivery
Deliverability: domains, IP reputation, warm-up, spam triggers; tracking 'delivery/open/click/unsubscribe/complaint'.
8) Personalize content and recommendations
Rules + ML hybrid: first filters by license/provider, then ML ranking (history-based + popularity/novelty).
Context: device/time/geo/category.
Guardrails: exclude "dangerous" RG patterns (long sessions/high stakes), limit on bonus restrictions.
Templates: multilingual content (BCP-47), placeholders for offer variables, A/B options.
9) Experimentation and attribution
A/B/n with persistent bucketing.
Uplift modeling: we target those who expect an increase from contact (and not all).
Attribution: last-touch + positional models; for triggers - "saw/opened/clicked → action (deposit/return/involvement)."
Guardrails: do not worsen RG-indicators (increase in triggering limits, complaints).
10) CRM Metrics and SLO
Delivery: delivery rate, open/click, complaint/unsubscribe.
Business: uplift deposits/reactivations, ARPU uplift, churn-down, ROI campaigns, cost per engaged.
Operations: offer generation time, p95 "sobytiye→otpravka," message queue, retrays.
RG/Compliance:% blocked by RG, share of contacts with vulnerable, complaints.
SLO objectives (benchmarks):- real-time trigger "sobytiye→dostavka" p95 ≤ 30-90 s;
- batch campaign up to 15 min;
- complaint rate < 0. 1%, unsubscribe <1% by mailing.
11) Security, privacy, consent
Consents are versioned; for each communication we log "on what basis we sent."
PII isolation: tokens/pseudo-ID in CRM, direct contacts in secure channel repositories.
RLS/ABAC: access by brand/region/role (support/marketing/analytics).
WORM audit: changes to segments, rules, offers, mass mailings.
Displacement by region (data residency), "right to oblivion."
12) Integration contracts (fragments)
Trigger Event
POST /v1/events
{
"event_type":"payment. failed", "trace_id":"tr_a1b2", "player_id":"p_123", "payload":{"psp":"X","reason_code":"3DS_TIMEOUT"}, "occurred_at":"2025-10-23T11:21:05Z"
}
Send Message (Abstract Channel)
POST /v1/messaging/send
Headers: X-Idempotency-Key: msg_001
{
"channel":"email", "player_id":"p_123", "template_id":"tpl_reengage_01", "personalization":{"first_name":"Alex","offer_id":"of_777"}, "frequency_policy_id":"fp_default"
}
→ 202 {"delivery_id":"dlv_9k","status":"QUEUED"}
Feedback from the channel
POST /v1/messaging/feedback
{
"delivery_id":"dlv_9k", "event":"open click bounce complaint unsubscribe", "occurred_at":"2025-10-23T11:22:05Z"
}
13) Operational hygiene
Campaign calendar: black windows (matches, releases, reg periods), "quiet hours."
Content Review: Spelling, Legal Disclaimer, Brand Fit and License.
Deadup: Don't send two messages about the same event for X minutes.
Back-pressure: limit peak mailings, warm up domains, prioritize transaction messages.
14) Checklists
Architecture and data
- Single CDP, profiles, consents, RG statuses.
- Stream of events and batch funnel; Feature Store real-time + batch.
- Outbox/CDC, idempotent send and feedback loop.
- RLS/ABAC, PII isolation, WORM audit.
Segmentation and offers
- Set of "skeleton" segments + ML-lists.
- Interoperability policies (RG, economics, licenses).
- Frequency limits per channel and globally.
Orchestration and channels
- Jorney with cooldown and unsubscribe/complaint auto-out.
- Channel monitoring deliverability, domain reputation/IP.
- Deep-link tracking and conversion to wallet/bet.
Experiments/Measurement
- A/B/n + uplift; guardrails RG.
- Attribution and ROI, cost report (channel/PSP/locale).
15) Red flags (anti-patterns)
Mass mailings without frequency limits and RG filters.
Campaigns on players without opt-in or with expired consent.
Personalization using PII in plaintext unnecessarily.
No feedback loop: no delivery/complaint data.
"Hard-wired" rules without A/B and telemetry.
Sending bonuses without economic control (cap, budget, rule conflict).
Storage of contact data in logs/dashboards.
16) The bottom line
The strong CRM stack in iGaming is not only "mailing." It is an event platform with a single profile, consents, and RG constraints; smart segmentation and generation of offers; orchestrator of the journal with frequency limits and channel feedback; and measuring uplift/ROI instead of "discovery for discovery's sake." So you increase LTV and retention, reduce contact costs, comply - and make communications appropriate, timely and safe.