What are User Preferences?
User preferences are choices that users make about how they want to interact with your product and what communications they want to receive from you. They’re essentially permission settings and opt-in/opt-out controls that put users in the driver’s seat. Think of preferences as the contract between you and your users about communication boundaries. You’re asking: “How can we reach you, and what do you want to hear about?” They’re answering: “Here’s what I’m comfortable with.”The Simple Definition
User preferences are settings that control:- Which channels you can use to reach them (email yes, SMS no)
- What types of messages they want to receive (product updates yes, promotions no)
- How frequently they want to hear from you (daily, weekly, monthly)
- When you can reach them (respect quiet hours)
- “Send me product updates via email, but no promotional offers”
- “I want push notifications for important alerts only, not every comment”
- “Don’t contact me between 10 PM and 7 AM”
- “Send me a weekly digest instead of individual emails”
Why User Preferences Exist
From the user’s perspective:- Control: “I decide what lands in my inbox, not you”
- Relevance: “Only send me things I care about”
- Respect: “Don’t wake me up at 2 AM with a promotional push”
- Trust: “You’re asking my permission, not assuming it”
- Legal compliance: GDPR, CAN-SPAM, CCPA require opt-out mechanisms
- Better engagement: People who opt IN engage more than those who were auto-enrolled
- Deliverability: Fewer spam complaints = better inbox placement rates
- Brand reputation: Respecting preferences = users trust you more
- Reduced noise: Only message people who want to hear from you
The Lifecycle of User Preferences
1. Default state (new user):Types of Preference Controls
1. Channel-level (all-or-nothing per channel):- “Send me emails: YES / NO”
- “Send me push notifications: YES / NO”
- Simple, but inflexible
- “Send me promotional emails: YES / NO”
- “Send me product update emails: YES / NO”
- “Send me transactional emails: ALWAYS (can’t opt out)”
- Better: users stay subscribed to what they care about
- “Send me daily digest” (bundle all updates into one email)
- “Send me weekly summary”
- “Send me each notification as it happens”
- Best: prevents notification fatigue
- “Quiet hours: 10 PM - 7 AM” (no notifications during sleep)
- “Send digest at 9 AM every Monday”
- “Only send during business hours”
- Respectful: messages arrive when user is ready
The Golden Rule of Preferences
Ask once, respect forever. When a user says “no” to something:- ✅ Honor it immediately (no “are you sure?” nagging)
- ✅ Store it permanently (don’t ask again)
- ✅ Apply it everywhere (all campaigns respect this preference)
- ❌ Don’t try to sneak around it (“technically this is a different type of email”)
- ✅ Confirm their choice clearly
- ✅ Let them change their mind easily
- ✅ Don’t abuse the privilege (just because they said yes to product updates doesn’t mean spam them daily)
Why Preferences Matter
For users:- Control inbox fatigue (opt out of promotional emails, keep transactional ones)
- Choose communication channels (email yes, SMS no)
- Set frequency limits (daily digests, not every event)
- Better engagement (only message people who want to hear from you)
- Compliance (GDPR, CAN-SPAM, CCPA require opt-out mechanisms)
- Deliverability (fewer spam complaints = better inbox placement)
Types of Preferences
1. Channel Preferences (What to Reach Them On)
Definition: Which communication channels the user accepts messages through. Each channel has its own opt-out field and timestamp stored on the user profile. Channel opt-out fields:| Channel | Field | Default state |
|---|---|---|
email_opt_out | UNKNOWN (pending confirmation) | |
| SMS | sms_opt_out | NOT_OPTED_OUT |
whatsapp_opt_out | NOT_OPTED_OUT | |
| RCS | rcs_opt_out | NOT_OPTED_OUT |
| Push | push_opt_out | NOT_OPTED_OUT |
1—NOT_OPTED_OUT: user is reachable (default for SMS/WhatsApp/RCS/Push)2—OPTED_OUT: user explicitly opted out — all sends suppressed3—UNKNOWN: intent not yet established (default for Email)
_opt_out_at timestamp:
UNKNOWN rather than NOT_OPTED_OUT because email requires explicit confirmation before you can assume consent (GDPR). All other channels default to NOT_OPTED_OUT since they require an explicit action (push permission grant, phone number submission) to receive messages at all.
2. Category Preferences (What Type of Messages)
Definition: What topics or types of content the user wants to receive. Category preferences are custom attributes — you define the categories that make sense for your product and store them as profile attributes. Example:- User might want product updates but not promotional emails
- Transactional messages (order confirmations, password resets) typically can’t be opted out
- GDPR requires granular control (not just “all or nothing”)
3. Frequency Preferences (How Often to Message)
Definition: Controls how often users receive non-critical messages. Like categories, frequency preferences are custom attributes you define and check when building campaigns. Example:4. User Suppression (Block All Channels)
Suppression is a server-side lifecycle event that blocks all outbound messages for a user across every channel, regardless of their individual opt-out settings.| Lifecycle Event | Effect |
|---|---|
User Suppressed | Sets is_suppressed = true on profile — no messages sent on any channel |
User Unsuppressed | Clears the flag — message delivery resumes |
- User requests complete silence (GDPR “right to be forgotten” equivalent)
- Account fraud/abuse detected
- Account is past-due / in bad standing
Capturing Preferences
Method 1: In-App Preference Center
Best for: Letting users manage their own preferences (GDPR requirement) Example UI:Method 2: Email Unsubscribe Links
Best for: One-click opt-out from email campaigns (CAN-SPAM requirement) Example flow:- User receives promotional email
- Clicks “Unsubscribe” link at bottom
- Lands on preference page: “You’ve unsubscribed from promotional emails”
- Option to manage granular preferences or unsubscribe from all
Method 3: Onboarding Preference Collection
Best for: Setting preferences early (before first campaign) Example onboarding screen:- Sets expectations early (“we’ll email you weekly”)
- Reduces future unsubscribes (they opted in knowingly)
- Better engagement (only contact people who agreed)
Respecting Preferences in Campaigns
Transactional vs. Marketing Messages
Transactional messages (can’t be opted out):- Order confirmations
- Password resets
- Account security alerts
- Billing notifications
- Newsletters
- Promotional emails
- Feature announcements
- Re-engagement campaigns
Default Preferences (What If User Hasn’t Set Any?)
Recommended Defaults
Conservative approach (better for compliance):- Conservative: EU users (GDPR), healthcare, financial services
- Aggressive: Existing customers, B2B, low-regulation industries
Preference Syncing Across Devices
Challenge: User opts out of push notifications on phone, but still gets them on tablet. Solution: Preferences are stored at the user profile level, not device level. How it works:Compliance & Legal Requirements
GDPR (Europe)
Requirements: ✅ Clear consent before marketing communications✅ Easy way to withdraw consent (unsubscribe link)
✅ Granular control (not just “all or nothing”)
✅ Explicit opt-in for sensitive categories (health, finance) Implementation:
- Default users to opted OUT
- Require checkbox during signup: “I agree to receive marketing emails”
- Provide preference center with granular controls
CAN-SPAM (United States)
Requirements: ✅ Unsubscribe link in every marketing email✅ Honor opt-out within 10 business days
✅ Clear “From” name (not deceptive)
✅ Accurate subject line Implementation:
- Include unsubscribe link in email footer
- Immediately set
subscribed_to_promotions = falseon click - Exclude opted-out users from all marketing campaigns
CCPA (California)
Requirements: ✅ Allow users to opt out of data “sale” (sharing for advertising)✅ Provide “Do Not Sell My Personal Information” link
✅ Honor opt-out immediately Implementation:
Next: Use the API for server-side tracking → API Reference