Events
Engagement events
What viewers do before and around playback — the funnel from browse to watch.
page_view
Fire once per screen or route change.
typescript
rd.trackPageView('/browse');
rd.trackPageView('/watch/aashiqana_s04');
rd.trackPageView(); // uses location.pathname if omittedcontent_impression
Fire when a content tile enters the viewport on browse/carousel pages. Use anIntersectionObserver to avoid firing for off-screen tiles.
typescript
rd.track({
eventType: 'content_impression',
content: { contentId: 'mumbai_junction', contentType: 'film' },
properties: { row: 'trending_this_week', position: 3 },
});content_click
Fire on tile click. Pair with content_impression to compute CTR.
typescript
rd.track({
eventType: 'content_click',
content: { contentId: 'mumbai_junction', contentType: 'film' },
properties: { row: 'trending_this_week', position: 3 },
});search
typescript
rd.track({
eventType: 'search',
properties: {
query: 'thriller',
result_count: 24,
tab: 'all',
},
});signup / login
typescript
// Call identify first, then fire the conversion event
rd.identify(userId, { plan: 'free' });
rd.track({ eventType: 'signup', properties: { source: 'landing_hero_cta' } });
// On subsequent visits
rd.identify(userId);
rd.track({ eventType: 'login' });Custom engagement events
Any event type with snake_case name works. Common ones streaming platforms track:
trailer_play— autoplay trailer on hoverwatchlist_add,watchlist_removerating_submitshare_clicksubtitle_changequality_change(manual, distinct from ABRbitrate_change)
Funnel analytics
With these events wired, you can build conversion funnels in the admin panel:
| Step | Event | Typical drop-off |
|---|---|---|
| 1 | content_impression | — |
| 2 | content_click | 85–92% |
| 3 | play_start | 10–15% |
| 4 | complete | 25–40% |