Loyalty that talks to the same database as your checkout
X3 loyalty is not a bolt-on. Points, segments, journeys, and campaigns all read and write the same Postgres tables as your orders, inventory, and POS. No sync delay. No CDP contract. No second dashboard for your support team.
Tiers, Points & Perks
Core LoyaltyConfigurable scheme types that cover every earning model — from simple points accumulation to paid Prime-style memberships with billing integration.
Most loyalty platforms force you into one earning model. X3 ships four scheme types from day one: points-only (1 point per ₹1 spent), spend-cashback (return a percentage as wallet credit), tiered perks (Silver/Gold/Platinum with escalating benefits), and paid membership (an annual or monthly subscription that unlocks exclusive pricing, free shipping, or dedicated support — billed via the same payment infrastructure as your orders).
Tier evaluation runs on every qualifying event — order placed, return processed, referral completed, review submitted — not a nightly batch job. A customer who crosses the Gold threshold at 11:58 PM gets their Gold welcome email and benefits at 11:59 PM, not the following morning.
Points are tracked at receipt line-item granularity. When a customer disputes a missing earn, you pull the exact order line, the earn rule that applied, the multiplier in effect at that moment, and the wallet transaction ID — all from one query. No "email your loyalty provider" — your support team resolves it in 90 seconds.
Paid memberships integrate with the billing engine: prorate on upgrade, grace-period on payment failure, auto-downgrade on lapse. The membership state is a first-class tenant in the loyalty graph, not a separate subscription tool stapled on.
- 4 scheme types: points, cashback, tiered perks, paid membership
- Real-time tier evaluation on every event — no nightly batch
- Receipt line-item granularity for every earn/burn event
- Paid membership billing via native payment infrastructure
- Proration, grace-period, and auto-downgrade on lapse
- Export-ready audit trail for dispute resolution
- Configurable point expiry, rounding rules, and multipliers
- Bonus earn on specific SKUs, categories, or campaigns
Segments on Raw Events
Native CDPA visual rule builder over your actual platform events — no separate CDP, no sync pipeline, no 24-hour lag. Segments evaluate continuously against the same database your storefront reads.
X3's segmentation engine reads directly from the event ledger that your storefront, POS, OMS, and loyalty engine all write to. There is no ETL, no warehouse sync, and no third-party CDP contract. Segment membership is always at most seconds stale — because it is computed in the same Postgres cluster where the event was written.
The visual rule builder supports AND/OR nesting with unlimited depth, time-windowed conditions ("placed 3+ orders in the last 90 days"), and frequency-based rules ("returned more than 20% of lifetime GMV"). Every platform event dimension is available: session (device, channel, UTM), order (SKU, category, brand, discount used), return (reason code, restocking fee), loyalty (tier, wallet balance, last redemption), and support (ticket count, resolution time, CSAT score).
Calculated fields are first-class: LTV (net of returns and refunds), AOV (rolling 12-month), purchase frequency (median inter-order days), and days-since-last-order are all computed columns available in the rule builder without writing SQL. For power users, the Custom Formula field accepts arbitrary SQL expressions against the event schema.
Segments evaluate continuously — not once a day, not on a cron. When a customer places an order that pushes them past a threshold, they enter the segment within the next evaluation tick (sub-5 minutes). This is the same latency profile that would require a streaming CDP in a conventional architecture.
- AND/OR rule nesting with unlimited depth
- Time-windowed conditions with arbitrary lookback periods
- All platform event types: session, order, return, loyalty, support
- Calculated fields: LTV, AOV, purchase frequency, days-since-last-order
- Custom SQL expressions for advanced segments
- Continuous evaluation — sub-5 minute segment membership updates
- No CDP contract, no ETL pipeline, no warehouse dependency
- Segment size preview before save
Triggered Campaigns
Marketing AutomationEvent-based campaigns across email, SMS, and WhatsApp — with Mailgrid deliverability infrastructure, per-campaign A/B testing, and revenue attribution that traces back to the originating trigger.
Triggered campaigns in X3 fire on platform events, not scheduled sends. The trigger library covers: order completed, cart abandoned (configurable timeout: 30 min / 2h / 12h / 24h), tier upgraded, tier at risk of downgrade, birthday, back-in-stock, first purchase anniversary, and custom event (any event in the ledger can be a trigger).
Channels: Mailgrid email (shared or dedicated IP, DKIM/SPF configured per tenant, SPF alignment enforced, reputation dashboard built in), SMS via Twilio or Exotel (India), and WhatsApp Business API via configured WABA. Each channel is independently throttled — a customer who opted out of SMS still gets the email.
Every campaign supports A/B testing on subject line (email), message body (all channels), send time (fixed vs send-time-optimized), and CTA copy. Traffic split is configurable (50/50 default, adjustable to any ratio). Statistical significance is surfaced in the campaign report — you see conversion rate, revenue per recipient, and 95% confidence interval before you declare a winner.
Revenue attribution is causal, not last-click. X3 traces the originating trigger event through to order completion using the customer identifier and a configurable attribution window (1 / 3 / 7 / 14 / 30 days). Campaign revenue, influenced revenue (order placed during window but not triggered-path), and zero-touch revenue are reported separately so you have an honest picture of campaign lift.
- Trigger library: order, cart abandon, tier change, birthday, back-in-stock
- Channels: Mailgrid email, SMS (Twilio/Exotel), WhatsApp Business API
- A/B test subject, body, send time, and CTA
- Statistical significance dashboard with 95% confidence interval
- Causal revenue attribution with configurable window (1–30 days)
- Independent channel opt-out tracking per customer
- Dedicated IP ramp, DKIM/SPF per tenant, reputation dashboard
- Custom event triggers from any event in the platform ledger
Journey Builder
Automation EngineA visual multi-step automation canvas with conditional branching, wait steps, goal-based exit, and a dry-run mode. Every send is tracked as a node_run record for full auditability.
The Journey Builder is a directed-graph automation engine, not a linear drip sequence. You build journeys by connecting typed nodes on a visual canvas. Each node has a specific contract:
Trigger node — the entry point. Supported triggers: all campaign triggers plus segment entry (a customer entering a dynamic segment) and API trigger (for custom integrations). A journey can have multiple trigger nodes with independent entry conditions.
Wait node — hold the customer for a fixed duration (minutes to weeks), until a specific date/time, or until a condition is true ("wait until inventory > 0 for SKU the customer viewed"). Wait nodes are non-blocking — the journey engine polls pending waits on a configurable interval (default: 5 minutes for time-based, event-driven for condition-based).
Condition node — branches the journey based on any event or profile attribute. Branch count is unlimited. Common patterns: "has customer placed a second order? yes → VIP branch, no → re-engagement branch."
Action node — sends a message (email, SMS, WhatsApp, push) or performs a platform action (assign loyalty tier, add to segment, issue wallet credit, create a support ticket). Action nodes fail gracefully — a failed SMS send does not kill the journey; the failure is logged to node_runs and the journey continues.
A/B Split node — randomly routes a percentage of traffic to two or more branches. Used for testing entire journey branches, not just individual messages.
Goal node — marks the desired outcome (e.g., "placed an order"). Customers who reach the goal exit the journey and are counted as converted in the journey report. Goal attribution is used to calculate journey revenue.
Journeys support live sends and dry-run mode. In dry-run, all nodes execute and node_runs records are written, but no messages are delivered and no platform actions are committed. This lets you validate journey logic against real customers before going live.
- 7 node types: trigger, wait, condition, action, A/B split, goal, exit
- Wait nodes: fixed duration, date/time, or condition-based (non-blocking)
- Unlimited branching depth in condition nodes
- Action nodes: email, SMS, WhatsApp, push, tier assign, wallet credit
- Goal-based exit with causal revenue attribution
- Dry-run mode — full logic execution, zero message delivery
- node_runs table tracks every execution for audit and debugging
- Multiple entry triggers per journey with independent conditions
Cross-Brand Loyalty Pool
Multi-TenantOptional points pooling across non-competing tenants in the same X3 network — with operator-controlled redemption scope, pooled vs brand-specific earn rules, and a reactivation program for dormant members.
For multi-brand operators or networks of non-competing retailers (e.g., a food court, a mall group, or a franchise network), X3 supports a cross-brand loyalty pool. Pool membership is opt-in at the tenant level and requires explicit configuration — no tenant's points are shared without their deliberate participation.
Within a pool, points earned at any participating brand are credited to the member's pooled wallet. The redemption scope is configurable: pooled wallet can be redeemed at any participating brand (fully pooled), only at the brand where the customer currently has the highest spend (home-brand preference), or only at the originating brand (brand-siloed earn, pooled visibility only).
Pool analytics surface the metrics that matter for network operators: cross-brand visit rate (members who shop at 2+ brands in the pool over 90 days), basket uplift from cross-brand members vs. single-brand members, and reactivation lift (customers who returned to a brand after redeeming pooled points earned elsewhere).
The reactivation program is a preconfigured journey type: customers who have been inactive at Brand A for 60+ days but active at Brand B receive an automated outreach from Brand A with a pooled-points reminder and a time-limited double-earn event. This consistently drives 8–15% reactivation rates in networks where X3 has deployed it.
- Opt-in pool participation — no implicit sharing between tenants
- Configurable redemption scope: full pool, home-brand, or siloed
- Pooled vs brand-specific earn rule separation
- Cross-brand visit rate and basket uplift analytics
- Preconfigured reactivation journey for dormant members
- 8–15% reactivation rates observed in deployed networks
- Pool admin dashboard for network operators
- Per-brand redemption caps and exclusion lists
Receipt-Level Loyalty History
AuditabilityEvery earn and burn event is tied to its originating order line. Migrated histories are imported with full fidelity. Dispute resolution happens at the receipt line, not the wallet balance.
The loyalty ledger in X3 is an append-only event log, not a mutable balance column. Every entry has a mandatory reference to its origin: an order_id + order_line_id for earns, a redemption_id for burns, a campaign_id for bonus credits, and an admin_adjustment_id (with reason code and approver) for manual corrections.
This means the current wallet balance is always derivable from the ledger history — it is never stored as a standalone value that can drift out of sync. The balance displayed to the customer and the balance verified by your support team are always computed from the same source of truth.
When a customer migrates from another loyalty platform, their historical earn/burn events are imported as ledger entries with source=MIGRATION and a reference to the original receipt identifier from the source system. The migrated history is queryable, exportable, and available in dispute resolution — you can tell a customer "your 2,400 points from your purchase last October were migrated from your old account on [date]" with a full audit trail.
Dispute resolution at the receipt level means your support team can pull up a specific order, see exactly which earn rule applied, what multiplier was active, whether a promotion stacked, and what the resulting credit was — all in one screen. Disputes are resolved in under two minutes on average, compared to the typical 20–45 minutes when loyalty data lives in a separate system.
- Append-only ledger — balance always derivable from event history
- Every earn tied to order_id + order_line_id
- Every burn tied to redemption_id with cart context
- Manual adjustments require reason code and approver ID
- Migration imports as auditable MIGRATION-source ledger entries
- Full historical portability — exportable per member in CSV/JSON
- Support team resolves disputes in under 2 minutes
- Real-time balance consistency — no sync drift possible
Seven node types. One canvas. Full auditability.
A Journey in X3 is a directed graph, not a drip sequence. Each node has a typed contract. Every execution is written to node_runs — the audit table that lets your team replay, debug, and verify every customer path.
Entry point. Fires on platform events (order, cart abandon, tier change, segment entry, API call) or scheduled conditions. A journey can have multiple trigger nodes.
Holds the customer for a fixed duration, until a date/time, or until a condition is true (e.g., inventory restored). Non-blocking — other journeys continue independently.
Branches on any event or profile attribute. Unlimited branch count. Common: 'placed 2nd order?' → VIP vs re-engagement branch.
Sends email, SMS, WhatsApp, or push; or performs a platform action: assign tier, issue wallet credit, add to segment, create support ticket. Fails gracefully.
Routes traffic to two or more branches by configurable percentage. Tests entire journey branches, not just messages. Winner declared by goal conversion rate.
Marks the desired outcome (order placed, tier reached, review submitted). Customers who reach the goal exit and are counted as converted. Powers causal attribution.
Dry-run mode
Before going live, run the journey in dry-run mode. Every node executes in full — conditions evaluate, waits are simulated, branching logic runs — but no messages are delivered and no platform actions are committed. The node_runs table is written in full, so you can inspect which customers would have received which message at which step, and why. This is the only reliable way to validate a journey that branches on purchased-SKU, tier, and segment simultaneously before your campaign window opens.
Why a native events-on-Postgres approach beats a separate CDP
A Customer Data Platform solves a data residency problem — your events are scattered across Shopify, Klaviyo, Yotpo, and your warehouse, and you need a unified profile. X3 eliminates that problem at the source: all events originate in one schema.
Latency
Separate CDP
15 minutes to 24 hours for a segment to reflect a new order. Campaign triggers fired on stale data.
X3 Native
Sub-5 minutes. Segment evaluation runs against the same write cluster as the order event. A tier-upgrade journey fires before the post-order confirmation email finishes rendering.
Consistency
Separate CDP
Segment membership and loyalty balance are in different systems. A refund in OMS may not be reflected in the CDP segment for hours. Double-earn risk on disputed orders.
X3 Native
Single source of truth. A return event writes to the loyalty ledger and the event log atomically. The refunded order cannot re-trigger an earn — the event chain is inspectable.
Cost
Separate CDP
CDPs are priced on MAU or event volume. A 100k MAU brand on Segment + Klaviyo + Yotpo mid-tier pays ₹45–90L/year for the data layer alone.
X3 Native
Loyalty, segments, and campaigns are included in the X3 platform tier. There is no per-event charge, no MAU overage, and no annual renegotiation with three vendors.
Support team UX
Separate CDP
A customer dispute requires opening Yotpo for loyalty history, Klaviyo for campaign history, and Shopify for order history. Three tabs, three logins, no unified timeline.
X3 Native
One admin screen shows the full customer timeline: orders, loyalty earns/burns, segment membership changes, journey step executions, and support tickets — all from one query.
X3 Loyalty vs. Klaviyo + Yotpo vs. Salesforce Marketing Cloud vs. custom build
Each alternative solves part of the problem. X3 solves it without assembling a stack.
| Capability | X3 | Klaviyo + Yotpo | Salesforce MC | Custom Build |
|---|---|---|---|---|
| Loyalty scheme types | 4 native (points, cashback, tiered, paid membership) | Points + tiers via Yotpo; cashback = custom dev | Points only via Marketing Cloud Loyalty | 12–18 months to build reliably |
| Segmentation data source | Same Postgres as checkout — sub-5 min lag | Klaviyo: sync from platform via API, 15 min–1h lag | Data Extensions: ETL from commerce platform, 1–24h lag | Custom warehouse + dbt + CDP integration |
| Journey builder | Native 7-node graph engine, dry-run, node_runs audit | Klaviyo Flows: strong, but no platform action nodes | Journey Builder: enterprise-grade, requires specialist config | 6–12 months, typically replaced within 2 years |
| Receipt-level audit trail | Native append-only ledger, dispute resolution in <2 min | Yotpo: transaction log, but not line-item level | Not included — requires data warehousing layer | Typically last-thought, retrofitted poorly |
| Cross-brand pooling | Native with configurable redemption scope | Not available | Custom loyalty object + Data Cloud — $$$ | Major architectural decision — rarely done right |
| Revenue attribution | Causal, event-chain traced, configurable window | Klaviyo: last-click by default; causal optional | Configurable but requires Einstein Attribution add-on | Usually last-click, rarely validated |
| Annual platform cost (mid-market) | Included in X3 platform tier | ₹35–80L/year combined (Klaviyo + Yotpo mid plans) | ₹1.2–3.5Cr/year (Marketing Cloud base + Loyalty module) | ₹80L–2Cr build + ₹30–60L/year maintenance |
Cost estimates based on publicly available pricing for 100k MAU / 500k email sends per month as of Q1 2026. Your mileage will vary.
Loyalty in the real world
Four distinct operator types, four distinct loyalty configurations — all running on the same platform.
D2C Repeat-Purchase Brands
High repurchase categories (food, supplements, consumables) need a loyalty program that converts first-time buyers into subscribers without a separate subscription platform. X3 runs a points-on-every-order scheme with a paid membership unlock (free monthly delivery + 10% price lock) billed via the native payment infrastructure. The birthday trigger with a personalized product recommendation pulls 23% conversion on send.
- 23% birthday campaign conversion
- 2.4x LTV for membership subscribers vs non-members
- Day-1 tier evaluation on first purchase
Restaurant & Catering Loyalty
Multi-outlet restaurants need loyalty that works across physical POS terminals and online ordering, with outlet-level analytics. X3's POS integration writes loyalty earn events in real time at the terminal — no end-of-day sync — so a diner earns at the counter and redeems on the next online or catering order from the same balance. Outlet-level cohorts show which location actually drives repeat visits.
- Real-time earn at POS terminal — zero batch delay
- One balance across dine-in, online and catering
- Journey triggers on 60-day inactivity per outlet
Multi-Location Retail
High-consideration, lower-frequency purchases need a loyalty program centered on engagement (reviews, referrals, in-store events) rather than pure transaction volume. X3's custom event trigger lets VisualPoint award points for verified review submissions, workshop attendance (scanned QR), and referral completions — all tracked in the same ledger as purchase points.
- Custom event points: reviews, workshops, referrals
- Segment: 'high-LTV, low-recency' re-engagement journeys
- Receipt-level audit for ₹4,000+ camera return disputes
Subscription Commerce
Subscription brands need loyalty that accelerates upgrade from monthly to quarterly plans and reduces churn on payment failure. X3's paid membership tier integrates with the billing engine: a grace-period journey sends an SMS 3 days before a subscription lapses, offering a loyalty point bonus for updating payment details. Downgrade happens automatically on day 7 of non-payment, preserving the customer relationship rather than a hard cancel.
- Grace-period journey reduces involuntary churn by ~30%
- Tier downgrade on lapse vs hard cancel reduces reactivation cost
- Subscription upgrade offers via Journey A/B split
On this page — jump to
QuantumOS Dispatch
Weekly insights for commerce operators
100 competitive moats, real operator stories, platform updates. No fluff. Every Tuesday.
No spam. Unsubscribe any time. 60k+ readers.