Optimove โ€” Campaign Playbook

Optimove Campaign Playbook

A practical guide to creating campaigns โ€” event triggers, target groups, step-by-step examples, and 17 ready-to-build scenarios.

Two completely separate channels

Optimove receives player information in two totally different ways. They do not mix.

๐Ÿ“Š

Batch Data

Daily snapshot

Every night, Optimove pulls a fresh copy of every player's profile โ€” balance, level, game history, transaction history. Think of it as a daily "state of every player."

  • Updates once per day
  • Covers ALL players, even those not active today
  • Used to build target groups and send scheduled campaigns
  • Source: database + data warehouse
SEPARATE
โšก

Events

Real-time signals

When a player does something right now โ€” places a bet, deposits, levels up โ€” a signal fires instantly to Optimove. These are moments, not profiles.

  • Fires the instant something happens
  • Fires when a player or system takes an action โ€” most are in-session, some (e.g. redemption completed) fire from backend processes
  • Used to trigger real-time campaigns
  • Does not update batch/daily data
โš ๏ธ

Critical distinction โ€” events do NOT update batch data

When a player places a bet and an event fires, their daily batch profile is not updated. The batch profile only changes in the next daily sync. Events and batch data live in completely separate systems. A scheduled campaign sees yesterday's snapshot, not what just happened 5 minutes ago.

Batch Data โ€” The Daily Snapshot

Every night, Optimove pulls a fresh copy of the entire player database. Here's how that works.

1

Data lives in our database

Player profiles, balances, levels, game activity, and transaction history โ€” all stored in our database.

โ†’
2

Nightly sync to Optimove

Optimove automatically pulls this data once per day into its own system.

โ†’
3

Optimove builds profiles

Each player gets a profile inside Optimove with all their attributes up-to-date.

โ†’
4

Marketers create target groups

Filter players by any attribute: "level 5+, deposited $50+ in past 30 days."

โ†’
5

Scheduled campaign sent

Campaign fires at a set time (e.g. 5 AM) to everyone in the target group.

Updates once per day

Batch data is a snapshot. It shows where every player stood at the end of yesterday. It is not live.

What Optimove receives โ€” four data sets

Batch data is not a single file. It's four separate views, each with a different purpose. Optimove reads all four nightly and cross-references them by Player ID.

๐Ÿ‘ค

Customer Profiles

One row per player ยท updated nightly ยท the primary segmentation dataset
๐Ÿ’ฐ
SC BalanceCurrent sweeps coin balance
๐Ÿช™
GC BalanceCurrent gold coin balance
โญ
Level + RankCurrent level name + rank name
๐Ÿท
TagsAll player tags (comma-separated)
๐Ÿšซ
Is BlockedActive ban exists Yes/No
๐Ÿ””
Allow Email / SMSNotification preferences
๐ŸŒ
Country + StateRegistration country/state code
๐Ÿ“…
Last Login DateLast login + last active timestamp
๐Ÿ—“
Registration DateAccount creation date
๐Ÿ”—
Acquisition SourceAffiliate / Marketing / Referral / Promo
๐Ÿ“ง
Email + PhoneContact details, verified status
๐Ÿชช
Name + UsernameFirst name, last name, alias
๐ŸŽฐ

Game Activity

One row per player ร— game ร— day ยท how Optimove uses these rows is defined on Optimove's side
๐ŸŽฐ
SC Bet AmountPer player/game/day
๐Ÿ†
SC Win AmountPer player/game/day
๐ŸŽฎ
GC Bet + Win AmountPer player/game/day
๐Ÿ”ข
Bet + Win CountsSC + GC bets, wins per day
๐Ÿ“Š
Net Gaming RevenueSC bets minus SC wins
What we send: Raw daily rows โ€” one per player/game/day. Optimove aggregates these into lifetime, 3-month, and 2-week totals for bet amounts, win amounts, NGR, game counts, win ratios, and more.
๐Ÿ’ณ

Transactions

One row per transaction ยท includes purchases, redemptions, and bonuses
๐Ÿ’ณ PURCHASE โ€” coin pack bought, amount + status
๐Ÿ“ค REDEEM โ€” cashout request, amount + status (Pending / Approved / Rejected)
๐ŸŽ BONUS_SC / BONUS_GC โ€” bonus coins awarded
What we send: Individual transaction records. Optimove aggregates these into lifetime, 3-month, and 2-week totals for purchase amounts, redemption amounts, counts, cashout ratios, and more.
๐Ÿ—‚

Game Catalog

One row per game ยท used by Optimove to label game activity with names and categories
Game ID + Name
Game Category

All attributes available in Optimove today

Everything below is already live. Sourced from the four batch views โ€” raw fields passed through directly, or computed by Optimove from the raw data.

๐Ÿชช
Identity & Profile
Passed through from Customer View
Player IDFirst NameLast NameAliasEmailMobile NumberDate of BirthAgeGenderCountryStateCityAddressLanguageCurrencyRegistration DateLast Login DateLast Active AtTagsIs BlockedIs TestIs OptinIs Email VerifiedIs SMS VerifiedIs Top Spender?Platform PreferencePlatform Preference, Last 3 MonthsReachable for Web PushCasino Name
๐Ÿ”—
Acquisition & UTM
Passed through from Customer View + last session
Referral TypeReferred By IdMarketing IdAffiliate IdPromo CodeRegistered PlatformUTM Source (Last Session)UTM Medium (Last Session)UTM Campaign (Last Session)UTM Content (Last Session)UTM Term (Last Session)
๐Ÿ””
Communication Preferences
From Customer View + OptiMail engagement
Allow EmailAllow SMSAllow PushAllow WhatsappEmail Valid, LifetimeOptiMail UnsubscribedOptiMail - Days Since Last OpenedOptiMail - Days Since Last ClickedMost Effective Channel
๐Ÿ’ฐ
Balances
From Customer View โ€” nightly snapshot
Balance (SC)Gc BalanceTotal Pending RedeemsTotal Balance Loss
๐ŸŽฐ
Gameplay โ€” Computed by Optimove from Games data
Lifetime ยท Last 3 Months ยท Last 2 Weeks
Total SC Casino Bet Amount, LifetimeTotal SC Casino Bet Amount, Last 3 MonthsTotal SC Casino Bet Amount, Last 2 WeeksTotal SC Casino Win Amount, LifetimeTotal SC Casino Win Amount, Last 3 MonthsTotal SC Casino Win Amount, Last 2 WeeksTotal GC Casino Bet Amount, LifetimeTotal GC Casino Bet Amount, Last 3 MonthsTotal GC Casino Bet Amount, Last 2 WeeksTotal GC Casino Win Amount, LifetimeTotal Casino NGR, LifetimeTotal Casino NGR, Last 3 MonthsTotal Casino NGR, Last 2 WeeksAverage SC Casino Bet Amount, LifetimeSC Win Ratio, LifetimeSC Win Ratio, Last 3 MonthsGC to SC Ratio, LifetimeGC to SC Ratio, Last 3 MonthsNumber of Bets MadeNumber of SC Casino Games, LifetimeNumber of GC Casino Games, LifetimeNumber of Casino Winning Games, LifetimeNumber of Casino Game Days, LifetimeNumber of Casino Game Days, Last 3 MonthsNumber of Casino Game Days, Last 2 WeeksNumber of Casino Mobile Games, LifetimeNumber of Casino Web Games, LifetimeFavorite Casino GameFavorite CategoryGameplay Activity on SlotsGameplay Activity on OriginalsGameplay Activity on Other GamesFirst Casino Game DateLast Casino Game DateLast Bet MadeDays Since Last Casino GameDays Since Last SC Casino GameSC Bet Percentile By LCSSC Bet Percentile By LCS, Last 3 MonthsSC Bet Percentile By LCS, Last 2 Weeks
๐Ÿ’ณ
Purchases โ€” Computed by Optimove from Transactions data
Lifetime ยท Last 3 Months ยท Last 2 Weeks ยท Last Month
Total Purchase Amount, LifetimeTotal Purchase Amount, Last 3 MonthsTotal Purchase Amount, Last 2 WeeksNumber of Purchases, LifetimeNumber of Purchases, Last 3 MonthsNumber of Purchases, Last 2 WeeksNumber of Purchase Days, LifetimeNumber of Purchase Days, Last 3 MonthsNumber of Purchase Days, Last 2 WeeksNumber of Purchase Days, Last Calendar MonthAverage Purchase Amount, LifetimeAverage Purchase Amount, Last MonthAverage Purchase Amount, Last 3 MonthsAverage Monthly Purchase Amount, LifetimeFirst Purchase DateFirst Purchase Amount, LifetimeLast Purchase Amount, LifetimeDays Since First PurchaseDays Since Last PurchasePurchase Amount Monthly Change, LifetimePurchase Amount Since ReactivatedPurchases Since ReactivatedPurchase Percentile By LCSPurchase Percentile By LCS, Last 3 MonthsFrequency, Last 3 MonthsFrequency, One Year
๐Ÿ“ค
Redemptions โ€” Computed by Optimove from Transactions data
Lifetime ยท Last 3 Months ยท Last 2 Weeks
Total Redeem Amount, LifetimeTotal Redeem Amount, Last 3 MonthsTotal Redeem Amount, Last 2 WeeksNumber of Redeems, LifetimeNumber of Redeem Days, LifetimeLast Redeem DateLast Completed Redemption DateDays Since Last RedeemCashout Ratio, LifetimeCashout Ratio, Last MonthCashout Ratio, Last 3 MonthsNet Cash, LifetimeNet Cash, Last 2 Weeks
โš™๏ธ
Custom Attributes โ€” Defined by Swivel
Formulas built on top of the base data
Net Purchase (lifetime)Net Purchase Last 3 MonthsNet Purchase including pending and balanceNet ScoreNGR Total Purchase - Total RedemptionRedemption Ratio
๐Ÿ”„
Lifecycle & Activity โ€” Computed by Optimove
Optimove tracks player journeys automatically
Lifecycle StagePrevious Lifecycle StageLifecycle Stage Before ChurnDays Since Lifecycle Stage ChangeActivity Days, LifetimeNumber of Activity Days, LifetimeNumber of Activity Days, Last 3 MonthsNumber of Activity Days, Last 2 WeeksDays Since First ActivityDays Since Last ActivityDays Since Last LoginDays Since Last VisitDays Since RegistrationMonths Since RegistrationLast Activity DateDormant Activity LayerDormant TypeNumber of Times Churned, LifetimeDays In Churn, LifetimeDays In Reactivated, LifetimeDays Since Last ReactivationNumber of Visits, Last 14 DaysNumber of Visits, Last 30 DaysAvg. Session Time in MinutesTotal Visit Time, Last 14 DaysTotal Visit Time, Last 30 Days
๐Ÿค–
Predictive Scores โ€” Optimove AI/ML
Optimove models running on your player data
Churn Probability ScoreChurn FactorChurn Factor, One YearReactivation Probability ScoreConversion Probability ScoreBecoming Top Spender ScoreRank in Churn ProbabilityRank in Reactivation ProbabilityRank in Conversion ProbabilityRank in Becoming Top SpenderRank by LCS Churn ProbabilityRank by LCS Becoming Top Spender
๐Ÿ“ฃ
Campaign Intelligence โ€” Optimove
Optimove tracks how each player responds to campaigns
Response Rate, Last 7 DaysResponse Rate, Last 30 DaysNumber of Campaigns, Last 7 DaysNumber of Campaigns, Last 30 DaysMost Effective ChannelContent - Game CategoryContent - Promotion TypeContent - Tone of VoiceRandom Customer PercentageRandom Customer Slice

Events โ€” Real-Time Signals

When a player does something, a signal fires instantly. These drive campaigns for players who are active right now.

๐ŸŽฎ
Player Action

Player places bet, deposits, levels up...

โ†’
๐Ÿ“ก
Event Fires

Signal sent instantly with rich data attached

โ†’
๐Ÿ“ฌ
Queue

Brief buffer (milliseconds) to ensure delivery

โ†’
๐Ÿข
Optimove Receives

Event arrives in Optimove within seconds

โ†’
๐Ÿš€
Campaign Triggers

If conditions match, campaign fires immediately

Events we send โ€” with what's attached

Each event carries a snapshot of that player's current state โ€” so real-time campaigns have fresh data without needing to query the database.

bet_finished ๐ŸŽฐ fires after every bet

Player finished a bet

Fires whether player won or lost. Carries current balances, level, risk score, and average purchase โ€” all from the database at the moment of the bet.

sc_balance: 1250.50   gc_balance: 5000.00   level: 12
risk_score: 45   avg_purchase: 7.99   pending_redemption: 0.80
deposit ๐Ÿ’ณ fires on every purchase

Player made a purchase

Carries updated balances, level, risk score, and the amount just purchased โ€” the key data for deposit upsell triggers.

sc_balance: 2000.00   gc_balance: 10000.00
purchase_amount: 10.00   level: 8   risk_score: 30
level_change โญ fires on level up

Player levelled up

Carries new level, rank, and current balances. Great trigger for congratulation campaigns.

redemption_requested ๐Ÿ“ค fires when cashout submitted

Player requested a cashout

Carries redemption amount and current pending redemption total.

redemption_completed โœ… fires when cashout approved

Cashout completed

Carries updated redemption history windows. Triggers for completed redeemers.

bonus_claim ๐ŸŽ fires when bonus claimed

Player claimed a bonus

Carries cumulative bonus totals. Enables campaigns for frequent bonus claimers.

sign_up ๐Ÿ†• fires once on registration

New player registered

Triggers onboarding campaigns. Carries initial profile state.

๐Ÿ”’

Events and batch data are completely independent

An event firing does not update a player's batch profile. The batch profile updates once per night via the daily sync โ€” period. A scheduled campaign scheduled for tomorrow will use tomorrow night's batch data, not the events that fired today.

Three Event Types in Optimove

Before creating a campaign, events must be configured in Optimove's back office as one of three types. Each event is one type only โ€” not all three. Swivel currently has Simple and Repeated events configured. Uncompleted Sequence events need to be set up separately in Optimove BO before they can be used in campaigns.

โšก

Simple Event

One action โ†’ fires immediately, every time

Fires once each time the defined action happens. The campaign evaluates trigger conditions against each event independently and fires if all pass. This is the most common type.

Swivel examples
๐Ÿ’ณ deposit fires โ†’ show $20 offer if player bought $10 standard pack
๐ŸŽฐ bet_finished fires โ†’ top-up offer if sc_balance < 1
๐ŸŽ bonus_claim fires โ†’ engagement follow-up campaign
๐Ÿ“ค redemption_requested fires โ†’ purchase incentive if sc_balance < 2
โœ… Currently configured โ€” all Swivel events (deposit, bet_finished, bonus_claim, etc.) are Simple Events by default.
๐Ÿ”

Repeated Event

Event fires always ยท trigger activates on Nth occurrence

The event fires every time the action happens โ€” always. The trigger is configured with a threshold (count N, time window). When the event fires and the count reaches N within that window, the trigger activates and the campaign fires. Before the Nth occurrence, the event still fires โ€” the campaign just doesn't.

Swivel examples
๐Ÿ’ณ 4th deposit today โ†’ loyalty reward (24h window)
๐ŸŽฐ 3rd bet in session โ†’ "you're on a roll!" bonus
โœ… Currently configured โ€” deposit and bet_finished are set up as Repeated Events. Count and time window are defined in the trigger configuration.
โณ

Uncompleted Sequence

A happens, B expected but doesn't โ†’ fires

Optimove watches for a first action (A), then waits for a follow-up action (B). If B does not happen within the time window, the campaign fires. This is your cart-abandonment equivalent โ€” the player started a journey but didn't finish it.

Swivel examples
๐Ÿ†• sign_up โ†’ no deposit within 30 min โ†’ first purchase welcome offer
๐Ÿ’ณ deposit โ†’ no bet_finished within 15 min โ†’ "you have coins, try a game!"
๐ŸŽฐ bet_finished โ†’ no new bet within 20 min โ†’ keep-playing nudge
โš ๏ธ Needs setup โ€” not yet configured. Each sequence (A โ†’ expected B) must be added as a new event in Optimove BO before it can be used in any campaign.

Two types of campaigns

The type of campaign depends on which channel it listens to โ€” batch data or events.

๐Ÿ“…

Scheduled Campaign

Powered by batch data ยท For inactive players
๐Ÿ“Š
Batch data refreshed last night

Every player's profile is up-to-date as of yesterday's snapshot

๐Ÿ”
Target group filters applied

e.g. "Not active in 7+ days AND country = US AND is_blocked = No AND total purchases over $100"

โฐ
Campaign fires at scheduled time

e.g. 5 AM ET โ€” when servers are quiet and the message feels like a morning nudge

๐Ÿ“ง
Email or push notification sent

"We miss you โ€” here's 500 GC to come back!"

โœ” Best for: win-back, reactivation, loyalty milestones, risk-based segmentation

โšก

Triggered Campaign

Powered by events ยท Primarily active players (some events fire regardless of session)
๐ŸŽฎ
Player does something right now

Places a bet, deposits, levels up, completes a redemption...

โšก
Event fires instantly

Signal arrives at Optimove within seconds, carrying fresh player data

๐ŸŽฏ
Conditions checked in real-time

e.g. "Deposit event AND first purchase ever AND balance now over 1000 SC"

๐Ÿ””
Campaign triggers immediately

Pop-up, push notification, or bonus fires while the player is still in session

โœ” Best for: purchase upsell, level-up celebration, first-deposit welcome, redemption follow-up

Target Groups โ€” used in both campaign types

A target group is a saved filter of player attributes. Both scheduled and triggered campaigns require a target group โ€” it defines the eligible pool. Use common sense about what belongs here: balance changes every session so a batch snapshot will always be stale. Average purchase amount means nothing for a player with two purchases. Stick to attributes that are stable and statistically meaningful โ€” country, account status, player type, lifecycle stage.

๐Ÿ“… Scheduled campaigns โ€” TG defines who gets the email/push at the scheduled time
โšก Triggered campaigns โ€” TG defines who is eligible before the trigger condition is checked

All Players โ€” TG membership evaluated at unknown time by Optimove

Active today
Inactive
Matched target group
๐Ÿ“…
Filter by activity

e.g. "Last login was more than 7 days ago"

๐Ÿ’ณ
Filter by spend

e.g. "Lifetime purchases over $50"

๐ŸŽฏ
Filter by lifecycle / level

e.g. "Lifecycle stage = Active, level 5 or higher"

Target Groups vs Trigger Conditions

These are two completely different places where Optimove checks if a player should receive a campaign. They must carry different types of data.

๐Ÿ—‚

Target Group

Evaluated against batch data ยท at an unknown time ยท slow-changing fields only
๐Ÿ“Š Evaluated against batch data โ€” the nightly snapshot, not live values

Use stable, slowly-changing attributes. Common sense applies: balance changes every session โ€” a batch snapshot is always going to be behind. Averages and ratios are only meaningful if the player has enough data points to make them statistically valid.

โœ… Country = US
โœ… Is banned = No
โœ… Opted in = Yes
โœ… Player type: new vs existing
โœ… Total purchases > $50 (lifetime total โ€” stable)
โœ… Redemption count > 5 (stable count โ€” fine)
๐Ÿšซ SC Balance < 1 (changes every bet โ€” always stale)
๐Ÿšซ Avg purchase amount (only if player has <5 purchases โ€” meaningless)
Balance belongs in the trigger condition, not here. It changes on every bet. The batch snapshot will never reflect the right moment. Lifetime totals and counts are fine โ€” they accumulate slowly and are statistically stable.
โšก

Trigger Condition

Checked instantly when event fires ยท real-time data

The trigger condition is evaluated the instant an event arrives โ€” against the data attached to that event. The event payload carries live values from the exact moment of the action.

โœ… sc_balance < 1
โœ… risk_score < 70
โœ… purchase_amount = $10
โœ… avg_purchase between $4.99โ€“$9.99
โœ… pending_redemption < 2 SC
Why this works: The event payload is built at the exact moment the player acts. Balance, risk score, purchase amount โ€” all reflect reality right now. Trigger conditions read that snapshot instantly.

Example โ€” Bet finished, balance under 1 SC

1. Target Group (static)

Existing/New (visitor) user ยท not banned ยท opted in ยท country = US

โ†’
2. Event fires

BET_FINISHED
{ sc_balance: 0.8,
  risk_score: 45 }

โ†’
3. Trigger condition

risk_score < 70 โœ“
sc_balance < 1 โœ“

โ†’
Campaign fires ๐Ÿš€

Top-up offer shown to player

How to Build a Campaign in 4 Steps

Every campaign โ€” triggered or scheduled โ€” follows the same setup flow. Here's what each step means and how to get it right.

1

Define your Target Group โ€” who is eligible?

The Target Group is the pool of players who could receive this campaign. For triggered campaigns, use slow-changing attributes only. Never put balance, purchase amounts, or redemption data here โ€” those values are stale by the time Optimove reads them.

Recommended base TG โ€” add to nearly every triggered campaign
๐ŸŒ Country = US ๐Ÿšซ Is Blocked = No ๐Ÿ”” Allow Push / Email = Yes ๐Ÿ‘ค Player Type = Existing
Do not add sc_balance, purchase amounts to a Target Group for triggered campaigns. Optimove evaluates TG membership at an unknown time using batch data โ€” those values will be outdated by the time the event fires.
2

Choose your trigger โ€” what starts the campaign?

Pick an event from Swivel. The event type (Simple / Repeated / Uncompleted Sequence) is already determined by how the event was configured in Optimove BO โ€” you don't choose it here. You can also configure a trigger as a combination of events within a time window (e.g. sign_up followed by deposit within 30 min, or 3 bet_finished events within 1 hour).

๐ŸŽฐ bet_finished
๐Ÿ’ณ deposit
๐Ÿ“ค redemption_requested
โœ… redemption_completed
๐ŸŽ bonus_claim
โญ level_change
๐Ÿ†• sign_up
3

Set trigger conditions โ€” what must be true in the event payload?

Conditions are checked the instant the event fires, against the live data attached to that event. This is where real-time data lives. All conditions must be true for the campaign to fire.

Live data available in every event payload (Phase 1)
sc_balance gc_balance risk_score purchase_amount is_first_time_deposit avg_purchase xp_to_next_level is_winning_bet amount_won_in_usd pending_redemption_amount level rank
You can combine multiple conditions with AND. The campaign fires only when all conditions are true โ€” which lets you be precise about who gets what offer at exactly the right moment.
4

Design and launch the campaign

Choose your channel and craft the message. For triggered campaigns the timing is automatic โ€” the campaign fires the moment conditions are met. No scheduling needed.

Channel options
๐Ÿ–ฅ๏ธ In-app popup ๐Ÿ”” Push notification ๐Ÿ“ง Email ๐Ÿ’ฌ SMS
For triggered campaigns (active players in-session), popup or push notification work best โ€” the player is there right now. Email works but the moment has already passed by the time they open it.

Building Target Groups That Actually Work

Not all attributes are equal. Some give reliable segments from day one; others need sufficient player history before they mean anything. Getting this wrong means campaigns firing to the wrong people.

โœ… Start every triggered campaign with this base TG

These four filters keep you compliant, exclude the wrong audience, and ensure campaigns reach reachable players only. Add any extra filters on top.

๐ŸŒ Country = US (or target markets)
๐Ÿšซ Is Blocked = No
๐Ÿ”” Allow Email or Allow Push = Yes
๐Ÿ‘ค Player Type = Existing/Visitor

Statistical gotchas โ€” when attributes mislead you

Some attributes only make sense after a player has enough history. Using them too early produces garbage data and campaigns that fire to the wrong people.

๐Ÿ’ณ
Average Purchase Amount, Lifetime

One large outlier purchase completely skews the average for players with few transactions. A player who bought once at $50 has an "average" of $50 โ€” but that's a sample of one, not a behavioral signal.

Add: Number of Purchases, Lifetime โ‰ฅ 5 before using any average purchase filter
๐Ÿ“ค
Cashout Ratio / Redemption Rate

A player with one redemption has either a 0% or 100% ratio โ€” mathematically correct but statistically useless. You can't segment meaningfully on ratios with 1โ€“2 data points.

Add: Number of Redeems, Lifetime โ‰ฅ 3 before using any redemption rate filter
๐Ÿค–
Churn Probability Score

Optimove's churn model needs months of behavioral history to be accurate. Players who registered recently produce unreliable scores that may cause you to target (or exclude) the wrong people.

Add: Months Since Registration โ‰ฅ 3 before relying on Churn Probability Score
๐ŸŽฐ
SC Win Ratio, Lifetime

Win ratios fluctuate wildly with small sample sizes. A player who won 5 of their first 7 bets looks like a 71% winner โ€” but that's pure variance, not a reliable signal.

Only meaningful with Number of Bets Made โ‰ฅ 20 for reliable segmentation
๐Ÿ“…
Frequency, Last 3 Months

This measures activity over the last 90 days. For a player registered 20 days ago, "last 3 months" is mostly empty โ€” the frequency will be misleadingly low and segment them incorrectly.

Add: Days Since Registration โ‰ฅ 90 when using any "Last 3 Months" frequency filters
๐Ÿ“Š
Purchase Percentile vs Raw Amounts

Raw purchase amounts like "lifetime total > $50" mean different things depending on how long a player has been registered. A 2-week player at $50 and a 2-year player at $50 are very different segments.

Prefer Purchase Percentile By LCS over raw Total Purchase Amount for spend-based segmentation
โš ๏ธ

Risk Score and Redemption Rate โ€” put these in trigger conditions, not TGs

Both values change over time. Putting them in a Target Group means Optimove evaluates them at an unknown time against stale batch data. By the time an event fires, the TG membership may not reflect the player's current state. Instead, include risk_score < 70 or redemption_rate < 75% in the trigger condition โ€” that reads the live value from the event payload at the exact moment it fires.

17 Campaign Scenarios โ€” Ready to Build

Organized by type: triggered (active players, real-time) and scheduled (inactive players). Every triggered scenario fires from a live event โ€” conditions are checked on the payload, not in the target group.

โšก
Group A
Triggered Campaigns - Simple
Simple ยท fires on each occurrence
01 ยท ๐Ÿ’ณ Deposit Upsell
SimplePhase 1
Goal: Player buys a standard $10 pack โ†’ show a $20 special offer while they're still in the cashier flow
Event

deposit fires the moment a purchase completes

TG

Existing/New (visitor) user ยท not banned ยท opted in ยท Country = US

Condition

purchase_amount = $10

purchase_amount = 10.00
is_first_time_deposit = false
Fires

In-app popup or push: special $20 offer with extra SC bonus

02 ยท ๐Ÿ“‰ Balance Drop
SimplePhase 1
Goal: Mid-tier buyer drains their SC mid-session โ†’ nudge them with a top-up offer matching their usual spend
Event

bet_finished fires after every bet resolves

TG

Existing user ยท not banned ยท opted in ยท avg_purchase between $4.99โ€“$9.99 (โ‰ฅ5 purchases)

Condition

sc_balance < 1

sc_balance < 1
Fires

Top-up offer personalised to their typical spend tier

avg_purchase is a batch attribute โ€” evaluated nightly and used in the TG filter, not the trigger condition. Only include players with โ‰ฅ5 purchases so the average is statistically meaningful.
03 ยท ๐Ÿ“ค Redemption Requested
SimplePhase 1
Goal: Player submits a cashout with almost no SC left โ†’ encourage a purchase before they disengage
Event

redemption_requested fires when cashout is submitted

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

sc_balance below 2 SC after the request

sc_balance < 2
Fires

Purchase incentive โ€” "top up while your cashout processes"

04 ยท ๐ŸŽ Bonus Claimed
SimplePhase 1
Goal: Player claims a bonus โ†’ ride the engagement momentum with a follow-up offer
Event

bonus_claim fires the moment the bonus is claimed

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

risk_score < 70 โ€” exclude bonus abusers from receiving further incentives

risk_score < 70
Fires

Engagement campaign โ€” "make the most of your bonus coins"

risk_score is null for New user (Visitor) (not defined)
05 ยท ๐ŸŽฐ Bet Finished โ€” Empty Pockets
SimplePhase 1
Goal: Player's SC hits zero after a bet โ†’ offer a top-up, but exclude likely bonus abusers
Event

bet_finished fires after every bet

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

sc_balance < 1 AND risk_score < 70

sc_balance < 1
risk_score < 70
Fires

Top-up offer โ€” not shown to players with high risk or abuse signals

risk_score is null for New user (Visitor) (not defined)
06 ยท ๐Ÿ’ณ First Purchase Ever
SimplePhase 1
Goal: Any player makes their very first purchase โ†’ fire a first-time buyer welcome campaign
Event

deposit fires on every purchase

TG

Existing/New (Visitor) users ยท not banned ยท opted in

Condition

is_first_time_deposit = true

is_first_time_deposit = true
Fires

First purchase welcome campaign with bonus coins or special pack

For brand-new users (registered today), you can also use Visitor TG + sign_up โ†’ deposit Uncompleted Sequence instead (see Scenario 13).
07 ยท โญ Level Up Celebration
SimplePhase 1
Goal: Player levels up โ†’ celebrate with a congratulation and tease what's coming at the next level
Event

level_change fires on every level-up

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

No extra condition needed โ€” every level-up is worth celebrating

ON level_change โ†’ fire campaign
Fires

Congratulations popup + preview of next level perks and XP threshold

08 ยท ๐Ÿ”ฅ Almost at Next Level
SimplePhase 1
Goal: Player is close to leveling up โ†’ motivate them to keep playing with an XP-progress nudge
Event

bet_finished fires after every bet

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

xp_to_next_level < 100 (threshold to confirm with product)

xp_to_next_level < 100
Fires

"You're only X XP away from [next level name]!" โ€” motivation push or popup

09 ยท ๐Ÿ† Big Win Moment
SimplePhase 1
Goal: Player wins big โ†’ capitalise on high positive emotion and encourage them to keep playing
Event

bet_finished fires after every bet

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

is_winning_bet = true AND amount_won_in_usd > 50

is_winning_bet = true
amount_won_in_usd > 50
Fires

"Congrats on your big win! Ready to ride the streak?" โ€” offer to keep playing

10 ยท โœ… Redemption Completed
SimplePhase 1
Goal: Player just got paid out โ†’ re-engage while goodwill is at its peak
Event

redemption_completed fires when cashout is approved and paid

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

sc_balance < 5 โ€” focus on players who have little left after cashing out

sc_balance < 5
Fires

"Your cashout is on its way! Here's a bonus pack to keep the fun going"

Use email or push โ€” not in-app popup. redemption_completed fires when the admin approves and the external payment system completes the payout. This is asynchronous โ€” the player is likely not in session at that moment.
๐Ÿ”
Group B
Triggered Campaigns โ€” Repeated Event
Repeated ยท fires on Nth occurrence
11 ยท ๐Ÿ’ณ 4th Purchase Today
RepeatedPhase 1
Goal: Player has already bought 3 times today โ€” reward their 4th purchase with a loyalty perk
Event

deposit โ€” configured as Repeated, count = 4, window = 24 hours

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

No extra condition โ€” the 4th occurrence within 24h is the trigger itself

4th deposit within 24h window
Fires

VIP loyalty reward โ€” bonus coins or exclusive pack for frequent buyers

Configure in Optimove trigger settings: Event = deposit ยท Count = 4 ยท Time window = 24 hours.
12 ยท ๐ŸŽฐ 3 Bets in a Row
RepeatedPhase 1
Goal: Player places 3 bets in a session โ†’ reward their momentum with a bonus
Event

bet_finished โ€” configured as Repeated, count = 3, window = session (or 60 min)

TG

Existing/New (visitor) user ยท not banned ยท opted in

Condition

risk_score < 70 โ€” don't reward high-risk patterns

3rd bet_finished within 60 min
risk_score < 70
Fires

"You're on a roll! Here's a bonus bet to keep it going"

risk_score is null for New user (Visitor) (not defined)
Also configurable via Optimove Streams for consecutive bet detection within a session.
โณ
Group C
Triggered Campaigns โ€” Uncompleted Sequence
Sequence ยท A fires, B doesn't follow
13 ยท ๐Ÿ†• Registered, No Purchase
SimplePhase 1
Goal: New player signed up but hasn't bought anything โ€” catch them while they're still warm
Event

Event A: sign_up ยท Event B expected: deposit ยท Window: 30 minutes

TG

Visitors (new users today) ยท not banned ยท opted in

Condition

If deposit does NOT fire within 30 min after sign_up โ†’ campaign fires

sign_up โ†’ no deposit within 30 min
Fires

"Welcome! Your first purchase comes with X bonus coins โ€” offer expires in 1 hour"

Good candidate for new player activation โ€” player just registered so intent is recent. Requires Uncompleted Sequence event configured in Optimove BO first.
14 ยท ๐Ÿ’ณ Deposited, No Bet
SimplePhase 1
Goal: Player bought coins but hasn't placed a bet yet โ€” bridge the gap between purchase and play
Event

Event A: deposit ยท Event B expected: bet_finished ยท Window: 15 minutes

TG

All users ยท not banned ยท opted in

Condition

If bet_finished does NOT fire within 15 min after deposit โ†’ campaign fires

deposit โ†’ no bet_finished within 15 min
Fires

"You've got coins! Try [featured game] โ€” your first bet is waiting"

Requires Uncompleted Sequence event configured in Optimove BO first.
15 ยท ๐Ÿ›’ Cashier Exit, No Purchase
SimpleSequencePhase 4
Goal: Player opened the coin store but left without buying โ€” nudge them back with an offer. Two approaches depending on urgency.
Event

cashier_exit fires when user closes the cashier without completing a purchase

TG

All users ยท not banned ยท opted in

Option A โ€” Simple (immediate)

Condition

None โ€” event already signals abandonment. Campaign fires immediately on cashier_exit.

cashier_exit โ†’ campaign fires
Fires

Popup or push โ€” player is still in session

Option B โ€” Uncompleted Sequence (give them a chance first)

Condition

Event A: cashier_exit ยท Event B expected: deposit ยท Window: 10โ€“15 min
If no deposit follows โ†’ campaign fires

cashier_exit โ†’ no deposit within 15 min โ†’ campaign
Fires

Push or email โ€” player may have already left the session

Requires Uncompleted Sequence event configured in Optimove BO first.
cashier_exit is a frontend event (Phase 4) โ€” ad blockers may suppress a percentage of fires. Option B requires Uncompleted Sequence configured in Optimove BO.
๐Ÿ“…
Group D
Scheduled Campaigns โ€” Inactive Players
Scheduled ยท batch data ยท all players

Scheduled campaigns run on batch data (nightly snapshot) and can reach inactive players. Unlike triggered campaigns, Target Groups can include richer filters here โ€” the batch data is fresh enough for players who haven't been active recently, and stale-data risk is near zero for that group.

16 ยท ๐Ÿ’ค Win-Back โ€” 7 Days Inactive
ScheduledPhase 1
Goal: Players who were active but haven't logged in for at least 7 days โ€” bring them back before they churn
Event

No trigger event โ€” scheduled campaign sent at a fixed time

TG

Existing user ยท not banned ยท opted in ยท Days Since Last Login โ‰ฅ 7 AND โ‰ค 30 ยท Total Purchase Amount, Lifetime > $10

Condition

No trigger condition โ€” TG filters define the audience

Fires

Email at 5 AM: "We miss you! Here's 500 free GC to come back"

Add Total Purchase Amount, Lifetime > $10 to focus on players who have previously spent โ€” non-spending players rarely reactivate from win-back emails.
17 ยท ๐Ÿค– High Churn Risk
ScheduledPhase 1
Goal: Players Optimove's AI predicts are about to churn โ†’ pre-emptive retention offer before they disappear
Event

No trigger event โ€” scheduled campaign sent daily

TG

Existing user ยท not banned ยท opted in ยท Churn Probability Score > 70 ยท Days Since Last Activity โ‰ฅ 3 ยท registered more than a few days ago

Condition

No trigger condition โ€” TG filters define the audience

Fires

Email at 11 AM: personalised retention offer based on their favorite game or spend tier

Guard: When using Churn Probability Score, filter on time since registration โ€” players registered only a few days ago may not have enough history for the score to be meaningful.
๐Ÿ”ฎ
Group E
Requires Phase 2 โ€” DWH Aggregates
Not yet available

These scenarios depend on time-windowed aggregates (e.g. total wagered in last 24h) that are not in Postgres today. Phase 2 will expose them as trigger conditions via DWH enrichment.

18 ยท ๐ŸŽฒ High Wager Volume
SimplePhase 2
Goal: Player has wagered a large cumulative amount in the last 24 hours โ€” reward engagement or offer a bonus before they stop
Event

bet_finished fires after each bet resolves

TG

Existing user ยท not banned ยท opted in

Condition

total_wagered_last_24h โ‰ฅ X SC (threshold to be defined)

total_wagered_last_24h โ‰ฅ X SC
Fires

Loyalty reward or bonus offer โ€” "you've been on a roll today"

Phase 2 only. 24h wager aggregate does not exist in Postgres today โ€” this condition cannot be used as a trigger until DWH enrichment is available.
โœ…

Scenarios 1โ€“17 covered by Phase 1 and Phase 4 ยท Scenario 18 requires Phase 2

Phase 1 delivers the new events (redemption_requested, redemption_completed, bonus_claim) + Postgres enrichment on all events (sc_balance, risk_score, xp_to_next_level, is_first_time_deposit, etc.). That covers 16 of the 17 scenarios. Scenario 15 (cashier abandonment) uses the cashier_exit frontend event โ€” Phase 4. Phases 2 and 3 will add richer data (DWH aggregates) but are not blockers for anything here.

Everything together

The two channels serve different players at different moments.

Data Sources
๐Ÿ“‚ Player database
profiles ยท balances ยท levels
๐Ÿ“‹ Transaction history
purchases ยท redemptions ยท bonuses
๐ŸŽฐ Game activity
bets ยท wins ยท NGR per day
๐ŸŽฎ Player action
bet, deposit, level up...
nightly instant
Inside Optimove
๐Ÿ“Š Player profiles
updated nightly ยท all players
๐Ÿ” Target groups
evaluated at unknown time ยท static filters only
โšก Event stream
real-time ยท fires on player or system action
Output
๐Ÿ“… Scheduled campaign
fires at set time ยท inactive players
โšก Triggered campaign
fires instantly ยท active players
Topic Batch / Scheduled Events / Triggered
Who it targets All players, including inactive Primarily active players โ€” but backend-triggered events (e.g. redemption_completed) can reach any player
Data freshness Yesterday's snapshot The moment it happened
Update frequency Once per night Every action, every time
Campaign timing Scheduled (e.g. 5 AM) Instant (seconds after action)
Best use case Reactivation, win-back, loyalty Upsell, celebration, follow-up
Do they affect each other? No. Completely independent channels. Events never update batch data.
Channel type Batch Events