Skip to content
Laravel A/B experiment testing tool
Branch: master
Clone or download
Latest commit d6b6009 Apr 13, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
database/migrations First Wave Feb 3, 2019
src Grammar Conventions & Type Hinting Feb 8, 2019
tests Laravel 5.8 Support Apr 5, 2019
.editorconfig Another awesome package 📦 Feb 2, 2019
.gitattributes Another awesome package 📦 Feb 2, 2019
.scrutinizer.yml Testing Feb 5, 2019
.styleci.yml Another awesome package 📦 Feb 2, 2019
.travis.yml Another awesome package 📦 Feb 2, 2019 Another awesome package 📦 Feb 2, 2019 Logo Apr 13, 2019
composer.json Laravel 5.8 Upgrade Apr 5, 2019
phpunit.xml.dist Testing Feb 3, 2019

Latest Version Build Status Quality Score Code Coverage

This package helps you to find out which content works on your site and which doesn't.

It allows you to create experiments and goals. The visitor will receive randomly the next experiment and you can customize your site to that experiment. The view and the goal conversion will be tracked and you can view the results in a report.


This package can be used in Laravel 5.6 or higher.

You can install the package via composer:

composer require ben182/laravel-ab


After installation publish the config file:

php artisan vendor:publish --provider="Ben182\AbTesting\AbTestingServiceProvider"

You can define your experiments and goals in there.

Finally, run the newly added migration

php artisan migrate

Two new migrations should be added.



@if (AbTesting::isExperiment('logo-big'))

    <div class="logo-big"></div>

@elseif (AbTesting::isExperiment('logo-grayscale'))

    <div class="logo-greyscale"></div>

@elseif (AbTesting::isExperiment('brand-name'))

    <h1>Brand name</h1>


That's the most basic usage of the package. You don't have to initialize anything. The package handles everything for you if you call isExperiment

Alternatively you can use a custom blade if statement:


    <div class="logo-big"></div>


    <div class="logo-greyscale"></div>


    <h1>Brand name</h1>


This will work exactly the same way.

If you don't want to make any continual rendering you can call


directly and trigger a new page view with a random experiment. This function will also be called from isExperiment.

Under the hood a new session item will keep track of the current experiment. A session will only get one experiment and only trigger one page view.

You can grab the current experiment with:

// get the underlying model

// get the experiment name

// get the visitor count

Alternatively there is a request helper for you:

public function index(Request $request) {
    // the same as 'AbTesting::getExperiment()'


To complete a goal simply call:


The function will increment the conversion of the goal assigned to the active experiment. If there isn't an active experiment running for the session one will be created. You can only trigger a goal conversion once per session. This will be prevented with another session item. The function returns the underlying goal model.

To get all completed goals for the current session:



To get a report of the page views, completed goals and conversion call the report command:

php artisan ab:report

This prints something like this:

| Experiment    | Visitors | Goal signup |
| big-logo      | 2        | 1 (50%)     |
| small-buttons | 1        | 0 (0%)      |


To reset all your visitors and goal completions call the reset command:

php artisan ab:reset


In addition you can hook into two events:

  • ExperimentNewVisitor gets triggered once an experiment gets assigned to a new visitor. You can grab the experiment as a property of the event.
  • GoalCompleted gets triggered once a goal is completed. You can grab the goal as a property of the event.


composer test


Please see CHANGELOG for more information what has changed recently.


Please see CONTRIBUTING for details.


If you discover any security related issues, please email instead of using the issue tracker.



The MIT License (MIT). Please see License File for more information.

Laravel Package Boilerplate

This package was generated using the Laravel Package Boilerplate.

You can’t perform that action at this time.