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
| Metric | Computed from |
|---|---|
| ARPU | sum revenue_inr / count distinct user_id |
| LTV | sum revenue_inr per user, cohort-windowed |
| Churn rate | distinct users with subscription_cancel / prev active users |
| Trial conversion | subscription_start / (signup + free tier) |
| Ad fill rate | ad_impression / ad-eligible play_start |