Deliver great TV app experiences

Fast, powerful experimentation for over-the-top app development teams.

Viewing habits are changing quickly.
Are you keeping up?

Engage your audience on their terms

Experiment with subscription flows, content discovery, ad placement, and layouts to increase audience engagement and subscriptions.

Experiment across your apps

Viewing patterns often differ by medium--viewers may spend more time on mobile devices, but be more engaged with over-the-top content in the comfort of their home. Since all of Optimizely’s SDKs are built to work together, you can discover the best experience for each channel, experiment across the front- and back-end experiences, and tailor your apps to your viewer’ needs.

Reduce risk with phased rollouts and instant updates

Reduce the risk of making updates with phased rollouts, and change your app’s design or behavior in real time without waiting for App Store or Google Play review. Live variables and simple traffic allocation enable you to test new ideas and quickly remove or improve the ones that don’t work.

Target experiences to the right audience

Advanced targeting enables you to deliver the right experience to the right audience throughout your app. Our SDKs also work seamlessly with all other Optimizely SDKs, enabling you to experiment and personalize across channels and devices, or at any level of your tech stack.

Iterate faster, with more control and less risk

Flexible configuration options

Run experiments in any part of your app. Easily configure networking, logging, exception handling, integrations, and much more to meet your production needs.

Focus on performance

Experiment in real time with minimal performance impact. Our lightweight, open source SDKs make no network requests, and enable instant updates to your app--no App Store or Google Play Review required.

A trusted solution

Optimize your app on the world’s leading Experimentation Platform that is already delivering billions of experiences globally. Powered by Optimizely’s industry-leading Stats Engine.
#import <OptimizelySDKiOS/OptimizelySDKiOS.h>

OPTLYManager *manager = [OPTLYManager init:^(OPTLYManagerBuilder * _Nullable builder) {
  builder.projectId = @"projectId";

// Asynchronously initialize the Optimizely client
[manager initializeWithCallback:^(NSError * _Nullable error, OPTLYClient * _Nullable client) {
  // Activate an experiment
  OPTLYVariation *variation = [client activate:@"my_experiment" userId:@"user_123"];

  if ([variation.variationKey isEqualToString:@"variation_a"]) {
    // Execute code for variation A
  else if ([variation.variationKey isEqualToString:@"variation_b"]) {
    // Execute code for variation B
  else {
    // Execute default code

  // Track an event
  [client track:@"purchase_completed" userId:@"user_123"];
import OptimizelySDKiOS

let optimizelyManager = OPTLYManager.init {(builder) in
  builder!.projectId = "projectId"

// Asynchronously initialize the Optimizely Client
manager?.initialize(callback: { [weak self] (error, client) in
  // Activate an experiment
  let variation = client?.activate("my_experiment", userId: "user_123")
  if (variation?.variationKey == "variation_a") {
	// Execute code for variation A
  else if (variation?.variationKey == "variation_b") {
    // Execute code for variation B
  else {
    // Execute default code

  // Track an Event
  client?.track("purchase_completed", userId: "user_123")

OptimizelyClient optimizelyClient = optimizelyManager.getOptimizely();

// Activate an experiment
Variation variation = optimizelyClient.activate("my_experiment", "user_123");

if (variation != null) {
  if ("variation_a")) {
    // Execute code for variation A
  } else if ("variation_b")) {
    // Execute code for variation B
} else {
  // Execute default code

// Track an event
optimizelyClient.track("purchase_completed", "user_123");

Experiment anywhere in your tech stack

Test pricing, search algorithms, and more. Optimizely’s developer products enable you to experiment beyond the client and deep into your backend.

A complete solution for app experimentation, without the developer headaches

Open source SDKs
Our tvOS, and Android TV SDKs are transparent, so you know exactly how they work.

Event tracking
Monitor all the conversion metrics and KPIs you care about, in your app or any other service.

Phased rollouts
Reduce the risk of launching new features by rolling them out first to a small set of users, either random or targeted.

Custom configuration
Easily swap out your own components for logging, error handling, event dispatching, integrations, and more.

Define custom attributes for fine-grained targeting and segmentation.

Multichannel experimentation
Set your own user IDs to create consistent personalized experiences across all your customer channels.

Full stack experimentation
Run experiments that span both frontend and backend code, in conjunction with any of Optimizely’s SDKs.

Optimizely Stats Engine
See the impact of your experiments in real-time, with the world’s leading Experimentation Platform.

Instant updates
Make updates to your experiments and variables in real-time without waiting for your next App Store release.

Raw event export
Easily download the complete event data from Optimizely.

Traffic splitting
Easily create randomized traffic switches anywhere in your app without affecting performance.

Enterprise-ready security
Roles and permissions, 2-factor authentication, and single sign on.

Get started with our developer documentation

  • Native TV and mobile apps are a huge opportunity to engage our audience where they are and stay ahead of quickly changing viewing habits. With Optimizely, we can easily run experiments in our apps and ensure the product, marketing, and engineering teams are all working together to achieve a common goal—providing the best customer experience possible.
    Courtney Sanchez, SVP Business Intelligence and Strategy
    Vimeo Logo

Start experimenting in your over-the-top app today

Talk to Us