Start optimizing your digital experiences today.

Choose a plan that’s right for you.

Optimizely Web

Whether you’re looking to get started with experimentation, or scale your current program by 10X, these three plans were made for marketing teams.

Get Started

Essentials

Get started with the essential experimentation tools to help you optimize your web experiences.

  • A/B testing
  • Visual editor
  • Multi-page experimentation
  • Platform security and compliance
  • Analytics integrations
  • Stats Engine
  • Support for Dynamic Websites

Business

Drive experimentation across all of your digital touchpoints and begin collaborating across teams.

All Essentials features +
  • Mutually exclusive experiments
  • Multivariate testing
  • Advanced targeting options
  • Additional roles and permissions
  • Extensions
  • Program Management

Enterprise

Scale experiments 10X, with advanced collaboration, reporting, targeting, personalization & more.

All Business features +
  • Personalization campaigns
  • Behavioral targeting
  • Product and content recommendations
  • Third-party audiences
  • Stats Accelerator
  • Advanced Program Management
Get Started

Optimizely
Full Stack

Experiment at every step of the customer journey and roll out new features that customers love, with the only solution designed for product development teams.

Get Started

Essentials

The essential tools to get started with Full Stack experimentation and feature flagging for individual product development teams.

  • 1 project
  • 10 open-source SDKs
  • Support for Full Stack, Mobile, and cross-channel experiments
  • Feature management, including flags and rollouts
  • Environments
  • Stats Engine
  • Platform security and compliance

Business

A full-featured solution, for businesses seeking to run powerful experiments throughout the product development process.

All Essentials features +
  • Additional projects
  • Feature variables
  • Mutually exclusive experiments
  • Additional roles and permissions
  • Data export
  • REST API access
  • Program Management
Get Started

Enterprise

Our solution for advancing a culture of collaborative experimentation across product teams and all digital touchpoints.

All Business features +
  • Stats Accelerator
  • Advanced Program Management
Get Started

Or, get both solutions in one powerful platform

Experiment across all your digital marketing, products and teams to drive maximum value for your business with both Optimizely Web and Optimizely Full Stack.

Get Started

Optimizely Web

Optimizely Full Stack

Web and Full Stack Solutions

Explore Solutions

Web Experimentation

Improve every web experience, from onboarding flows to your core experience, with the easiest and most powerful way to run experiments across your website.

Learn More

Full Stack

Run experiments in any application or codebase. Iterate on search algorithms, pricing, conversational interfaces, mobile apps, and more. Launch new features confidently. And build better product experiences for your customers.

Learn More
            
    import optimizely
    
    optimizely = optimizely.Optimizely(datafile)
    
    

# Activate an experiment

variation = optimizely.activate('my_experiment', 'user_123') if variation == 'variation_a':

# Execute code for variation A

elif variation == 'variation_b':

# Execute code for variation B

else:

# Execute default code

# Track an event

optimizely.track('purchase_completed', 'user_123')
            
    import com.optimizely.ab.Optimizely;
    
    Optimizely optimizely = Optimizely.builder(datafile).build();
    
    

// Activate an experiment

Variation variation = optimizely.activate("my_experiment", "user_123"); if (variation != null) { if (variation.is("variation_a")) {

// Execute code for variation A

} else if (variation.is("variation_b")) {

// Execute code for variation B

} } else {

// Execute default code

}

// Track an event

optimizely.track("purchase_completed", "user_123");
            
    import "optimizely"
    
    project = Optimizely::Project.new(datafile)
    
    

# Activate an experiment

variation = project.activate('my_experiment', 'user_123') if variation == 'variation_a'

# Execute code for variation A

elsif variation == 'variation_b'

# Execute code for variation B

else

# Execute default code

end

# Track an event

project.track('purchase_completed', 'user_123')
            
    var optimizely = require('optimizely-server-sdk');
    
    var optimizely = optimizely.createInstance({ datafile: datafile });
    
    

// Activate an experiment

var variation = optimizely.activate('my_experiment', 'user_123'); if (variation === 'variation_a') {

// Execute code for variation A

} else if (variation === 'variation_b') {

// Execute code for variation B

} else {

// Execute default code

}

// Track an event

optimizely.track('purchase_completed', 'user_123');
            
    use Optimizely\Optimizely;
    
    

// Initialize an Optimizely client

$optimizelyClient = new Optimizely($datafile);

// Activate an experiment

$variation = $optimizelyClient->activate('my_experiment', 'user_123'); if ($variation == 'variation_a') {

// Execute code for variation A

} elseif ($variation == 'variation_b') {

// Execute code for variation B

} else {

// Execute default code

}

// Track an event

$optimizelyClient->track('purchase_completed', 'user_123');
            
    using OptimizelySDK;
    
    

// Initialize an Optimizely client

Optimizely OptimizelyClient = new Optimizely(datafile);

// Activate user in an experiment

var variation = OptimizelyClient.Activate("my_experiment", userId); if (variation != null) { if (variation == "control") {

// Execute code for variation A

} else if (variation == "treatment") {

// Execute code for variation B

} } else {

// Execute default code

}

// Track conversion event

OptimizelyClient.Track("my_conversion", userId);
            
    var optimizely = require('optimizely-client-sdk');
    

// Initialize an Optimizely client

var optimizelyClientInstance = optimizely.createInstance({ datafile: datafile });

// Alternatively, if you don't use CommonJS or npm, you can install the minified snippet and use the globally exported varible as follows

var optimizelyClientInstance = window.optimizelyClient.createInstance({ datafile: datafile });

// Activate user in an experiment

var variation = optimizelyClientInstance.activate('my_experiment', userId); if (variation === 'control') {

// Execute code for variation A

} else if (variation === 'treatment') {

// Execute code for variation B

} else {

// Execute default code

}

// Track conversion event

optimizelyClientInstance.track('my_conversion', userId);
            
    

// Initialize an Optimizely manager

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

// Initialize an Optimizely client by asynchronously downloading the datafile

[optlyManager initializeWithCallback:^(NSError * _Nullable error, OPTLYClient * _Nullable client) {

// Activate user in a test

OPTLYVariation *variation = [client activate:@"my_experiment" userId:@"userId"]; if ([variation.variationKey isEqualToString:@"control"]) {

// Execute code for the control

} else if ([variation.variationKey isEqualToString:@"treatment"]) {

// Execute code for the treatment

} else {

// Execute default code

}

// Track conversion event

[client track:@"my_conversion" userId:@"userId"]; }];
              
    

// Initialize an Optimizely manager

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

// Initialize an Optimizely client by asynchronously downloading the datafile

optimizelyManager?.initialize(callback: { [weak self] (error, optimizelyClient) in

// Activate user in a test

if let variation = optimizelyClient?.activate("my_experiment", userId: "userId") { if (variation.variationKey == "control") {

// Execute code for the control

} else if (variation.variationKey == "treatment") {

// Execute code for the treatment

} } else {

// execute default code

}

// Track conversion event

optimizelyClient?.track("my_conversion", userId: "userId") })
                
    import com.optimizely.ab.Optimizely;
    
    Optimizely optimizely = Optimizely.builder(datafile).build();
    
    

// Activate an experiment

Variation variation = optimizely.activate("my_experiment", "user_123"); if (variation != null) { if (variation.is("variation_a")) {

// Execute code for variation A

} else if (variation.is("variation_b")) {

// Execute code for variation B

} } else {

// Execute default code

}

// Track an event

optimizely.track("purchase_completed", "user_123");