Beyond the system attributes Pulsate collects automatically, you can attach unlimited custom attributes to a user — purchase history, subscription plan, account status, anything. Every custom attribute automatically appears as a filter in the CMS segment builder, combinable with system filters for precise targeting.
Typed attributes
createAttribute is overloaded for five types. Use the right type so the segment builder offers the right filters (dates get date pickers, booleans get true/false, numbers get ranges):
val pulsateManager = PulsateFactory.getInstance()
pulsateManager.createAttribute("carColor", "green") // String
pulsateManager.createAttribute("loyaltyPoints", 1250) // Int
pulsateManager.createAttribute("walletBalance", 99.95f) // Float
pulsateManager.createAttribute("hasActiveLoan", true) // Boolean
pulsateManager.createAttribute("contractEndDate", Date()) // java.util.Date
Attributes are cached locally and synced when the app enters the background; call forceAttributeSync() to sync immediately.
Counters
Increment or decrement an integer attribute without knowing its current value — ideal for click counts, visit counts, etc. A counter that doesn't exist yet starts at 0.
pulsateManager.incrementCounter("clickCounter", 1) // +1
pulsateManager.decrementCounter("clickCounter", 2) // -2
Negative values flip the direction (incrementCounter("x", -1) decrements).
Limits & tips
- Keep attribute names stable — renaming creates a new attribute in segmentation.
- Prefer a handful of well-chosen attributes over dumping your whole user model; every attribute becomes UI in the segment builder.

