UCRM β€” User Manual

For CRM operators, retention managers, VIP managers, and compliance officers.

This guide walks you through the day-to-day work you do inside UCRM: finding players, launching campaigns, managing journeys, reading reports, and keeping your list healthy. No technical background required.

If you are looking for the developer or integrator documentation (API reference, adapter contract, deployment), open the Technical Documentation instead.


Table of Contents

  1. Welcome β€” what UCRM does for you
  2. Your first day β€” logging in and finding your way around
  3. The main dashboard β€” reading the numbers
  4. Working with players
  5. Segments β€” grouping players together
  6. Templates β€” your message library
  7. Campaigns β€” one-shot broadcasts
  8. Journeys β€” automated player flows
  9. The retention flow, explained
  10. Bonus codes
  11. Reports and CSV exports
  12. List quality β€” protecting your sender reputation
  13. Identity conflicts β€” catching multi-account players
  14. VIP tiers
  15. Costs tracker
  16. Multi-language player communication
  17. Compliance essentials
  18. A suggested weekly rhythm
  19. Troubleshooting β€” common questions
  20. Glossary in plain language

1. Welcome β€” what UCRM does for you

UCRM is where you get to know your players, talk to them, and see the results. Think of it as three things joined together:

UCRM does not run the casino. It doesn't hold player wallets, doesn't process deposits or bets, doesn't award bonuses directly. All of that stays with the gaming platform. UCRM sits alongside, watching what happens, and helping you talk to players about it.

Who uses UCRM day to day

Whichever role you play, you'll live mostly in the sidebar menu on the left of every page.


2. Your first day β€” logging in and finding your way around

Logging in

Open the admin console at your organisation's admin URL (typically https://app.casinocrm.io/). You'll be asked to sign in β€” UCRM uses Clerk for authentication, which means you log in with your work email and either a password, magic link, or single-sign-on (Google, Microsoft) depending on how your team configured it.

The first time you log in, someone with admin rights in your organisation needs to have invited you. If you see "Membership required" or a blank screen after login, ask your admin to add you under Settings β†’ Team.

The top bar

Once logged in, the strip across the top of every page shows:

Element What it does
Organisation switcher (left) If you belong to more than one organisation (e.g. you're a consultant working for two casinos), switch which one you're managing right now. Everything below reloads scoped to that org.
Project switcher Some organisations have separate "dev" and "prod" projects, or one project per brand. Pick which one you're working with. Most operators only see one.
Display currency picker Toggle whether numbers on the dashboard and reports show in EUR, USD, GBP, or your local currency. This only changes how numbers look β€” the underlying ledger keeps everything in the transaction's own currency.
User menu (right) Your profile, sign-out, and team management shortcuts.

The sidebar

Down the left is the main menu. Sections roughly grouped by daily importance:

Common navigation shortcuts


3. The main dashboard β€” reading the numbers

The dashboard is your morning coffee. Give it a minute every day and you'll catch problems before they become panics.

The four rows

Row 1 β€” Last 24 hours. Quick pulse: depositor count, deposit sum, withdrawal sum, first-time-depositor (FTD) count, net gaming revenue (NGR), daily active users (DAU). Compare these to the previous 24-hour period; the trend arrow tells you if you're up or down.

Row 2 β€” 30-day trends. For each KPI you get a sparkline. Hover to see a specific day's exact value. This is the row where you catch slow leaks β€” a small daily drop invisible on its own becomes obvious when you see 28 days of it.

Row 3 β€” Manager health metrics. Bounce rate over 7 days, unsubscribe rate, count of active journey runs, list quality issues open. If your bounce rate is climbing, your list has a problem before the ESP starts blocking you.

Row 4 β€” Recent activity. Latest deposits, latest signups, latest campaigns sent. Click any row to jump to the underlying detail.

What each number actually means

Everything is clickable

Every KPI tile drills down to the individual rows behind the number. Click "12 FTDs today" and you get a table of those 12 players β€” name, deposit amount, timestamp, country β€” and you can jump to any of them.

The "Include excluded" toggle

By default the dashboard hides players you've flagged as test, streamer, or fraud. That way your own accounts don't inflate the numbers. Turn the toggle on temporarily if you want to see the raw picture including those players (usually for fraud audits).


4. Working with players

Finding a player

Go to Players. The search box at the top accepts:

Below the search, the table has column filters β€” narrow by country, currency, KYC status, exclusion status, signup date range.

The player detail page

Click any player row and you open their detail page. It has several tabs / sections:

Header

Aggregates card

Platform accounts β€” the two-layer identity picture

Journey memberships β€” which automated flows this player is inside right now

Recent sends β€” the last 20 messages we sent to this player

Event timeline β€” signups, deposits, bets, sessions, KYC changes β€” in chronological order

Editing the player's language

Every player has a Language field. Options:

Once set, every campaign, journey message, and template preview uses that language.

Excluding from statistics

Sometimes you want a player kept in the database but excluded from dashboard numbers. Common reasons:

Set from the player detail page. Also possible in bulk from the Players list (checkbox rows β†’ Bulk actions β†’ Exclude).

Important: excluded-from-stats players still receive messaging. If you want to stop messaging too, use Suppress in list quality (or set a self-exclusion for regulatory cases).

Merging two players

If you notice UCRM has two Persons that should be one (same real person, different signup account, but the deduplication didn't catch it because the email/phone were different), you can merge them manually.

  1. Open Player A β†’ Merge button β†’ paste Player B's id
  2. Confirm the preview (which one becomes the survivor, which one dissolves)
  3. Aggregates are summed. Platform accounts are re-parented. Journey runs are combined.

Merges are logged in the audit trail. They are reversible via engineering escalation but not through the UI.

GDPR β€” export and delete

Both actions require a second confirmation. Both are logged in audit.


5. Segments β€” grouping players together

A segment is a saved question about your players. "All Argentinian players who haven't deposited in 30 days." "Players who deposited more than $500 this month." "VIPs who haven't logged in this week."

Segments are the raw material for campaigns and for triggering journeys.

Creating a segment

Segments β†’ New segment. Give it a clear name and description β€” you'll thank yourself in three months when you're wondering why segment #47 exists.

Add rules one at a time:

Combine rules with AND (all must match) or OR (any matches). You can nest groups for complex logic.

The live count at the top updates as you type β€” a segment showing "0 players" is a signal something's wrong with your rules.

Useful segment recipes

"AR players never deposited" β€” for retention pushes to a specific geo

"Lapsed depositors 30-60d" β€” winback candidates

"VIP without login this week" β€” proactive VIP intervention

"Fresh signups no KYC" β€” reminder push

Preview and export

Every segment has a Preview players button that shows the first 100 matches. Use this before firing a campaign to confirm you're targeting the right people.

The Export CSV button dumps the whole segment (email, name, phone, currency, key aggregates) for external analysis.

Freshness

Segments are re-evaluated every time they're used β€” the day of a campaign, at the moment of a journey trigger. There's no caching. Whatever the current player table says is what the segment returns.


6. Templates β€” your message library

A template is a reusable message: email, SMS, WhatsApp, Telegram, push, or webhook. You write it once, and campaigns and journeys reference it.

The template list

Templates shows every template you own. Filter by:

Category is used for filtering and for defaults; picking the right one is worth thirty seconds.

Creating a new template

Templates β†’ New template:

  1. Give it a clear name β€” something like Reactivation 7d β€” REACT7D (100% match $80). Future you will search this.
  2. Pick a channel β€” this can't be changed later. If you want the same message on two channels, create two templates.
  3. If email: write a subject and a body (rich text editor with WYSIWYG toolbar; toggle to HTML source for direct editing).
  4. If SMS: write a body (plain text, keep under 160 characters if you want single-segment sending).
  5. Pick a category.
  6. Choose status = draft (still working on it) or active (ready to be used).

Merge tags β€” using variables

Inside your body and subject you can insert placeholders that get filled in per player:

The "+ Variable" dropdown in the editor toolbar shows the full list. Unknown variables silently render as empty β€” always preview before sending.

Translations β€” reaching non-English players

Every email and SMS template has a Translations section. Add one variant per language: Spanish, Portuguese, Czech, Polish, German, French, Italian.

Preview and send-test

The right pane of the template detail page is a live preview β€” it renders the template with sample variable values. Below the preview is a Send test panel: type any email or phone, pick which provider to route through, force a language if you want, and hit Send to get the real message in your own inbox / phone.

Use send-test before every campaign launch. It costs pennies and catches typos.

Best practices for messages


7. Campaigns β€” one-shot broadcasts

A campaign is a single send to a segment. Use campaigns for time-sensitive stuff: a weekend promo, a payment method announcement, a tournament kickoff. If you want a message that fires on some player behaviour (welcome on signup, 7 days after registration…), use a Journey instead.

The campaign lifecycle

draft β†’ scheduled β†’ sending β†’ completed (or cancelled / errored).

Creating a campaign

Campaigns β†’ New campaign. Give it a name. Then:

  1. Pick the segment β€” who receives it.
  2. Pick the template β€” what they receive.
  3. Pick the provider β€” which sending route to use (typically the default is fine).
  4. Set the schedule β€” "Send immediately" or a specific timestamp. Times are in your tenant's timezone.
  5. Save as draft.

Preflight β€” the crucial step before Send

Every campaign has a Preflight button. Always click it. It runs a dry-run and tells you:

If preflight is Red, fix the problem before sending. Common fixes:

Sending

Send now or Schedule β€” the API queues one message per recipient. Delivery is rate-limited per provider so you don't get flagged for spamming. A campaign to 10,000 recipients typically finishes in 10-30 minutes depending on the throughput cap.

Reading campaign results

On the campaign detail page after sending, you get:

Below the numbers is a per-recipient table you can filter and export. Click any row to see the actual delivery record.

Conversion, if you've wired it: how many recipients deposited within N days of receiving the campaign, and the value of those deposits. This is where ROI happens.

When not to use a campaign


8. Journeys β€” automated player flows

A journey is an automatic multi-step message flow. Each player enters, advances through waits and conditions and sends, and eventually exits. Journeys are how your onboarding, retention, transactional, and VIP flows run without you touching them.

Anatomy of a journey

Every journey has:

Viewing your journeys

Journeys shows every journey with its trigger, node count, currently-running count, and status.

Common journeys on a typical tenant:

Journey detail page

Click any journey to open its detail. You see:

Pausing and resuming a journey

Big red Pause button. When paused:

When you resume, new entries start again. Cancelled runs never restart automatically.

Editing a journey

The graph editor lets you drag-and-drop steps. Add a new wait, insert a send-message between two existing steps, wire a condition to skip the next step if the player has deposited. Small edits are safe; you can save changes any time.

Big changes (rearranging the whole flow) are safer in a copy β€” clone the journey, edit the copy, test with a small trigger, then swap once you're happy. Existing runs on the old graph will finish on the old graph; new entries will use the new one.

Adding a step

For a send_message step: pick the template first, then pick the provider (which sending route). The rest happens automatically.

For a condition step: pick a field (usually total_deposited), pick an operator (>, <, =, …), pick a value, then wire the "if true" and "if false" branches. Typical use: check if the player deposited before sending the next nudge β€” if yes, exit the journey; if no, continue.

Journey best practices


9. The retention flow, explained

The most complex live journey is "Reactivation β€” never deposited". It's the multi-touch nudge for players who registered but didn't fund the account. Here's exactly what it does, in plain language.

The timeline

Day Channel What happens
0 β€” Player registers. Journey run starts.
3 Email Winback β€” welcome bonus (never deposited) β€” "we've saved your $2,250 + 150 spins welcome bonus".
7 Email Reactivation 7d β€” REACT7D β€” "100% match up to $80, use code REACT7D".
10 SMS REACT7D SMS reminder β€” 3 days after the email, we chase by text.
14 Email Reactivation 14d β€” REACT14D β€” "150% match up to $500, use code REACT14D" (bigger deal, second push).
17 SMS REACT14D SMS reminder β€” 3 days after the email.
30 Email Reactivation 30d β€” CHIP10 β€” "$10 free chip, no deposit needed, code CHIP10".
33 SMS CHIP10 SMS reminder β€” last friendly push.
90 Email Reactivation 90d β€” Sunset β€” "still interested? one last email".

The deposit guard

Before every one of those sends, the journey runs a condition check: did the player deposit yet?

That's why nobody who deposits keeps getting nudged. The instant a deposit event lands from the platform, the guard flips at the next step and the run ends cleanly.

Language handling

Every message in the flow has an English body and a Spanish body. The system picks based on the player's currency and language preference:

You never have to think about this per player β€” it just happens.

Cost per player, full flow

For a typical ~200 Argentinian player cohort, the SMS chase costs about $46 total for the whole 90-day flow.

Overriding the flow for a specific player

You can cancel a player's journey run from their detail page β†’ Journey memberships β†’ click the active run β†’ Cancel run. Use this when you know a player has been in touch offline and shouldn't get automated nudges.

Turning the whole flow off

Journeys β†’ Reactivation β€” never deposited β†’ Pause. New signups won't enter; existing runs continue. To also stop existing runs, cancel them from the runs table.


10. Bonus codes

The Bonus Codes section holds your reference table of promotional codes: what each code offers, in what currency, with what conditions.

Why it exists as its own thing: templates reference codes by name (REACT7D, WELCOME2250, CHIP10) but the actual amount someone gets in Argentinian pesos versus US dollars is different. The bonus code table maps the code + currency pair to the specific offer.

The table

Each row has:

Adding or updating a code

When your platform changes a bonus (raises the ceiling, changes the wager), update the corresponding row here. Templates that reference {{bonus.max_bonus}} will pick up the new number automatically on the next send.

Bonus Codes β†’ New entry or click any existing row to edit.

If a bonus is offered in multiple currencies, you create one row per currency, all sharing the same code string but with different amounts.

Retiring a code

Set is_active = false on the row. The code stays in the DB for historical reference but new sends won't reference it. If you delete the row, historical send records lose their bonus context β€” usually you want deactivate, not delete.


11. Reports and CSV exports

Reports is where you answer questions about revenue, activity, and bonus economics over a date range.

The four main reports

Report Question it answers
Daily summary For each day, how many depositors, total deposits, withdrawals, GGR, NGR?
Wagering Per player, how much did they wager over the period?
Bonus grants Per player, what bonuses were granted, redeemed, expired?
Top players Sorted by NGR, deposit sum, or bet count β€” who are your best players over the period?

Running a report

Pick the report β†’ set the date range (default: last 7 days) β†’ pick the currency you want amounts shown in β†’ click Generate.

Small reports return immediately. Large reports (> 100k rows) queue in the background and email you a download link when ready.

Excluded players

By default reports exclude players flagged as test, streamer, or fraud. There's a checkbox to include them; use it for fraud audits or to see the raw picture.

The currency toggle

Every amount in a report is shown in the tenant's base currency (usually EUR) or your display currency choice (top bar). The underlying data is stored in the transaction's native currency and converted at the transaction's date FX rate.

Column headers include the currency code so there's no confusion: deposit_sum_eur, ngr_eur.

CSV export

Every report has an Export CSV button. The CSV mirrors the on-screen view: same columns, same filter, same currency. Open in Excel, Google Sheets, or feed to your BI tool.

Drill-down

Every summary tile is clickable. "Deposits = 47 EUR 12,340" β†’ click β†’ get the 47 individual deposit rows with player, amount, method, timestamp.


12. List quality β€” protecting your sender reputation

Your sender reputation is fragile. Every hard-bounce email you send hurts your ability to reach your good addresses. Every spam-flagged SMS burns your relationship with the carrier. List quality is where you spot problems early.

The dashboard

List Quality β†’ Email or List Quality β†’ SMS. Each panel shows:

Reacting to issues

Every row has an action menu:

The suppression list

Any address that has been suppressed is blocked from receiving new messages, regardless of segment or journey. Suppression reasons:

SMS-specific insights

Weekly rhythm

Give this 3 minutes on Monday morning. If nothing is red, move on. If anything jumps, deal with it before launching new campaigns that could compound the problem.


13. Identity conflicts β€” catching multi-account players

The Identity Conflicts page surfaces Persons whose account patterns look like multi-accounting β€” one real human with many registrations, usually to farm bonuses.

What clusters look like

Each cluster shows:

Common patterns:

Reacting to a cluster

Two big buttons per cluster:

Fraud tag does NOT stop the platform. UCRM only affects CRM view + reports + our own messaging. If you want to freeze the player at the gaming platform, do that separately in the platform's admin.

When to review


14. VIP tiers

Settings β†’ VIP tiers lets you configure your loyalty ladder. Default seed: Bronze β†’ Silver β†’ Gold β†’ Platinum.

What a tier holds

Auto-promotion

A background job runs nightly and promotes anyone who crossed a threshold. Demotions are always manual β€” regulatory sensitivity means we don't auto-strip status.

Using tiers in messages

Templates can reference {{current_tier_code}} and render tier-specific content. Segments can filter by vip_tier in [Gold, Platinum] to build VIP-only campaigns.

Manual tier change

Player detail page β†’ VIP tier dropdown. Overrides auto-promotion until the player next crosses a threshold (then auto takes over again).


15. Costs tracker

Costs is a simple ledger for your CRM-related spending. Not a full accounting system β€” a place to log spend so you can pair it with revenue for ROI.

Adding a cost

Costs β†’ New cost:

Amount is stored in native currency and converted to base currency at the entered-date FX rate. Attachments are stored server-side (up to 10 MB per file).

Reporting on costs

The Costs list aggregates by category / vendor / month. Use it to answer:


16. Multi-language player communication

UCRM picks a message language per player, per send, using this order:

  1. The player's explicit language setting on their detail page (Language = Spanish, for example)
  2. The tenant's currency-to-language map β€” configured under Settings β†’ Language & i18n (e.g. "ARS β†’ Spanish", "BRL β†’ Portuguese")
  3. The tenant default language β€” usually English
  4. English as final safety net

Configuring the currency-to-language map

Settings β†’ Language & i18n shows:

Example config:

Currency Language
ARS Spanish (es)
BRL Portuguese (pt)
USD (not set β€” falls to default English)
EUR (not set β€” falls to default English)

Adding a translation to a template

Templates β†’ click any template β†’ Translations section (at the bottom of the editor) β†’ for each language, write a subject + body variant. Leave a language blank to fall back to the main body.

How players end up with the right language

You can override in bulk from the player list: checkbox multiple players β†’ Bulk actions β†’ Set language.


17. Compliance essentials

UCRM is designed to make regulatory life easier. Here's what you get for free.

GDPR β€” right to access

Player detail page β†’ Export data β†’ produces a JSON bundle with every piece of personal data UCRM holds about the player: their record, aggregates, all sends, all events, all audit entries mentioning them. Delivered as a download or emailed to your data-protection officer.

GDPR β€” right to erasure

Player detail page β†’ Delete player β†’ hard delete. Confirms twice. All personal data is removed; audit-log entries are pseudonymised so the trail stays intact but personal fields (name, email, phone) are nulled.

Self-exclusion (RG)

If a player self-excludes at the platform level (or via a UCRM API call from your integration), UCRM:

Nothing needs to be done manually β€” the whole system honours self-exclusion end-to-end.

Audit log

Every admin mutation is logged. Audit in the sidebar shows the append-only log with filters by user, resource, date range. Never edited, never deleted. This is the trail regulators care about.

Fields per entry:


18. A suggested weekly rhythm

If you're new to UCRM and wondering "what should I actually do every week?", here's a starter routine.

Monday morning (10 minutes)

  1. Open the Dashboard. Note the 7-day trend. Anything red or dropping? Investigate.
  2. List Quality β†’ Email and List Quality β†’ SMS. Suppress obvious problem addresses. Mark OK anything that's a false positive.
  3. Identity Conflicts. Any new clusters? Skim them, flag anything abusive.

Wednesday (20 minutes)

  1. Reports β†’ Daily summary β€” pull the last 7 days. Any day with wildly different NGR from the pattern? Dig in.
  2. Campaigns β€” review last week's sent campaigns. Which had good open / click / conversion? Which flopped? Note what to change next time.
  3. Journeys β€” glance at the active-runs count for each. Any stuck at zero (not triggering)? Any showing high error rate?

Friday (10 minutes)

  1. Plan the weekend / next week's campaigns. Preflight anything you'll send.
  2. Skim Audit log for the week. Any admin action that looks out of the ordinary?
  3. Update the Costs tracker with any new invoices.

Monthly


19. Troubleshooting β€” common questions

"I sent a campaign but nobody received it"

  1. Check the campaign status on its detail page. Is it sent or failed?
  2. If failed β€” click into the error message. Usually a provider config issue.
  3. If sent but bounces high β€” your list has degraded. Run List Quality review first.
  4. If sent but zero deliveries after 30 min β€” the provider is down. Check its status page.

"The dashboard number looks wrong"

  1. Verify the Include excluded toggle β€” you might be including or excluding fraud/test accounts unintentionally.
  2. Check the display currency β€” you might be looking at USD when your base is EUR.
  3. Check the date range β€” the default is 24 hours, sometimes you're expecting 7 days.
  4. Click into the tile to see the underlying rows β€” the drill-down explains the number.

"A player isn't getting our reactivation emails"

  1. Open their detail page. Do they show a Journey membership in the reactivation journey?
  2. If not: check if they meet the trigger criteria. Are they excluded from stats? Are they suppressed?
  3. If yes but no sends: look at the Recent sends tab. Any bounces or suppressions?
  4. Their language and default_currency_code β€” is there a template variant for that language?

"I need to stop all messaging right now"

Emergency stop:

  1. Journeys β€” pause every journey (bulk-select all, then Pause)
  2. Campaigns β€” cancel any scheduled campaigns
  3. Providers β€” set every provider to paused

New sends stop within one minute. In-flight sends currently in the provider's queue may still land β€” those are outside UCRM's control once handed off.

"A player's phone / email is wrong"

Player detail β†’ Edit section β†’ correct the value β†’ save. This updates the primary field. The platform account sub-table retains the historical value under first_phone / first_email for audit.

"How do I add a new admin user"

Top bar β†’ user menu β†’ Team β†’ Invite member. They receive a Clerk invitation email. Once accepted, they show up in the team roster with default role basic_member β€” promote to admin if needed.

"Something broke at 3am and nobody knows what"

Audit log shows every admin action with a timestamp. Filter by the time window and by resource. If the change happened via API not admin, the log entry shows the API key that made it.

For system-level failures (provider outage, worker crash), open a ticket with your engineering team β€” they have the operational monitoring dashboards.


20. Glossary in plain language

Terms you'll see across UCRM, translated for humans.


Have a suggestion for this manual? Open an issue on the CRM squad's tracker or drop a note in the #crm channel. Version 2026-08-14.