Respectlytics Respect lytics
Menu
Replace mParticle 5-field event schema

Replace mParticle with a strict 5-field event schema

Migrate from mParticle to a 5-field event schema. Extras rejected at the API. Helps developers avoid collecting personal data in the first place.

▸Example mParticle call (the "before")

swift Respectlytics
import mParticle_Apple_SDK

let options = MParticleOptions(key: "YOUR_KEY", secret: "YOUR_SECRET")
options.identifyRequest = MPIdentityApiRequest.withEmptyUser()
options.identifyRequest?.email = email
options.identifyRequest?.customerId = userId
MParticle.sharedInstance().start(with: options)

let event = MPEvent(name: "Paywall Purchase", type: .transaction)
event?.customAttributes = ["value": price, "currency": "USD"]
MParticle.sharedInstance().logEvent(event!)

Most analytics SDKs accept dozens of custom parameters per event. Respectlytics's API stores exactly five fields per event: event_name, session_id (rotated every two hours), timestamp, platform, and country. Extra fields are rejected with a 400. The discipline is structural — engineers can't accidentally add PII over time because the API refuses it.

☑Remove mParticle cleanly

  1. 1

    Remove the mParticle SDK from your build (mParticle-Apple-SDK / mparticle-android-sdk / react-native-mparticle / mparticle_flutter_sdk)

  2. 2

    Remove MParticle.start() and MParticle.logEvent(...) call sites

  3. 3

    Critically: review your mParticle output forwarders and decide which downstream destinations you still need data flowing to (most don't — Respectlytics is direct)

  4. 4

    Delete Identity.identify() and modify() calls — those drive the identity merge graph

  5. 5

    Delete the mParticle workspace's mobile input once events have stopped flowing

⇋mParticle vs Respectlytics — 5-field event schema

mParticleRespectlytics
Stored fields per event— see tool note above (typically dozens of params)Exactly 5
API enforcement of schemaLenient (extras stored)Strict (extras rejected with 400)
Per-user state computableYes (people profiles, user properties)No (use account system)
Custom event properties accepted25–250 depending on tool0

❓Frequently asked questions

How do we segment events without custom properties?

By using distinct event names. Instead of track('purchase', { product: 'gold_pack' }), fire track('purchase_gold_pack'). The aggregation buckets event names automatically; no manual configuration. Keep your taxonomy short (under ~50 distinct names per matrix axis) to stay navigable.

We need per-event price for revenue reporting — how does that work?

It doesn't — and that's the point. Authoritative revenue lives in your billing system (Stripe, RevenueCat, App Store Connect) with refund-aware totals and currency-conversion handling. Mirroring revenue into product analytics produces two truths that drift over time.

What if we genuinely need a sixth field for legitimate reasons?

Three options: (a) encode the variant into the event name (e.g., paywall_purchase_pro vs paywall_purchase_basic); (b) keep per-user state in your account system and don't mirror it; (c) use a different tool for the specific use case. Most product teams find (a) or (b) sufficient.

How does the API actually enforce this?

JSON validation at the API gateway. A POST /api/v1/events/ with any field outside the 5 allowed keys returns HTTP 400 Bad Request with a body listing the rejected field names. Your integration test catches the regression on the first commit that adds an extra field.

⇢Related migration guides

Track what matters. Collect nothing you don't.

Five-field event schema, RAM-only event queue, no IDFA, no AAID, no persistent user IDs. Helps developers avoid collecting personal data in the first place.