The single user_id every other module reads from — one source of truth, real-time, no reverse-ETL.
Segment + mParticle + Customer.io give you a CDP that other tools then sync from. Sendora IS the CDP, AND the auth, AND the messaging, AND the support tool reading from it — same database, same user_id, real-time membership. An audience update propagates to Push targeting, Email lists, in-app messages, support SLA routing, KB analytics, and AI chatbot context simultaneously. Zero sync lag. Zero reverse-ETL.
Features
- Deterministic identity resolution — profiles keyed on
(orgId, projectId, externalId). SDKidentify(userId, traits)upserts on externalId. Honest about scope: no probabilistic cross-device fingerprint stitching today — externalId match only. - Nested AND/OR audience builder — groups of conditions on event types + properties + profile traits. No SQL, no warehouse round-trip. Evaluated at query time so membership is real-time.
- Audience size estimation —
GET /audiences/:idreturnsestimatedSizeso you see how big a segment is before you target it. - Arbitrary trait storage — set any trait via
identify(userId, { ltv: 234, plan: "pro" })and audience conditions can filter on it. Honest: there's no built-in computed-trait engine that calculatesfirst_seen/ltv/signin_countfor you — you write the value, we store it. - AI lifecycle classifier (opt-in via
ai_lifecycle_classifier_enabled) — nightly cron classifies each profile intonew/active/at_risk/churnedbased on event activity. Use as an audience condition. - Anonymous → identified device-takeover — anon
user_idretired on signin, push tokens reassigned. No duplicate notifications. Webhook + inline SDK listener for your own mirror tables. - Every module reads this — Push uses audiences for targeting, Email uses them for segments, Automation uses them as triggers, In-App uses them for visibility, Surveys uses them for audience-trigger config. One identity, multiple surfaces.
Common use cases
Replace Segment + mParticle + Customer.io CDP — already the source of truth, no reverse-ETL.
B2B + B2C apps that need real-time audience membership in messaging + auth + support, not nightly warehouse syncs.
Multi-device consumer products where the SAME externalId is passed via `identify()` across web + iOS + Android — those resolve to one profile. (For probabilistic cross-device match without a shared `externalId`, you'd still need a third-party identity-stitching vendor.)
Start in minutes. Scale without switching tools.
The free tier covers most side projects. Every module is turn-key and every SDK is first-party.