Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time



This extension allows you to integrate your Solidus store with Klaviyo via solidus_tracking.


Add solidus_tracking and solidus_klaviyo to your Gemfile:

gem 'solidus_tracking', github: 'solidusio-contrib/solidus_tracking'
gem 'solidus_klaviyo', github: 'solidusio-contrib/solidus_klaviyo'

Bundle your dependencies and run the installation generator:

$ bundle
$ bundle exec rails g solidus_klaviyo:install

The generator will create an initializer at config/initializers/solidus_klaviyo.rb with the default configuration. Take a look at the file and customize it to fit your environment.


Tracking standard events

In order to track all standard events in Klaviyo, add the following to your solidus_tracking configuration:

SolidusTracking.configure do |config|
  config.trackers << SolidusKlaviyo::Tracker.from_config

That's it! Your events will be automatically sent to Klaviyo.

Subscribing users to lists

If you want to subscribe a user to a Klaviyo list, the extension provides a handy Ruby API to do that:

SolidusKlaviyo.subscribe_now('YOUR_LIST_ID', '', custom_property: 'value') 

We recommend using the built-in background job to subscribe users, in order to avoid blocking your web workers and slowing down the customer:

SolidusKlaviyo.subscribe_later('YOUR_LIST_ID', '', custom_property: 'value')

Subscribing all users upon signup

If you want to subscribe all users when they sign up, you can just set the default_list configuration option:

# config/initializers/solidus_klaviyo.rb
SolidusKlaviyo.configure do |config|
  # ...
  config.default_list = 'klaviyoListId'

Now, all users will be subscribed to the configured list automatically when their account is created.

Updating users on your lists

Updating an existing user on a list is just as easy as adding them.

SolidusKlaviyo.update_now('YOUR_LIST_ID', '', custom_property: 'value') 

Just like with subscribing, we recommend using the built-in background job to update users, in order to avoid blocking your web workers and slowing down the customer:

SolidusKlaviyo.update_later('YOUR_LIST_ID', '', custom_property: 'value')

Updating in bulk is also possible using the bulk_update_now and bulk_update_later methods. For bulk updates, you'll want to provide the emails and custom properties in a single object, like so:

SolidusKlaviyo.bulk_update_later('YOUR_LIST_ID', [{email: '', custom_property: 'value'}])


Testing the extension

First bundle your dependencies, then run bin/rake. bin/rake will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using bin/rake extension:test_app.

$ bundle
$ bin/rake

To run Rubocop static code analysis run

$ bundle exec rubocop

When testing your application's integration with this extension you may use its factories. Simply add this require statement to your spec_helper:

require 'solidus_klaviyo/factories'

Running the sandbox

To run this extension in a sandboxed Solidus application, you can run bin/sandbox. The path for the sandbox app is ./sandbox and bin/rails will forward any Rails commands to sandbox/bin/rails.

Here's an example:

$ bin/rails server
=> Booting Puma
=> Rails application starting in development
* Listening on tcp://
Use Ctrl-C to stop

Releasing new versions

Your new extension version can be released using gem-release like this:

$ bundle exec gem bump -v VERSION --tag --push --remote upstream && gem release


Copyright (c) 2020 Nebulab Srls, released under the New BSD License.