Tapemetric

Events

Revenue events

Track every rupee — subscriptions, transactional rentals, and ad impressions — with the same event schema.

purchase (TVOD rentals & one-offs)

Fire on a successful payment confirmation, not on checkout click.

typescript
rd.trackPurchase(
  'mumbai_junction',  // contentId
  149,                // amount in INR
  'tvod',             // plan
);

subscription_start (SVOD)

Fire on successful first payment for a subscription.

typescript
rd.track({
  eventType: 'subscription_start',
  plan: 'svod',
  revenueInr: 299,
  properties: {
    tier: 'premium',
    billing_cycle: 'monthly',
    payment_method: 'razorpay_upi',
    promo_code: 'FIRST30',
  },
});

// Also call identify to attach the plan
rd.identify('user_12345', { plan: 'svod' });

subscription_renew

typescript
rd.track({
  eventType: 'subscription_renew',
  plan: 'svod',
  revenueInr: 299,
  properties: { billing_cycle: 'monthly', renewal_count: 4 },
});

subscription_cancel

Fire at cancellation, not at subscription end. The gap between cancel and end helps compute voluntary churn vs. involuntary (payment failure) churn.

typescript
rd.track({
  eventType: 'subscription_cancel',
  plan: 'svod',
  properties: {
    reason: 'price',
    access_until: '2026-05-15T00:00:00Z',
    survey_answer: 'Too expensive for current usage',
  },
});

ad_impression / ad_click (AVOD)

Fire on ad VAST events. Use revenueInr to capture CPM-derived revenue.

typescript
rd.track({
  eventType: 'ad_impression',
  plan: 'avod',
  revenueInr: 0.80,
  content: { contentId: currentContentId, contentType: 'series' },
  properties: {
    ad_id: 'ad_hdfc_savings_q2',
    position: 'pre_roll',
    network: 'google_ima',
  },
});

rd.track({
  eventType: 'ad_click',
  plan: 'avod',
  properties: { ad_id: 'ad_hdfc_savings_q2' },
});
Ad events can be high volume. Set maxBatchSize to 100 in the SDK config and use ad-server-side reporting as the source of truth for revenue — Tapemetric should be the source of truth for the viewing side of ads, not billing.

refund

typescript
rd.track({
  eventType: 'refund',
  plan: 'tvod',
  revenueInr: -149,
  content: { contentId: 'mumbai_junction', contentType: 'film' },
  properties: { reason: 'duplicate_charge' },
});

Metrics derived from revenue events

MetricComputed from
ARPUsum revenue_inr / count distinct user_id
LTVsum revenue_inr per user, cohort-windowed
Churn ratedistinct users with subscription_cancel / prev active users
Trial conversionsubscription_start / (signup + free tier)
Ad fill ratead_impression / ad-eligible play_start