Tapemetric

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 omitted

content_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 hover
  • watchlist_add, watchlist_remove
  • rating_submit
  • share_click
  • subtitle_change
  • quality_change (manual, distinct from ABR bitrate_change)

Funnel analytics

With these events wired, you can build conversion funnels in the admin panel:

StepEventTypical drop-off
1content_impression
2content_click85–92%
3play_start10–15%
4complete25–40%