Open source on GitHub

Understand your users
Reach them everywhere

A customer data platform that ingests events, builds unified profiles, and delivers targeted messages across channels.

Open source Self-hostable GDPR ready
Trusted by product teams

Integrate in minutes, not days.

Native SDKs for every platform your team ships to, and server libraries for every language you write in.

Client SDKs — 5 platforms
Web
javascript · typescript
Android
kotlin · java
iOS
swift · objective-c
React Native
javascript · typescript
Flutter
dart
Server SDKs — 16 languages
go
typescript
python
rust
java
kotlin
swift
ruby
php
scala
c#
c
c++
dart
obj-c
js
// Send events in a batch cotton.track([ { event: "purchase", distinctId: "user_42", properties: { amount: 49.99, currency: "USD" } } ])
# Send a push notification cotton.notifications.send({ "channel": "push", "to": { "distinct_id": "user_42" }, "template": "order_shipped", "data": { "order_id": "ord_1284", }, })
# Identify a user and create a campaign cotton.identify( external_id: "user_42", properties: { plan: "pro", region: "us" } ) campaign = cotton.campaigns.create( name: "Winback - inactive 30d", audience: { segment: "inactive_30d" }, message: { channel: "email", template: "winback_v2" }, schedule: { send_at: "2026-05-01T09:00:00Z" } ) puts campaign[:id]

Everything your team needs, nothing it doesn't.

One platform for the full user data lifecycle — from first event to targeted message.

Event Ingestion
Batch up to 1,000 events per request. Auto-enriched with geo, user-agent, and bot signals the moment they arrive.
Identity Resolution
Anonymous events merge into identified profiles automatically. One complete timeline per user, no gaps.
Analytics Insights
Trends, funnels, retention, and segmentation — with breakdowns, filter groups, and flexible aggregations.
Multi-Channel Campaigns
Push, WhatsApp, Email, SMS, and Webhooks — all from a single campaign composer with delivery tracking.
Device Management
Register push endpoints across Android, iOS, and Web. Anonymous devices linked automatically on identify.
Privacy First
Soft-delete everywhere, project-scoped API keys, and GDPR-safe data handling. Your users' data stays yours.

Four ways to understand what's really happening.

Every insight type shares the same filter model — build a segment once, apply it anywhere.

Trends
Time-series charts of event counts and aggregations. Drill down by hour, day, week, or month. Break down by up to 5 properties.
hourly · daily · weeklybreakdowns7 aggregations
Funnel
Measure conversion through up to 20 sequential steps. Set a conversion window, see average time between steps, and spot where users drop off.
up to 20 stepsconversion windowstep timing
Retention
Cohort-based retention heatmap. Define any start and return event. Group cohorts by day, week, or month and track how well you keep users coming back.
custom start eventcohort heatmapbreakdowns
Segmentation
A single aggregate number for any time range — perfect for KPI tiles and scorecards. Combine with Segment Users to export the exact audience that drove a metric.
KPI tilesaudience exportall aggregations

One composer. Every channel.

Schedule messages across seven channels from a single campaign — with per-recipient delivery tracking on every send.

Android
iOS
Web Push
WhatsApp
Email
SMS
Webhook
Per-recipient SENT · RECEIVED · CLICKED · DISMISSED · FAILED
Scheduled delivery, polled every 30s
Firebase FCM for push

Ready to understand your users?

Open source and self-hostable. Spin up your first project in minutes.