# FAQ

## What is PickZen?

PickZen helps brands and retailers recommend the right product at the right time, just like a store associate does in-person. Guided by PickZen from start to cart, customers receive personalized product recommendations after answering a short series of questions. Fast, visual, and dynamic, PickZen improves the customer journey and leads to a measurable increase in conversion rate and engagement for eCommerce owners. PickZen offers simplicity of choice.

## Who is PickZen for?

PickZen is for brands and retailers who want to help their customers find the perfect product when they might not know exactly what they're looking for. Whether an eCommerce or an agency, a pickzen can be created and installed in minutes adding immediate value to the business.

## What is a pickzen?

A pickzen is any kind of quiz: a form or a product finder. It is a generic way to refer them.&#x20;

## What is a form?

A form is a structured way to collect information from users through a series of questions.

## What is a product finder?

A product finder is the main tool our partners use to recommend products to their eCommerce customers. It works the same way a sales associate does in a physical retail store. The customer answers a series of questions and receives a personalized product recommendation that matches their needs at that time. Pickzen's Product Finders can also be used to recommend content and services in addition to products.

## What are display modes?

You can install your pickzen on your website directly from the PickZen platform and configure them in a number of different display modes. A display mode is a way of presenting a Product Finder: as popup, embedded in a page, or as a corner notification. With display modes you can define how and when your pickzen will be displayed.

## Which devices and browsers are supported?

PickZen supports all browsers and devices.

## How do I cancel my subscription?

You can cancel the service at any time via the billing panel in the application. Plans terminated before the start date of the billing cycle will not be renewed automatically nor will we remove the account until its status has been confirmed. Even if a plan is canceled, the services will remain available to you for the time remaining in your plan.&#x20;

## GDPR Compliance

At PickZen, we care about the privacy rights of our clients and their users. On May 25, 2018, the EU General Data Protection Regulation (GDPR) went into effect and established global data protection rights for individuals in the European Union.

We have updated our Terms of Service and Privacy Policy to fulfill the GDPR requirements and will continue to release extensive documentation and improved functionalities to PickZen to ensure that as a Provider (client and partner of PickZen) you will feel totally confident that you meet your obligations under GDPR while using PickZen.

Because GDPR is a new regulation, each partner has the responsibility to follow the established guidelines for proper usage. If you are a partner who servers EU citizens, it is necessary to follow these regulations.


# Security in PickZen

This article describes the technologies and processes we use to protect your information.

## Physical security

The PickZen infrastructure is hosted on Amazon Web Services (AWS). Our main servers are in Ohio, USA and our backup servers are in Ireland, EU. All comply with security and privacy standards, including [Privacy Shield](https://www.privacyshield.gov/). Your information is hosted and backed up in safe places.

## Network security

All of our network environments are hosted on a Virtual Private Cloud Network (VPC) on Amazon Web Services. Our Production networks are separated into public and internal services. Incoming internet traffic is not allowed on private subnets, and all application servers reside on private networks that do not have public IP addresses. The load balancers, managed and maintained by Amazon, are the only ones who have inbound access to the internal servers of the application. Additionally, we have firewalls and strict security groups that control incoming and outgoing access to servers. Access to the servers we use is strictly limited, and no external traffic is allowed to them.

## Fault tolerance

PickZen has been designed to be scalable and fault-tolerant. If one machine fails, another will be ready to take over immediately. This redundancy is found at all critical levels of the platform.

Also in line with AWS recommended practices, we have a multi-availability zone architecture in place. In case of an Availability Zone failure, the remaining machines in the working Availability Zones have sufficient capacity to run the service in its entirety.

## Access control

Access to PickZen resources is allowed only through secure connections (for example, VPN networks or SSH connections) and, in some cases, requires multi-factor authentication. We follow the Principle of Least Privilege, so users and programs should only have the necessary privileges to complete their tasks.&#x20;

Existing access is audited on a regular basis to ensure that our employees only have the necessary permission to perform their duties. This means that our employees can only access PickZen systems with a secure connection. As soon as someone leaves the company, their access is blocked. We also have confidentiality agreements with all of our employees and contractors.

## Penetration tests

We conduct periodic penetration tests on our platform. Vulnerabilities and other findings are classified according to their severity, and we prioritize them accordingly. This means we let security experts come in and try to break things to help us find any weaknesses.

## Monitorization

PickZen collects system, infrastructure, and application logs into a centrally managed log repository for monitoring, troubleshooting, security reviews, and analysis by authorized employees only. These records are preserved in accordance with the regulatory requirements for assistance in the event of a security incident.&#x20;

## Shared responsability

Protecting access to your information requires that you, as a PickZen client, help us to maintain security by using strong passwords and protecting them as necessary.


# Builder Overview

The PickZen Builder is where you will create your pickzen:

![](/files/flf4golGtzXKTmIomFQP)

### Top menu

The top menu is divided into three parts: Title, Step Navigation, and Publishing buttons.

You can change the pickzen title simply by clicking on its name:

![](/files/HVJrNhQOsgyFg0E5phtd)

On the right of the top menu, the following buttons appear:

![](/files/FTriuYv5ewE1lBgBXkE8)

**Eye button**: It allows previewing the current version of the pickzen without having to publish it.

**Save button**: It is used to save a draft with the last changes. Those changes won't be visible to your users until you click on the Publish button. If you want to see your changes in action before publishing them to your users, you can use the Preview button.&#x20;

**Publish button**: It allows publishing the current changes into Production. Typically, once a pickzen is live on a website, you will only want to update it when the new version is finished and you can ensure it is correct. In this case, the changes you make on the quiz can be seen through the preview button without altering the production pickzen. Once everything is correct, you would click on the publish button to make those changes live.

At the center of the top menu, you can find the Step Navigation, showing the steps that have to be completed in order to finish the pickzen. The current step will appear highlighted:

![](/files/-MF_gF_otjk9-K8bYCy8)

Finally, at the left of the top menu, there is the **Exit link** to exit the Builder and come back to the home.

### Left menu

The left menu is composed of buttons that will change based on the current step. For example, when the Questions step is selected, this menu will be:

![](/files/HyYfnrPe8R3BSoS9LaH6)

### Slide settings

At the right of the left menu appears the slide settings panel whose content will depend on the selected slide:&#x20;

![](/files/ggKBurj9SwORyvZW6HE4)

### Preview panel

At the right of the slide settings panel appears the preview panel showing the current slide:

![](/files/1VFBq29wuCYKXt7Zv5K7)


# Questions

The Questions step allows creating the question and answers, as well as modifying the design of the slides: colors, fonts, etc. The left menu will contain the following action buttons:

* <img src="/files/-MF_iLuwp49XkTkvbo8G" alt="" data-size="line"> Question and answers editor.
* <img src="/files/-MF_iUf_53QMC3Fvt3JL" alt="" data-size="line">  Design settings: theme, colors, font, display settings, etc.
* <img src="/files/-MF_ijSCqYplJWzhPRGB" alt="" data-size="line"> Tree panel where you can check if your skip logic is correct and troubleshoot the pickzen.
* <img src="/files/-MF_j26IXbIMR1KKpNM_" alt="" data-size="line"> Features table editor to show features, feedback, tips, on a product basis.
* <img src="/files/-MF_jU4gmryp4HzItpHY" alt="" data-size="line"> General settings of the pickzen.


# Types and layouts

Each question is contained inside a slide, so the first thing you have to do is create the slide. You can do this by clicking on *Add slide* on the bottom:

![](/files/T8GdcLYXurtsKai3XrP6)

When this button is clicked a pop-up will appear to select the type of the slide:

&#x20;

Once the slide is created, you can edit it easily:

![](/files/NTnki3gW2IKFxVtFIvt5)

The available **Slide types** are:

* **Welcome:** A welcome slide with a typical welcome text.
* **Question**: A closed-ended question that can be used to recommend products.
* **Feedback**: A slide with only a message. This is particularly useful when combined with skip logic because customized messages can be displayed based on previous answers.&#x20;
* **Form**: A form slide where fields can be added to ask for information from the user.

If you need to change the type of an existing slide, simply click on its properties:

![](/files/tiEV0S3MNc5zQaqaGeNU)

&#x20;and click on Change type:

![](/files/ShrBVpH3ikGw3kmBnGrG)

A slide may admit different **views**. If so, it can be chosen from the slide settings panel:

![](/files/c5kB6k4gav951vYdyMcC)

For example the **Text view**:

![](/files/53xJjrnh1h0aCoXsii70)

Or the **Images view**:

![](/files/UDQqvTpd8TjhEgJxMOwW)


# Display settings

You can access your quiz display settings clicking on the button:

You can access your pickzen display settings by clicking on the <img src="/files/-MF_iUf_53QMC3Fvt3JL" alt="" data-size="line"> button:

![](/files/KVjHP1swqSqhVA7tnN8n)

![](/files/-Lrsiaapl-WqTvTQ95Gq)

The available options will depend on the selected theme.

### Setting the font

On the font drop-down, you will be able to select one of the predefined most typical fonts. In case you need to use another font you can select Custom and customize your font:&#x20;

![](/files/h776URisWVXvotKZkRxA)

In Font families, write the font families separated by comma.

If you want to use a Webfont, you also have to fill the Webfont URL field. For example, if you want to add the Google Karla Webfont:

![](/files/-LrskvvozldPweddW7cm)

You would configure the font in Pickzen as:

![](/files/6bVFoUzXcJk35TLaroVi)


# Styling the text

In order to change the style of a text, simply select it and use the contextual menu that will appear to change its style. For example, to set some words in bold, select them:

![](/files/AnJ68a6Vx9OQZO6xuHqb)

And then, apply the bold style:

![](/files/NaTArgFKjfkeyoAqV486)

Depending on the selected Theme and settings, more text editing styles might be available:&#x20;

![](/files/9aUWOEjwkbRaBj0Nrc00)


# Slide settings

Each slide can be configured from its settings panel on the left:

<figure><img src="/files/jyanymEWKuQMttYvNdHR" alt=""><figcaption></figcaption></figure>

Depending on the slide type and theme, there will be different settings you can use to customize its display or behavior.


# Admin names

Imagine you create a very long question and/or very long answers like this:

![](/files/NsEpL5KeGeNoTNoqFKtZ)

This question will appear on the slides selector as:

![](/files/ETOox9R3YWdqjB99ehS4)

If you have multiple questions it will be difficult to find the slide you are looking for. But worse, some parts of the editor will only show the first characters of the title, for example on the linking panel:

![](/files/1aiM1RYyhBlUanaVQNNY)

And also on the view tree panel:&#x20;

![](/files/-MF_qMsmj8NJ6MjrkuL4)

As you see, working with long questions and answers is problematic. In order to solve these issues, you can assign admin names both for your questions and your answers. Admin names will only be displayed inside the editor for management purposes.&#x20;

To set the admin name of a question, click on the [Slide settings](/create/creating-questions/slide-settings) and enter a descriptive text:

![](/files/Gf64qiMUDWcZyaY3b47l)

In the case of the answers, you will need to click on each answer settings:

![](/files/q5Vh5UppSXCqf9SEIDSn)

And enter the Admin name:

![](/files/LsyKXPqGxoW6QUHroAY3)

Once done, the linking will be far more usable:

![](/files/4JydidojBwagHAeaxym5)

![](/files/sSN8RROpkcaWfM9958nD)

And the tree will be completely understandable:

![](/files/-MF_qr6WmUr_tO4YQkUS)


# Slide help

It is possible that not all your users will know how to answer a question or the rational behind a question. In these cases, it is useful to show them more information or some kind of help to select the correct answer.

To show help, go to the slide settings / Help tab:

![](/files/9dWoCZ9szBuCDJ6LdeJt)

Here you can enter text, images, videos, etc. For example:&#x20;

![](/files/-MF_rthVgkXd7uLsSsfr)

Now, a new field to display a help call to action will be shown:

![](/files/kqMeDAFlxUtjrSrU6WX5)

Write a call to action:

![](/files/7G5K2VQjoSQBVd4RcadO)

And it will be displayed on the slide:

![](/files/BFlF8i4D1ojFi9bYE0Td)

So when a user takes the pickzen and clicks on the *I need help* link the help panel will be shown:

![](/files/-LsCIGcErIE0j3598JVW)

This panel is fully responsive on mobile:

![](/files/-LsCI5hbwhtNbTC2HgW3)


# Feedback slide

Use a feedback slide when you need to show information to the user in the flow of the quiz. You can also use skip logic so these slides are displayed only when specific previous answers have been selected, to achieve more personalized feedback.

In order to create a Feedback slide, select the Feedback type when creating a new slide:

![](/files/43WArnUFPfNKCxk77TYG)

### Textual information

In this case, just enter the text you need through the editor:

![](/files/MDZsZrEUngE62rUZf7ZN)

### Video

If you need to embed a video, for example a Youtube video, simply click on the Source code button <img src="/files/-M77MxYtogFudDqiF6cg" alt="" data-size="line"> and paste the video code:

![](/files/-M77Nc4Nxwuv9PVLaW5u)

The result will be:

![](/files/-M77SERgTKohoxM8721T)

{% hint style="warning" %}
In order to edit HTML directly special permission is needed. Contact us for more information.
{% endhint %}

### Auto-advance

Sometimes it is useful to show a feedback slide only for a few seconds so the slide is presented and then auto-advances. In order to achieve this result, simply go to the General settings of the slide, check Auto-advance, and finally set the time in seconds:

![](/files/OGxx693rnPUPr1Ofm0q6)

You can also embed an animated GIF using HTML that when combined with the auto-advance feature, can be used as a typical spinner:

![](/files/-M77Tlw4yiUXyQKC_jqQ)

{% hint style="warning" %}
In order to edit HTML directly special permission is needed. Contact us for more information.
{% endhint %}


# End slide

The end slide is a very important and customizable piece of Pickzen. A high variety of different settings are available to reach your customization needs.

&#x20;


# Number of outcomes

A very important general setting is *Maximum number of outcomes* that is available in the Products tab in the end slide settings:

![](/files/kyWwnMooiJMQrRAC0Vvg)

This setting determines the maximum number of recommendations to generate.&#x20;

{% hint style="danger" %}
Don't confuse this with the number of items per page. With themes that allow pagination, you can have, for example, a maximum number of outcomes of 20, displayed in 4 pages of 5 products.
{% endhint %}


# Forget results

When an pickzen is completed, the results are stored in the browser of the user, so if the pickzen is displayed again, the recommendation slide will be the slide that will be shown.

However, sometimes this behavior is not ideal. To disable this, go to the *General* tab of the end slide settings and enable *Forget results*:

![](/files/kPdngVuPedVcU8AFQOB6)


# Automatic redirect

Sometimes, you don't want to show an end slide at all, you would prefer to redirect your users to specific pages: a product, a collection, etc. To achieve this, go to the *General* tab of the end slide settings and enable *Automatic redirect*:

![](/files/IvpxHijAMfgkQ1Ex9Pli)

In this case, the user will be redirected to the best matching product URL.


# Recommending content

A typical use case of the [automatic redirect](/create/creating-questions/end-slide-layouts/automatic-redirect) is for recommending content. Imagine you don't want to recommend products, instead, you want to recommend content entries of your site or blog. In this case, you wouldn't have products per se, but you would create "products" that represent those entries.

For example, you could have a set of "products" like these:

![](/files/-Ls7_cOW1DZv_oNVdRXy)

With the following information:

![](/files/-Ls7_lvZ-E_M-U_vcwhQ)

Only the ID, Name, and Url would be necessary to create these kinds of products because the user will be redirected to the specified Url. The product itself won't be displayed in the recommendations.

You can use all the capabilities of Pickzen to recommend these kinds of products (linking, rules, attributes, etc.) in order to improve the engagement of your site.


# Skip Logic

Skip logic refers to the order in which the slides will be presented to the user. There are three ways to create it:

* [**Controlled by slides**](https://help.pickzen.com/create/creating-questions/branching-logic/branching-controlled-by-slides): In this mode, you set the default order in the editor and customize it if necessary by dependencies in each slide’s settings.
* [**Controlled by tree**:](https://help.pickzen.com/create/creating-questions/branching-logic/branching-controlled-by-tree) In this mode, you create a tree diagram with the paths based on previous answers.
* [**Programmatically**](https://help.pickzen.com/developers/developers-panel/javascript-customization): Using our JavaScript API, you can have full branching control.


# Branching controlled by slides

By default, slides are shown to the user in the order defined on the left of the editor:

<figure><img src="/files/8rFfcY8jK0qqUjFRGK4n" alt=""><figcaption></figcaption></figure>

You can change the order of the slides by dragging and dropping them in the desired order. However, there are cases where the default order is not enough for your needs.

For example, if you want the *Foundation* question to be displayed only if the user selects the choice *Foundation & Shade* in the *Help type* question, you need to create a dependency. To do this, click on the arrows icon of this slide

<figure><img src="/files/99TL3LFLTdwLAivgtV2I" alt=""><figcaption></figcaption></figure>

And select as a condition the *Foundation & Shade* choice of the first question:

<figure><img src="/files/DXTSIGo1EuohAhuKavsR" alt=""><figcaption></figcaption></figure>

In this case, the slide will only be shown if previously the user selects “Foundation & Shade” You can also set the opposite, and not show a slide depending on a user’s previous answer.

{% hint style="info" %}
If multiple conditions are selected, the slide will be displayed (or not displayed) if any of the conditions are met.
{% endhint %}


# Branching controlled by tree

By default, Pickzen shows the slides based on their order and settings with dependencies, as explained in the Branching controlled by slides section. However, there are situations where more control is needed. In these cases, a manual decision tree could be an optimal solution. Unlike the default mode, in this mode you have to indicate which questions will be asked after each user response as in the following example:

![](/files/-LrtAvK2A8Y5oZ1LgYUX)

In tree-mode, the slides are represented as circles and are called “nodes”. A final node is called an “endpoint” and defines the products to be recommended when the endpoint is reached. The lines joining nodes are called “branches.” In this example, the first question is “Fashion / Comfort” and the next slides would be shown according to the answers following the branches of the tree until an endpoint is reached. The products defined at the endpoint will be recommended to the user.

In this example, we can see there are two types of slides, branching slides and non-branching slides. A branching slide will lead the user to different outcomes based on the answers. For example, if the user answers “Flat” it will lead to an endpoint that recommends 4 products. However, if “Heel” is answered, it will lead to the question “High / Low”. Unlike branching slides, non-branching slides will lead the user to the same outcome. They are useful to capture lead information, and they are not used to recommend products or to create advanced recommendation rules.

When hovering on an endpoint, the defined products are shown:

![](/files/-LrtB2xlLORQ2AVOhqcS)

So, if the user doesn’t answer anything to the Fashion/Comfort question, but answers Heel and Low Heel, the three products shown above will be recommended.

## Creating a tree

To start creating a tree, you have to change the end slide type to End tree:

![](/files/IuvvGtPUeToUtn2OapVe)

![](/files/jNjaHbZ8nPN1b6KJkvI5)

After entering the tree mode, the step 3 title will change in the breadcrumb:

![](/files/-LrtByAk2LbA1ycZp7E0)

Once you have all the slides created and your products have been imported, you can create the tree in step 3 as indicated in the following video:

{% embed url="<https://www.youtube.com/embed/C5MygsE4fjY?rel=0>" %}

If you right-click over a node, a menu pops up:

![](/files/-LrtI-gT_Istdlo4RDkf)

This menu allows you to edit the node in order to change the slide or set it as an endpoint. You can also copy a node along with its branches and paste it over to another node to duplicate branches.

{% hint style="info" %}
Branching controlled by tree is only available from our Plus plan.
{% endhint %}


# Products


# Selecting products

When a feed of products has been defined the Products panel will show all products of your feed. Something similar to:

![](/files/An2pOgEYje1m1dXV4HTK)

By default, all products will be used in your pickzen. If you only want to use a reduced set of products, you can select them one by one, or define a rule to select them automatically.

### Selecting products one by one

In order to select your products one by one, simply mark those you want to be used in your pickzen:

![](/files/uy1p5A9NiBKTTDt2bwSC)

In this example, only 4 products were selected and will be used for recommendation.

### Selecting products by rules

If the feed contains hundreds or thousands of products, selecting them one by one can be a heavy task. In these cases, selecting products by rules can be of help.&#x20;

Click on the *by rules* link:

![](/files/JhBSHA1zHqm0FmtxxjFf)

The products panel will change to a rules panel:

![](/files/WsCjTt2J2uhIT7ghxJ12)

Clicking on Siple Rule we can define de rule to select the products. For example, all products with tag *flat:*

![](/files/M0nGEhMdBtLu7wlZGHLS)

In our Plus and Pro plans, more complex rules can be defined, combining AND / OR expressions. For example, all shoes with tags *heel* and *fashion*:

![](/files/VijElrtnkiH2WR95G2PL)


# Managing products

Products can be synchronized with your store products manually, edited, or automatically fetched. Please see the [Product Feeds](/integrations/shopify) section for more information.


# Linking

Once you have created your questions and added your products, you have to link question answers to products so products can be recommended (*Step 3 -* *Linking):*

![](/files/-MFaLmSecBUnJ8ouH275)

In this step, you will have to link each answer to their matching products.&#x20;

The [linking panel](/create/linking/linking-answers-to-products) is the easiest way to connect your questions with products. This method is suitable in a wide number of cases. However, PickZen provides two alternatives:

* [**Decision tree**](https://help.pickzen.com/create/creating-questions/branching-logic/branching-controlled-by-tree): In this case, you would assign products to end nodes (outcomes). Since this method is best for specific use cases, check out the [Branching controlled by tree article](https://help.pickzen.com/create/creating-questions/branching-logic/branching-controlled-by-tree) for more information.
* [**No-Code**](https://help.pickzen.com/guides/nocode): This mode is recommended if you need fully tailored recommendations with the possibility of providing calculations, ideal for cosmetics, and nutritional products. Check out the [No-Code documentation](https://help.pickzen.com/guides/nocode) for more information.&#x20;


# Linking choices to products

This is how your Linking Panel will look:

<figure><img src="/files/SvBtHmvsszb2BnnFCGrV" alt=""><figcaption></figcaption></figure>

Pickzen uses a **voting system** to recommend products. Products need to be **linked to choices** in order to receive votes. Products with more votes will be shown first.

## Choice modes

All defined choices are shown with Include / Exclude buttons:

<figure><img src="/files/uusKbBA0PRQWbRlebejC" alt=""><figcaption></figcaption></figure>

* **Include**: Selected products will be included in the recommendation.
* **Exclude**: Selected products will be excluded from the recommendation.

When products have been linked to a choice their buttons will be highlighted:

<figure><img src="/files/zFrgJa5Gz7DidJWIMo2J" alt=""><figcaption></figcaption></figure>

## Filter vs Relevance

{% hint style="warning" %}
This feature mode is only available in selected plans.
{% endhint %}

By default, Pickzen works as Relevance, like a voting system. In this case, no products will be excluded from the recommendation unless they are explicitly linked to choices using the Exclude button. However, sometimes we need that only products defined in the include mode are recommended (Filter). For example, if *Flat* is selected we want only flat shoes to be recommended (Filter), and not flat shoes first and after them heel shoes (Relevance).

* **Relevance**: When the filter icon is disabled, the products linked to each choice will be recommended first.
* **Filter**: When the filter icon is enabled, only selected products will be recommended.

In order to configure a question as Filter, click on the filter icon:

<figure><img src="/files/qLkbpJAResIhsco9J0zK" alt=""><figcaption><p>A question can be configured as Filter or Relevance by clicking on the filter icon:</p></figcaption></figure>

{% hint style="warning" %}
If we have two or more questions configured as *Filter* the recommended products shown at the end will be the products selected during the *Filtering* process. The *Filter* mode acts as an **AND** filter. So it’s possible when having multiple questions configured as *Filter* that no products can be recommended.
{% endhint %}

For example: Say you have two questions, the first asking for *flat* or *heel*, and the second one asking for the color. When using the **Filter** mode, only flat and red shoes will be recommended if the user selects the **Flat** and **Red** choices. If there are no flat and red shoes in your feed, no products will be recommended. Conversely, if using the **Relevance** mode, flat or red shoes will be recommended first, but shoes with heels and other colors can also be recommended next.

### Skipping choices

If we have a question configured by *Filter*, by default all choices have to have linked products. Otherwise selecting a choice with no products will lead to a **no products found** message at the end.&#x20;

For example, if the user selected *I don't mind*, no products will ever be recommended with this configuration:

<figure><img src="/files/iR9Tdyj3McdIRIo5dWuo" alt=""><figcaption></figcaption></figure>

If we want to configure the choice *I don't mind* so it is not used to recommend products, click on the *Skip choice* icon:

&#x20;

<figure><img src="/files/2m1zh7jmex8n2IVXpX5d" alt=""><figcaption></figcaption></figure>

Once done, that choice won't be used to recommend products:

<figure><img src="/files/SSbE5RhcV7SVdkqn4zXG" alt=""><figcaption></figcaption></figure>

## Selecting products

Each choice can have different products associated. When the *Select* products button is clicked, a pop-up, as shown below, will be displayed:

![](/files/aZKjX15FBCrMu6h9Mcqe)

There are different ways of selecting the products for a choice:

* **Manually**: You will select the products one by one.
* **By tags**: You will compose rules of tags that will select a set of products.
* **By price**: You will define price ranges that will filter out products.

### Manual linking

In this mode, you have to select all the products that are supposed to be linked to the answer manually:

![](/files/oZ59umWKG3g5R9Jud1uX)

We can boost certain products by increasing their weight. For example, if we want to boost the *Filger Woman* shoes, we can set a weight of 5:

![](/files/-MFaTnPUfGux0Ldtnlu0)

### By tags linking

If you’ve imported your products from a tagged feed, or you have manually categorized each product through attributes, the products and choices can be auto-linked. To link this way, change the link type to *By tags*:

![](/files/AL6eK4iR9gqnHFBKFXQk)

Depending on your subscription plan you will find two different ways of defining the products:

#### By tags linking in Free and Lite plans

You will see a panel similar to this:

![](/files/MJvQXdhIx9lJiALqeClW)

In this example, we want to link all flat products to the *Flat* choice so define it as:

![](/files/7efKsEb6NqWlnD38CpfC)

When you click on the *Add* button you will see all the products that have been auto-selected based on the attributes of your products:

![](/files/yby5hjzaWviNc8eIG7XF)

When you click on the *Accept* button, the *Flat* choice will be linked to the defined rule.

#### By tags linking in PLUS and PRO plans

You will see a panel similar to this:

![](/files/vuAekNT4Qw0hlTDfycZw)

In this example, we want to link all flat products to the *Flat* choice. Click on *Simple Rule* and define it as:

![](/files/3ZSM9lUwemG31su0UXxl)

Once completed, you can see all the products that have been auto-selected based on the attributes of your products:

![](/files/BgPOwqOkkD7WSG3oy7ml)

When you click on the *Accept* button, the *Flat* choice will be linked to the defined rule.

{% hint style="info" %}
When using rules, the choices will be linked to a rule, not the products. If there are new products that match the rule after a feed synchronization, those products will appear in your pickzen results. Similarly, if products have been removed from the feed, they will be also removed from the Assistant.
{% endhint %}

### By price linking

If you have a question about price, you can automatically link it to your products through the *By price* type. For example, if you have created a price slide with two choices: *Expensive* and *Economic*, it would be displayed as:

![](/files/7T41udMCtjJP02YabNEl)

With this configuration, all shoes priced between $0 and $50 will be auto-categorized as *Economic*.

<figure><img src="/files/SSbE5RhcV7SVdkqn4zXG" alt=""><figcaption></figcaption></figure>

## Multi-select questions

{% hint style="warning" %}
This feature mode is only available in selected plans.
{% endhint %}

In the case of multi-select questions (multiple choices), you need to specify if the products you’d like to recommend must have all selected choices by the user (ALL), or if it is enough with any of the selected choices (ANY). We can enable (ALL) or disable (ANY) this mode by clicking on the three lines icon:

<figure><img src="/files/jVWBi97wrEUj1rZOfDvq" alt=""><figcaption></figcaption></figure>

For example, if the user selected Red and Blue:

![](/files/-Lv4bpyk7_93o9lKAVDD)

If disabled, Pickzen would recommend products Red **or** Blue. Conversely, if enabled, Pickzen would recommend products Red **and** Blue.


# Install

You can install your pickzen on your site from **Step 4 - Install**:

![](/files/-MFjT8V1Js26k8TnUP7I)

There are four display options:

* [**Notification**](https://help.pickzen.com/create/install/notification): The fastest way to install your pickzen on your website - Launch your quiz as a popup when your customers click on the corner notification button.
* [**Link**](https://help.pickzen.com/create/install/link): Launch your quiz as a popup when your customers click on an existing link or navigation menu link.
* [**Button**](https://help.pickzen.com/create/install/button): Launch your quiz as a popup when your customers click on an existing button.
* [**Embedded**](https://help.pickzen.com/create/install/embedded): Insert your quiz embedded in the content of your website.


# Notification

With this display option, you can configure a corner notification on your site that will launch the Assistant when it is clicked. On the left side, there are the settings you can adjust, and on the right side there is a preview of your site page:

![](/files/-MFjU7UbK6qKvkfM2gz6)

By default, **this notification will be displayed on all pages.** If you want it to be displayed only on certain pages, click on the **Show more** label below and add the conditions to be displayed:

![](/files/-MFj_Nd5sRy8npwWucZt)

In this example, the notification will be displayed on pages like: *<https://yourstore.com/pages/watches>* or *<https://yourstore.com/pages/watches/sku123>*.


# Link

With this display option, you can select an existent HTML link on your site that when clicked, will show the pickzen as a popup:

![](/files/-MFja24PoPbJI3OWqAON)

Adjust the popup width and height for desktop and click on the **Get the code** button. A popup with direction will show up:

![](/files/-MFjaViCysB_zhQxYknL)

Simply edit your page HTML and add the provided code to the HTML link you want to configure. Following this example, in case the link HTML was:

```markup
<a href="/quiz">Take the quiz</a>
```

it should be changed to:

```markup
<a href="#pz-PY7iZrzr7DS-100pct_100pct">Take the quiz</a>
```


# Button

With this display option, you can select an existent HTML button on your site that when clicked, will show the pickzen as a popup:

![](/files/-MFjbnQp2wmd2B0XzHbb)

Adjust the popup width and height for desktop and click on the **Get the code** button. A popup with direction will show up:

![](/files/-MFjbvboX1CxI_8vwPql)

Simply edit your page HTML and add the provided code to the HTML button you want to configure. Following this example, in case the button HTML was:

```markup
<button>Take the quiz</a>
```

it should be changed to:

```markup
<button id="#pz-PY7iZrzr7DS-100pct_100pct">Take the quiz</a>
```


# Embedded

With this display option, you will copy and paste your pickzen code where you want to be displayed. It will be displayed embedded on the page:

![](/files/-MFjcrNID0wRR9PjYFg4)

Adjust the popup width and height for desktop and click on the **Get the code** button. A popup with directions will show up:

![](/files/-MFjd2dKtyOgz8yUG-45)

{% hint style="info" %}
The instructions may vary depending on pickzen's theme. Also, the way it will be displayed can change: into an iframe or directly on the page.
{% endhint %}


# Lead Generation


# Lead capture before recommendation

We define a lead as a phone number and/or and e-mail along with, possibly, a name. To capture this information, create a form-type slide and configure its fields based on the information you’d like to capture. You can do this by clicking the ‘settings’ icon next to each field. For example:

![](/files/-Ls0mKW-GIqGfdfmhZ0c)

To edit a field, hover a field and click on its settings icon:

![](/files/-Ls0ogJtxkjnP_zUyCUA)

A popup will show up with settings for each type of field:

&#x20;

![](/files/-Ls0ovkruYbqSRb98PvA)

The captured information can be viewed from the Insight panel. You can also send a personalized email to each user that enters their email and/or send an email with the user information and answers to a list of emails configured.

Lead information captured on abandoned assistants (not completed by the user) will also be stored and viewed from the leads panel.


# Receiving leads by e-mail

Coming soon...

You may be interested in receiving the responses to a quiz by own e-mail upon completion (**as long as the user entered an email or phone number)**. This way, every time a user completes the quiz, you will receive an email with the answers.

To enable this mode go to the Global settings, select the Notifications tab and enter the emails:

![](/files/-LsrJk1ud6nxfrOcFWHF)

The appearance of the leads that you will receive will be similar to this one:

![](/files/-LsXXOvGDY-bWVblalJq)


# Sending e-mails to new leads

You can send an email to your users when they complete the pickzen. To enable this mode go to Integrations and select *E-mail* and in the displayed panel select a pickzen:

![](/files/wEF36fUmtFjV03kOzqke)

![](/files/PhxD6wNAEoHfoSlhu4J6)

![](/files/-LsrKHu2fjyICskOtcLH)

Click on Active to activate the sending of e-mails and configure the ***E-mail subject, Reply to,*** and ***Sender*****:**

![](/files/-LsrKvspqEWP3ijlQg5h)

{% hint style="info" %}
In order for the emails to be sent on your behalf, you need to configure the ***Sender*** field.&#x20;

The format is ***Sender name \<email>***, i.e. *My company <<info@mycompany.com>>*

Once we receive your request we need to authorize this; until then, no email will be sent.
{% endhint %}

On the right, you can enter the HTML of the email template or use our Template Builder. Click on ***Launch Template Builder*** and select a templat&#x65;*:*

![](/files/-LsXhXTBTYYTPxYdJtTO)

The email builder will show up where you can customize the style and texts:

![](/files/-LsXhh8bakMsm3zxl5UM)

In order to preview a change, click on the Preview button:

![](/files/-LsXhpi36Q4ufWLjT5mE)

Once customized, click on the Apply button:&#x20;

![](/files/-LsXhzkyBTr7d5IgDi7O)

When users complete the Assistant, this email can be sent showing up to 6 recommended products.&#x20;


# Adding customized data to e-mails

Sent e-mails can be fully customized using our [JavaScript API](https://help.pickzen.com/developers/customization-guide/api):

```
Extension.setGlobalValue(id, value);
```

For example, you could send the current date adding this code that will be executed just before the pickzen is completed:&#x20;

![](/files/-MJBkG5kNsUSbEXmhSYA)

In this example, the parameter **current\_date** will be available in the email template using **%current\_date%**

![](/files/-MJBkzYPPlD64GDMGVlr)

Being the received email:

![](/files/-MJBlLl5exogREc3HW7u)


# Advanced


# Product attributes

Each product imported in PickZen can have attributes. These attributes can be used to link products with answers using the default Filter recommendation engine, or to display them as features in the recommendations.

In order to view or edit the product attributes, select a product and open its Attributes section:

![](/files/-Ls1A7ZiCZ_YRGYo8XFJ)

{% hint style="info" %}
If you imported your products from Shopify, there will be 4 attributes predefined: col, tag, type, vendor that correspond with the Shopify Collections, Tags, Type and Vendor attributes.
{% endhint %}

Attributes can be multivalue, separating each value with comma. In the example above, that product has a tag attribute with three values.

You can create additional attributes to enrich your feed. Simply click on the Create attribute button and give an attribute name.&#x20;

{% hint style="danger" %}
If you create attributes manually, you will have to enter its values for each product manually also. If you update your products list from a feed and new products are created, the attributes created manually will be empty.
{% endhint %}

{% hint style="danger" %}
Notice the pin icon <img src="/files/-LrsnvJkCiwnfq_GIjGG" alt="" data-size="line"> next to the attributes. If you import your products again from a feed to update them, the manual information entered previously for these fields will be overwritten unless you click on the pin icon and it is enabled.
{% endhint %}


# Features table

By clicking on the ![](/files/560S5MqVWAKOcxjqpieU)button, you can include a features table in the recommended products to help your users choose the correct product.&#x20;

Here is an example:

![](/files/-Ls1HvkaEsMV_kyKIIcp)

{% hint style="info" %}
To show the features table below each product, you have to enable the check inline features from the Display settings tab in the end slide settings.
{% endhint %}

##


# Features from linking

Imagine you have your questions and answers defined and you want the  linking (categorization) to appear automatically in your products results. Go to the end slide and click on the Features table icon:

![](/files/-Ls1CkvtmLlUM22Gwx4u)

There you will see the a list of tour questions:

![](/files/-Ls1Jc6EjnHMtuQ78a3W)

If you want to add the first one to the features table, click on it and enable the check:

![](/files/-Ls1Jo2JWp_O33dTGtRk)

A form is showed with default information based on this particular question. At the right you can see a preview of the features table such as it would be displayed in each product.

If we were to change the texts to create a more understandable features table:

![](/files/-Ls1Kixx-tUPVebJ5mqD)

In this case, Low, Medium and High would appear checked in the features table depending on the linking of this question.

Similarly, if your second question were:

![](/files/-Ls1LquYLLiYQGpZPvuY)

You can modify the texts to something like:

![](/files/-Ls1M8k1d7JPWDGTPUt3)

And finally, a third slide like:

![](/files/-Ls1NMU-C5am8mVCLnY4)

That you modify to:

![](/files/-Ls1N2CSO5LHT-dehRwH)

When a user takes the quiz the results would be something like:

![](/files/-Ls1g6YF6u1O78k-Vngb)

If you want to show only the matching features, go to the advanced tab and enable "Show only matching features":

![](/files/-Ls1gVHlnYnKATuNmz6M)

In this case, the result would be:

![](/files/-Ls1gdaj6qgHixwluuh4)

If you don't want a section per question, you can group questions in a generic section. Enable "Include in general section" for each answer you want to move to this generic section. For example:

![](/files/-Ls1h77lRPJD3mVTK3Y7)

![](/files/-Ls1hLYTdE6dmv1aguCQ)

The result would be:

![](/files/-Ls1i0MHOPhWnzfhrv8c)

You can modify the title of this generic section in the settings tab:

![](/files/-Ls1i8UgwbikPCuLREMg)


# Features from attributes

You can use the products attributes to show a product features table in each recommended product.

Say you have these kind of attributes for each of your products with details:

![](/files/-Ls27gwC_9qUai-e3_uK)

In order to show them in a features table, go to the end slide and click on the features table icon:

![](/files/-Ls1CkvtmLlUM22Gwx4u)

Now, select the Additional attributes tab:

![](/files/-Ls28bjHpjK_PHy9ifzd)

Select both attributes and give them a displayed name and a unit, in this case it has:

![](/files/-Ls28Y_OfbKoYkCr-J3o)

The results would be:

![](/files/-Ls28ozGXwEx7FVcWAej)


# Smart texts

You can create customized stories and add them to the features table. For example, say you are selling electric scooters and have this question:

![](/files/-Ls2IeZSGha2klKLrHnE)

Imagine your products have the following attributes:

![](/files/-Ls27gwC_9qUai-e3_uK)

Now, you want to show a personalized message for those people that take the bus or metro and need to carry the electric scooter, like an option that would be a good fit for them, like one that weighs less than 14Kg.

Go to the end slide and click on the features table icon:

![](/files/-Ls1CkvtmLlUM22Gwx4u)

Now, select the Smart texts tab:

![](/files/-Ls2Cac-lNUdXzxHagnG)

Now click on the Add text button:

![](/files/-Ls2CrnljWhEtKefhpKU)

On the left, you can define the rule to show the message. In this case it would be an AND Rule that will be activated when you select that take the bus and the scooter weighing less than 14Kg:

![](/files/-Ls2PLBq7ACCHG9mUJ5D)

Now, enter the customized text at the right:

![](/files/-Ls2PFF7XQ2vBUwkaVtI)

The final result would be something like this:

![](/files/-Ls2Q38B0BFhXHjAh5Wu)


# Insertable texts

Insertable texts are personalized texts that can be inserted in slides or emails to create a story for the user.&#x20;

For example, texts like: "Because you usually go up steep hills, we have recommended...", or "Because you answered that you like the sun and have dry skin, we have recommended..."

There are two kinds of insertable texts:&#x20;

* **User answers**: Used to take the user's answers and embed them in any slide separated by comma.
* **Response based texts**: Used to create fully customized stories based on answer conditions.


# User answers

User answers can be used to show the user responses in the pickzen itself or to send emails for storytelling purposes.

Say you have a pickzen with three questions: *Flat/Heel,* *Slide/Thong* and *Walk a lot yes/no*.

You can show your user answers in any slide or in the emails sent to create a personalized story.&#x20;

Go to General Settings, select the Insertable texts tab, and expand User answers:

![](/files/-Ls2cZCh2-SLmYYiAyTV)

Here you can see all defined answers, and below in yellow, the insertion codes to write in your slides or email templates. The explanation of each of them is the following:

* **%responses%** : Combine the user answers separated by commas.
* **%responses:slideId%** : Combine the user answers of a specific slide(s) separated by commas.
* **%form:fieldId%** : Take the response of the field with Id provided.

{% hint style="info" %}
You can get the slide and field Ids from the [developers panel](/developers/developers-panel).
{% endhint %}

If we insert the code %responses% in the end slide like this:

![](/files/-Ls2fZr0FZgVXXk-4E3L)

The result would be:

![](/files/-Ls2fqs6oon6TolrsTTl)

You can see the user answers, but the final result is not as good as the answers that are inserted manually. We can do it better by editing the texts. Return to the User answers panel:

![](/files/-Ls2cZCh2-SLmYYiAyTV)

Edit the texts clicking on each answer:

![](/files/-Ls2hCmvlZuQkF6lI9R3)

And change the end slide text to:

![](/files/-Ls2hXfubwcf4yWC881g)

The final story is now more relevant to the user:

![](/files/-Ls2ho9FumLaVQhOT_vR)


# Response based texts

Response-based texts are customized texts based on the user responses that can be shown in a pickzen or sent emails.

Say you are selling vitamins and you ask this question:

![](/files/-Ls7C3Qayx4lBLXYK1_E)

You want to show a message in the results indicating that the recommended vitamins are safe for pregnant woman, but you only want to show this message when it is a pregnant woman who is taking the quiz.

Go to general settings<img src="/files/-MF_frWL1vgsQWrqnJol" alt="" data-size="line">, select the Insertable texts tab, and expand Response based texts:

![](/files/-Ls7CfVctfVnHG3iwr8M)

Click on the Add text button:

![](/files/-Ls7CutP8HHYl8sbwbtb)

To create a response based text, you must define the condition if you want to display it first. In this case would be a Simple Rule:&#x20;

![](/files/-Ls7DAaAuHcHa6q-U5j0)

Next, we have to define the text that will be shown. Click on the pencil icon <img src="/files/-Ls7Ekz-LWgq4uCctqss" alt="" data-size="line"> and set this text:

![](/files/-Ls7EaLF1jIQbV9L4Mii)

Finally enter *info* as alias:

![](/files/-Ls7F8eiV5B2mLGS_ncp)

Once you have defined an insertable text, go to the end slide and set this parameter in the slide:

![](/files/-Ls7FJAs2eyvICvcs1CC)

When you take the pickzen and answer you are pregnant, this will be the result:

![](/files/-Ls7FWkqAniKiud4uFXt)

If you answer anything else, no extra message will be shown:

![](/files/-Ls7FhFUkZ8UpsSxDwCx)

In this example, we have defined only one insertable text, but we can define as much as we need. For example:

![](/files/-M1XFup65POi6h7hA111)

Note we used the same Alias *info* in order to use the same placeholder, but you could use a different alias if you need.


# Slots

Slots are used to show specifics product types in a determined order as results.

{% hint style="info" %}
This functionality is not user friendly yet. We are working to improve the editor.
{% endhint %}

For example, imagine you are selling cosmetics products and you want the results to be a cleanser, a serum, and a exfoliant. Only those three products in that exact order. In this case, you would define three slots, one for each type of product (cleanser, serum and exfoliant) and Pickzen will fill them with the best matching products automatically.

The slots are defined from attributes, so imagine a simple example where products have an attribute named *type* :

![](/files/-Ls7LNjDxIHlbf7Fj6tp)

To define the slots, go to the end slide settings and check the Activate slots setting, and go to the new Slots tab:

![](/files/sftWbNdGlGTlAYa3GfES)

![](/files/Hwxt6Fvf5JVOnjrsFmbO)

Let's create three slots. We need to define the conditions for each slot. The conditions are attributes that products have to have to be included in the slot. In this example, where the unique attribute is named *type*, the conditions and titles would be:

![](/files/j0fDtE68FZZOZPZ7zfVN)

The result would be something like:

![](/files/-Ls7P5n99Pdzi1ovxx7_)

Only three products, one of each type.&#x20;

In our **advanced mode**, you can also create slots with more complex conditions, for example:&#x20;

![](/files/-Ls7Pyfik6ulfK5d_63Q)

In this case, this slot would be filled with the best matching Shiseido cleanser. In this case, the products would also need a *vendor* attribute:

![](/files/-Ls7QXpRitpTEafpvaZP)

You can also define slots without a specific attribute. For example:

![](/files/-Ls7QQ0BGrIKVT74w9VE)

In this case, this slot would be filled with the best matching cleanser that is not Shiseido.


# A/B Tests


# Launching an A/B Test

Coming soon...


# Reviewing A/B test results

Coming soon...


# Insight panel

You can enter into the Insights panel from the left menu:

![](/files/YrPOY6s4N29XbW6neYwr)

Or clicking on the Insights button of the pickzen you want to see:

![](/files/j3Xx6c3I4GcYAVRdrOg4)

By default, if the pickzen does not have any metrics yet, the following sample data will be shown:

![](/files/oAdx9Rihr2ND2qHCoCqV)

This panel is composed of 3 tabs:

* **Overview**: General metrics showing the performance of the Assistant.
* **Responses**: Aggregated metrics of the responses.
* **Leads**: Leads generated from the Assistant with their answers.


# Overview

This tab shows general metrics showing the performance of the pickzen. Here is an example of the Overview panel:

![](/files/LDshTy6JCqN32pP3exUI)

It is composed of the following sections:

### Engagement Summary

![](/files/-MFkGY9yaPkrzXYbfNau)

In this sample, the pickzen was seen by 3.2K users, of which 2.5K interacted with it (started). This leads to a start rate of 80%. On the other side, the pickzen was completed by 1.7K users, of which 1.2K clicked on any recommended product. This leads to a clicking rate of 69%.

### Completion Rate

It shows the rate of users that complete the pickzen versus those that start.

![](/files/-MFkGaeo0AfChNAFyE38)

### Activity Summary

It shows the visits, engagement visits, and average duration of the pickzen along with the percentage difference versus the previous period.

![](/files/-MFkGeIz6EkaIMYZKjeF)

### Total OS Share

It shows a breakdown of the visitors by Operating System:

![](/files/-MFkGhzyofmbqnAl9Iuk)

### Drop Off

It shows a breakdown of the abandonment percentage of each slide:

![](/files/-MFkGkZxCmbtiQNh68V_)

This information can be used to improve the completion rate of the pickzen.

### Sales Funnel

It shows a visual breakdown from views to sales that can be used to optimize the overall sales:

![](/files/-MG8OjcX6kjL58S0vKGH)

The following table describes each metric:&#x20;

| Metric         | Description                                                                                                                                                                                                                                                                                                                                    |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Views          | The number of times the pickzen is displayed.                                                                                                                                                                                                                                                                                                  |
| Starts         | The number of times users click on the cover slide start button. In the case of pickzens without a cover slide, it corresponds to the times users click on the first slide next button. If *Remember progress* is enabled, a start will be counted each time a user returns to an abandoned pickzen slide and clicks on the slide next button. |
| Completions    | The number of times users reach the end slide with results.                                                                                                                                                                                                                                                                                    |
| Click-Throughs | The number of times users click on a recommended product.                                                                                                                                                                                                                                                                                      |
| Sales          | Total sales of users that interacted with Pickzen versus the number of sales of users that interacted with Pickzen and also purchased any recommended products.                                                                                                                                                                                |

### Top Performing Products (Click-throughs)

It shows the products that have been clicked through the most, along with the number of clicks, and the click-through to recommendation ratio (CTR).

![](/files/-MFkGqQJMf3c41tam5ys)

### Most Efficient Products (Click-throughs)

It shows the products that have the best click-through to recommendation ratio (CTR), along with the number of clicks, and the CTR value.

![](/files/-MFkGt8BDXhi8dIC4aX-)

### Top Performing Products (Sales)

It shows the products that have the most sales, along with the number of sales, and the conversion rate (CR).

![](/files/-MFkGwbcdFlNeqQ5rm7s)

### Most Efficient Products (Sales)

It shows the products that have the best purchase to views ratio, along with the number of sales, and the conversion rate (CR).

![](/files/-MFkGzuSJvOfa041rRxk)

### Top Clicked Products

It shows a table with the products recommended by Pickzen that were clicked through the most:

![](/files/-MFkH1W7QVMyw6LorlT1)

### Least Efficient Products

It shows a table with the products recommended by Pickzen that were clicked through the least:&#x20;

![](/files/-MFkH40pOwmbqDzE8yuv)

### Leads

It shows the number of interested customers who have left their contact information: e-mail or phone number:

![](/files/-MFkH6hb2xat9wLvRTtS)

### Direct Sales

It shows the sum of sales of products recommended by Pickzen.

![](/files/-MFkLMH4RoJta2IJANme)

### Total Sales

It shows the sum of sales of products recommended by Pickzen (Direct sales) and not recommended by Pickzen (Indirect sales).&#x20;

Indirect Sales are sales of products not recommended by Pickzen. This is important in pickzens that don't recommend products, for example, a Sizer. Pickzen will claim an indirect sale only if the customer previously completed a pickzen. So, if a user does not interact with Pickzen, her sales won't be displayed here.

![](/files/-MFkHCrNbJlj5q3WaxXe)

### Referred Revenue

It shows the sum of the value of products referred with click-throughs.&#x20;

![](/files/-MFkHGEgDYpvtFNje6jw)

### Top Sold Products

It shows a table with the products recommended by Pickzen that were sold the most.

![](/files/-MFkHItP5s6AUsOiYg1F)

### Least Efficient Products (Sales)

It shows a table with the products recommended by Pickzen that were sold the least.

![](/files/-MFkLFhX7QPAItntLotB)

{% hint style="warning" %}
By default, the Sales metrics are not displayed. They are only available in certain plans. Please contact us in case you need them.
{% endhint %}


# Responses

In this panel a breakdown of the users by answers is shown:

![](/files/-LsGnpSZcSqUkZDuAHAc)

You can also view the answers from a certain segment by clicking on the Filters button:

![](/files/-LsGo8gD6sCx_TEX7wlr)

In this case, we would view only the data of people that answered Bikini & Light Activity:

![](/files/-LsGnys2eMUtm3dMCp0N)

In the case of abandonment, the "Left" column would be checked.


# Leads

![](/files/-LsGoJBFxeajblZE3zyD)

{% hint style="info" %}
We altered the lead data here for privacy purposes.
{% endhint %}

If you click on any of the leads, you can see their answers, and recommended products:

![](/files/-LsGoiZwOQWsPqaZOhsX)


# Parameters tracking

Campaign parameters of the URL where the pickzen is installed can be added to the recommended product URLs. Similarly, the pickzen can also add custom parameters to the recommended product URLs.

Both features can be configured in General Settings / Tracking:

![](/files/-MGEBYPIHwl9R2jPdouz)

### Campaign parameters

If you need to add existing parameters to the product URL, configure the needed parameters in the **Campaign tracking** field. For example:

![](/files/-MGEC_mJcWDjNcvh3JFF)

In this case, if the page where the pickzen is installed had those two parameters, the parameters and their values will be added to the recommended product URLs.&#x20;

### Adding parameters

If you need to add custom parameters to the recommended product URLs, you can add them to the **Parameters to add** field. For example:

![](/files/-MGEDIhXWwnlCJX6sPHd)

In this case, those two parameters will be added to the recommended product URLs.&#x20;

{% hint style="warning" %}
In the case of [showing the results in Shopify](https://help.pickzen.com/integrations/shopify#showing-results-in-shopify) instead of displaying the products on the default recommended products page provided by Pickzen, those parameters will be added to the URL of the page where Pickzen will redirect, not the product URLs. You will need to add a custom Shopify liquid code to take the parameters from the URL and add them to each product.
{% endhint %}


# Sales tracking

Sales can be tracked by Pickzen once configured. Pickzen will differentiate between direct sales and indirect sales:

* **Direct sales**: Sales of products that have been recommended by Pickzen.
* **Indirect sales**: Sales of products not recommended by Pickzen. This is important in Assistants that don't recommend products, for example, a Sizer. Pickzen will claim an indirect sale only if the customer previously completed an Assistant.

{% hint style="info" %}
The Sales module is disabled by default and it is only eligible for certain accounts. Write to us to evaluate your case.
{% endhint %}

### Shopify

In order to track sales from products purchased in Shopify, log into your Shopify store and go to Settings / Checkout / Order processing / Additional scripts and add the following code:

```javascript
{% if first_time_accessed %}<script>var pzOrderId={{order.order_number}};if(pzOrder={{checkout.order.line_items|json}} || {{order.line_items|json}},pzOrder){for(var pzProducts=[],pzI=0;pzI<pzOrder.length;pzI++){var line=pzOrder[pzI],gId=(line.product_id||line.product.id).toString();pzProducts.push({id:line.variant_id.toString(),gId:gId,price:parseFloat(line.price),quantity:line.quantity})}var pzTimer=setInterval(function(){window.pzIntegrationLoaded&&(clearInterval(pzTimer),window.pzConvertionTracker.notify(pzProducts,{order:pzOrderId}))},1e3)}</script>{% endif %}
```

Example:

![](/files/-MAfAchqXv5ZgWRtbbC1)

### Shopify + Recharge v1

In order to track subscription sales from Recharge v1, first ensure you followed the configuration steps for Shopify. Once done, open the Recharge app in your Shopify store, and click on *Checkout*:

![](/files/-MAf9x_21jiWj_y9copH)

Then, add the following code to the *Thank you page,* replacing first the *XXXXXXXX* code with your userId:

```javascript
<script async src="https://admin.pickzen.com/client/id/XXXXXXXX"></script>

{% if first_time_load %}<script>function parseHtmlEntities(r){return r.replace(/&#([0-9]{1,3});/gi,function(r,t){var e=parseInt(t,10);return String.fromCharCode(e)})}var pzOrderId={{order_number}},pz_products=[];{% for item in line_items %}pz_products.push({id:"{{item.variant_id}}",gId:"{{item.product_id}}",price:{{item.price}},quantity:{{item.quantity}}});{% endfor %}var pzTimer=setInterval(function(){var r;window.pzIntegrationLoaded&&(clearInterval(pzTimer),(r=parseHtmlEntities("{{attributes.pzRechargeData}}"))&&(r=JSON.parse(r)).forEach(function(r){pzConvertionTracker.notify(pz_products,{order:pzOrderId},2,JSON.stringify(r))}))},1e3);</script>{% endif %}
```

Example:

![](/files/-MAfDJVmLA4ZwUzLxSIk)

{% hint style="info" %}
You can get your userId in Integrations / Your Website / Pickzen Code
{% endhint %}

Finally, you need to add this code into Integrations / Your Website / Developers / Integration code:

```javascript
window.pickzen.onCompletion = function(code, products) {
  jQuery.getJSON('/cart.js', function(cart) {
    var rd;

    if (cart.attributes.pzRechargeData) {
      rd = JSON.parse(cart.attributes.pzRechargeData);
    } else {
      rd = [];
    }

    var data = window.pickzen.utils.getByKey(rd, 'code', code);
    if (!data) {
      data = {
        code: code,
        ct: code + ',0:0',
        pt: []
      };
      rd.push(data);
    }

    products.forEach(function(p) {
      if (!window.pickzen.utils.getByKey(data.pt, 'id', p.id)) {
        data.pt.push(p);
      }
    });

    jQuery.post('/cart/update.js', "attributes[pzRechargeData]=" + JSON.stringify(rd));
  });
};
```

### Shopify + Recharge v2

In order to track subscription sales from Recharge v2, simply ensure you followed the configuration steps for Shopify.

### Other platforms

Go to Integrations / Your site and enter the fragment of the page that corresponds with your confirmation URL:

<figure><img src="/files/jv9O72dpYWUnIuqrZunc" alt=""><figcaption></figcaption></figure>

Below, in the Code to get purchased products, you can enter your custom JavaScript code to fetch the purchased products and send them to Pickzen:

<figure><img src="/files/wslVlYpNmWhp3m6DEJHL" alt=""><figcaption></figcaption></figure>

```
var pzOrderId = orderId;
var pzProducts = products; 

var pzTimer = setInterval(function() {
    if (window.pzIntegrationLoaded) {
        clearInterval(pzTimer);
        window.pzConvertionTracker.notify(pzProducts, {
            order: pzOrderId
        });
    }
}, 1000);
```


# Your website


# Pickzen Code

The PickZen Code is a line of JavaScript code that is inserted in your website that allows full integration of PickZen on your website. It is necessary in order to install a pickzen on a page from the Install step, track conversions, run AB tests, add products automatically to the cart, and in some cases, have a fully responsive pickzen.

{% hint style="info" %}
If you installed the Pickzen App from Shopify / Woocommerce / Magento, the PickZen Code will be installed automatically.
{% endhint %}

Once included on your website, you can install your pickzens on your website easily without the need of an IT specialist or web designer.


# Installing the Pickzen Code in Shopify

If you installed the Pickzen App from Shopify, the Pickzen Code will be installed automatically. You can remove the Pickzen Helper Code at any time simply by uninstalling the Pickzen App from your Shopify store.

{% hint style="danger" %}
Do not install the Pickzen Code manually on your site if you installed the Pickzen App from Shopify as metrics generated by Pickzen could be wrong.
{% endhint %}


# Installing the PickZen Code on any website

The PickZen Code has to be included in the \<head> section of the pages where you want PickZen to be installed. You can view the PickZen Code associated with your site  by clicking on:

![](/files/jxg72I1OvhafPpcaCYsT)

And then, on Your website / PickZen Code:

![](/files/UZz676X5U5nVr8jAEbmX)

{% hint style="info" %}
If you installed the PickZen App from Shopify / Woocommerce / Magento, the PickZen Helper Code will be installed automatically and this panel won't be available.
{% endhint %}


# Add to cart

{% hint style="danger" %}
This is a technical article for **some of our legacy products**. Ask us first in case of issues adding products to the cart. In any case, we recommend a developer follow the article.
{% endhint %}

By default when a user clicks on recommended products, they will be redirected to the product page. Sometimes is desirable to add a product to the cart from the end slide. To enable this feature you need to add some JavaScript code and configure the products' call to action buttons.

## Adding Add to Cart JavaScript code

Go to Integrations and select configure your website:

![](/files/-MFkMsnZ7hWC2oqW2_1g)

Select the *Developers* tab:

![](/files/-Ls7eGj_icE4DC7nCq4e)

Paste the following code into *Integration code*:

```javascript
var pzItems, pzAddToCartDone;

function pzOnCompleteAddToCart(msg){
    pzAddToCartDone({success:true, msg:msg});
}

function _pzAddItemToCart(item, quantity, callback) {
    quantity = quantity || 1;

    var request = {
        type: "POST",
        url: "/cart/add.js",
        data: "quantity=" + quantity + "&id=" + item.sku,
        dataType: "json",
        success: function() {
            callback(true);
        },
        error: function() {
            callback(false);
        }
    };

    jQuery.ajax(request);
}

function _pzAddMultipleToCart() {
    if (pzItems.length) {
        var item = pzItems.shift();
        if (item) {
            _pzAddItemToCart(item, 1, _pzAddMultipleToCart);
        } else {
            _pzAddMultipleToCart();
        }
    } else {
        pzOnCompleteAddToCart('Products added to the cart');
    }
}

window.pzAddItemToCart=function(item, origin, done){
    pzAddToCartDone=done;
    _pzAddItemToCart(item,1,function(success){
        var msg = success?'Product added to the cart':'Error adding product to the cart';
        pzOnCompleteAddToCart(msg);
    });
};

window.pzAddAllToCart=function(items, origin, done){
    pzItems=[];
    for (var i=0;i<items.length;i++) pzItems.push(items[i]);
    pzAddToCartDone=done;
    _pzAddMultipleToCart();
};
```

{% hint style="info" %}
Note that this code has some feedback texts like *Product added to the cart* that you can modify if you need.
{% endhint %}

The result would be:

![](/files/-Ls7et-qCgFCWK2I1Kek)

## Configuring the products call to action buttons

To configure the products' call to action button (typically a *Shop* button):

![](/files/-Ls7fzQ-NKwBOc9JfN2Z)

Edit your Assistant click on Settings<img src="/files/-Ls7gJWzpFMvjtH83L9Q" alt="" data-size="line">, select Developers tab, End slide and Call to action:

![](/files/-Ls7gy7ETg5aHNssh8WF)

You now have to insert the following code in the *JavaScript code for each buy button* section:

```javascript
//call:pzAddItemToCart
```

![](/files/-Ls7hI4nd_mgWCi1PP-e)

Once done this step, all your products' call to action buttons will add a product to the cart.

## Updating your eCommerce cart icon

By default when you add a product to the cart from Pickzen, you will note the the typical cart icon on the top the site won't be modified:

![](/files/-Ls7iafKpza87hvGwcOg)

The reason is that every site/theme has different cart icons and it's not possible to create a generic code valid for all of them. There are sites that show the number of items in the cart with number, others shows them with a dot,  and others even with nothing at all. There are sites that when the icon is clicked the user is redirected to the cart page, others that when it is hovered a drawer appear on the same page, etc.

Depending on your particular site, you will need to write specific JavaScript code to integrate with your cart. This is typically done in the *pzOnCompleteAddToCart* showed above. For example, this code would update the number of products currently in the cart:

```javascript
function pzOnCompleteAddToCart(msg){
    jQuery.getJSON('/cart.js', function(cart) {
        $('.cart-link .cart-count').html(cart.item_count);
    });

    pzAddToCartDone({success:true, msg:msg});
}
```

When the product or products are added to the cart, we make a call to Shopify to get the total number of products in the cart, and update the number through jQuery assuming the CSS selector were that.

In the case that your site showed a drawer on the same page, you would note that although we manually update the number of products, when you hover the cart the drawer won't show the actual products, that's to say, the products just added by Pickzen to the cart won't be displayed:

![](/files/-Ls7lnNI3hucU2O8tL-6)

![](/files/-Ls7lyk0gAcjFFrbIpVa)

To also update the drawer, you need to contact your Theme creator to find how you can update the drawer dynamically from JavaScript.&#x20;

A quick workaround is to disable the default drawer so when the user hovers on the cart icon, the drawer won't appear, and when the user clicks on the cart icon, they will be redirected to the cart instead of showing the drawer in the same page. A developer is needed to create this JavaScript code that will be also added to the *pzOnCompleteAddToCart* functio&#x6E;*.*

### Recharge

To create subscriptions using Recharge (adding Recharge products) we need to make some modifications over the code above. First, we need the Recharge product Id that is different from the Shopify product Id.&#x20;

{% hint style="info" %}
Follow the [Recharge](https://help.pickzen.com/integrations/recharge) guide to set it up properly before following this guide.
{% endhint %}

If we have imported Products in Pickzen, the Recharge Id is in the item variants. For example:

```javascript
var firstRechargeId = item.meta.variants[0].recharge.id;
```

Conversely, if we have imported Variants in Pickzen, the Recharge Id is in the item itself:

```javascript
var rechargeId = item.meta.recharge.id;
```

Having this in mind we have to create an equivalent **\_pzAddItemToCart** function that uses the Recharge product Ids and sends the required Recharge attributes:

```
function _pzAddItemToCartRecharge(item, quantity, callback) {
    quantity = quantity || 1;

    // In case of importing products instead of variants, 
    // select the first variant as example
    var rechargeId = item.meta.recharge.id?
        item.meta.recharge.id:
        item.meta.variants[0].recharge.id;

    var request = {
        type: "POST",
        url: "/cart/add.js",
        data: {
            "quantity": quantity,
            "id": rechargeId,
            "properties[shipping_interval_frequency]": "4",
            "properties[shipping_interval_unit_type]": "Weeks",
            "properties[subscription_id]": "12345678"
        },
        dataType: "json",
        success: function() {
            callback(true);
        },
        error: function() {
            callback(false);
        }
    };

    jQuery.ajax(request);
}
```

For more information, refer to Recharge documentation.

�

�


# Add all to cart

{% hint style="danger" %}
This is a technical article for **some of our legacy products**. Ask us first in case of issues adding products to the cart. In any case, we recommend a developer follow the article.
{% endhint %}

If you want to add an *Add all to cart* button to your end slide, please follow first the article [*Add to cart*](https://help.pickzen.com/integrations/your-website/add-to-cart). Once done, edit your Assistant, click on General Settings <img src="/files/-MFkNKuH2q4FaYd9Z0Bv" alt="" data-size="line"> , select the Developers tab, then End slide, and finally Call to action:

![](/files/-Ls7gy7ETg5aHNssh8WF)

You now have to insert the following code in the *JavaScript code for add-all-to-cart button* section:

```javascript
//call:pzAddAllToCart
```

Resulting in something like:

![](/files/-Ls7oJ_j6PUJqA_AN4tD)

Once done, a customizable text link will appear in your end slide to add all products to the cart:

![](/files/-Ls7odwHZ820--T69EMr)


# MailChimp

When a user completes a pickzen, all captured information can be sent to a MailChimp list. This includes the lead information, selected answers, and information filled in from slides.

Refer to the [MailChimp guide](https://help.pickzen.com/guides/mailchimp-guide) for a complete case use.


# Klaviyo

When a user completes a pickzen, all captured information can be sent to a Klaviyo list. This includes the lead information, selected answers, and information filled in from slides.

Refer to the [Klaviyo guide](https://help.pickzen.com/guides/klaviyo-guide) for a complete case use.


# HubSpot

When a user completes a pickzen, all captured information can be sent to a Hubspot list. This includes the lead information, selected answers, and information filled in from slides.

Refer to the [HubSpot](/guides/hubspot-guide) guide for a complete case use.


# Zapier

You can integrate PickZen with more than 2.000 applications and services, through Zapier.

In order to create your Zap, you have first to be invited to use our Pickzen app. Click on the next link to use get an invitation:

```
https://zapier.com/developer/public-invite/9309/a6e3524f4ec21986ce2dafae4da11fef/
```

Once you have accepted the invitation, you only have to create your Zap, choose the PickZen app:

![](/files/-MAj_dtZHqoeEU2lUEff)

Now, select the "New Quiz Result" trigger:

![](/files/-MAj_rV7TGJnx_ctZTmE)

Then, Sign in to Pickzen:

![](/files/-MAja1emklnFh2AiWaHu)

Now, get your Zapier API key and paste it here:&#x20;

![](/files/-MAjdV2MmBYfzNQNDXu_)

Then, select your account. In this example is *<sara@supershoes.com>*:

![](/files/-MAjbjGmxwfF9ZfsEEdn)

Select your Assistant, in this example names *Shoes finder*, click on Refresh fields, and click on Continue:

![](/files/-MAjbAjTT7NpJbTicYu4)

If everything went well, you can now see a test result from your Assistant:

![](/files/-MAjbxKgWvgcRY1Ohz7S)

Click on continue, and connect Pickzen with the App you want:

![](/files/-MAjc49iWdHX4Xcm6scB)

&#x20;


# Recharge


# Recharge v1

Enter your Recharge Subscription Id:

![](/files/Fmt0zDaxYsObJY0JwTW0)

{% hint style="warning" %}
If you update the Subscription Id after you have published your pickzen, you have to edit the pickzen and publish it again to reflect the change.&#x20;
{% endhint %}

{% hint style="warning" %}
It is necessary that all products have SKUs in Shopify for this integration to work.
{% endhint %}

### Updating rulesets in Recharge

Whenever you Synchronize your products from Recharge by clicking *Sync all products*:

![](/files/-MAfFjARRek3GynwTomK)

You have to follow these steps in Pickzen:

1.- Go to **Integrations / Shopify** and click on the Synchronize now to fetch an updated list of Products from Shopify and Recharge.

![](/files/-MAfIkdVtezNVIqy5rde)

2.- Go to **Integrations / Recharge** and click on the Synchronize button to apply the changes to all published pickzens:

![](/files/Fmt0zDaxYsObJY0JwTW0)


# Recharge v2

Enter your Recharge Token:

![](/files/lFIOpWadIEWKvAcdrzwc)


# Product Feeds

In Integrations / Product Feeds, we can configure our product feeds. We can have different assistants pointing to different product feeds so they will use different products.

{% hint style="info" %}
Multiple feeds are only available in selected plans.
{% endhint %}

For example, when only one feed is configured, the view will be similar to this one:

<figure><img src="/files/WhQ9f0YvcxplPU7mItzc" alt=""><figcaption></figcaption></figure>

We see the name of the feed, the source (Shopify in this case), if it is configured daily, and the last fetch time. We also see some buttons to configure the feed ![](/files/FMKrL0d8tvJeMzzqxncw), edit its products ![](/files/kTb7YJQSQE7lhKaCHd6u),  and fetch them ![](/files/H2SJA5RYbWrn0lbQEfvp).

### Fetching the products

We can click on the ![](/files/HhcXk7gAyMhs2dxDU6q1)button to fetch products from the feed and import them in Pickzen. This action will also update your assistants configured to use this feed.

### Changing the feed name

Click on the![](/files/FMKrL0d8tvJeMzzqxncw)button and enter the name by clicking on its current title:

<figure><img src="/files/juWnbsswsfrIpKEs7HkU" alt=""><figcaption></figcaption></figure>

### Importing variants

If the feed allows variants, you can import the variants as products. Click on the![](/files/FMKrL0d8tvJeMzzqxncw)button and check *Import variants*:

<figure><img src="/files/YBxj72wgCDgv1ouDvD6q" alt=""><figcaption></figcaption></figure>

### Daily sync

We can configure a daily time to update the feed of products from the feed. Click on the![](/files/FMKrL0d8tvJeMzzqxncw)button, check Fetch products daily and select the assistants you want to be daily updated:

<figure><img src="/files/FMhrKLgDNH88fgCtIYvM" alt=""><figcaption></figcaption></figure>

### Showing results in Shopify

It is possible to show the recommended products in the Shopify store itself instead of the Pickzen results page. For it, you have to create a Shopify Liquid template that will be displayed as a part of the online Shopify store's theme. Pickzen will redirect to that page passing the following parameters that the Liquid template can use to render the results:

```
%header% Customized text by quiz.
%pzids% List of recommended product IDs separated by comma.
%pzhandles% List of recommended product handles separated by comma.
%pzselections% User response IDs separated by comma.
%pzslots% Slot titles separated by comma.
%pzuseid% User session execution ID to be used in API requests.
```

The technology behind this functionality is Shopify App proxy. Refer to Shopify [documentation](https://shopify.dev/tutorials/display-data-on-an-online-store-with-an-application-proxy-app-extension) to know more.

The results Liquid template is defined in the *Advanced* section. Click on the![](/files/FMKrL0d8tvJeMzzqxncw)button and open the *Advanced* section:

<figure><img src="/files/wqrxSIpwNZESji3aBIZ0" alt=""><figcaption></figcaption></figure>

As an example, you can enter this template:

<figure><img src="/files/XSDXY6WQcoJHtZO5OLu5" alt=""><figcaption></figcaption></figure>

In this example, we are transforming the *pzhandles* parameter in an array on which we iterate to render each product through the *product-item* snippet.&#x20;

Once defined the results template, we need to configure the Assistant to redirect to Shopify. Simply, enter into the **end slide settings** and enable *Show results in Shopify*:&#x20;

<figure><img src="/files/u1bjd9m87pPIzmDISsKS" alt=""><figcaption></figcaption></figure>

We can optionally set a customized text that can be shown in the template through the *header* parameter, for example:

<figure><img src="/files/18J3QEZgrk9Q0mH98oaB" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Try to minimize or avoid if possible the header text passed to the template because the information available to pass to the liquid template, including the recommended products, is limited.&#x20;
{% endhint %}

### Editing the products

Products fetched from the feed can be edited by clicking on the edit products ![](/files/kTb7YJQSQE7lhKaCHd6u)icon. A panel with the current products in Pickzen is displayed:

<figure><img src="/files/CfPYLb57FeKdxzPu9Dn1" alt=""><figcaption></figcaption></figure>

Here you can add new products, delete products or edit them. In order to edit a product click on the pencil icon next to the product when hovered:

<figure><img src="/files/pT2iulWcsJipzXmSizPN" alt=""><figcaption></figcaption></figure>

Once clicked the product editor will be displayed:

<figure><img src="/files/795ak6NHKGUp4G9bD581" alt=""><figcaption></figcaption></figure>

Here you can edit the product properties and attributes.

The fields you can modify are:

* **ID**: The unique identifier of the product.
* **SKU**: Stock-keeping unit.
* **Name**: The name of the product that will be displayed in the recommendations.
* **Vendor**: The vendor of the product.
* **Price**: The price of the product without the currency. The currency has to be defined in general settings.
* **Boost**: The boost is used to sort the recommended products. If you want a product to be recommended first, give it a greater boost. The default boost for all products is 1.0.
* **URL**: The external URL of the product is where the user can see more information when the recommended product is clicked.
* **Image**: The URL with the image of the product.
* **Description**: The text with a description of the product. This description can be shown along with the recommendations.

Once you have edited your products, click on the Update feed button to save the changes:

<figure><img src="/files/DTIjYtm7Wz7p6l7Ha7ny" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Updating the feed only updates the products in Pickzen. Your store products will never be updated.
{% endhint %}

Keep in mind that the next time you fetch the products from the feed, **your changes will be overwritten** with the actual feed product values. In order to avoid this, you need to pin the fields that you don't want to be overwritten:

<figure><img src="/files/fwskvLsAJpTOP2WdMTwH" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Products that you create manually will always be deleted the next time products are fetched from the feed unless the feed includes those product IDs.
{% endhint %}


# Google Analytics

Some events like the slide displayed or the recommended products clicked can be tracked in Google Analytics. In order to set it up, enable your Google Analytics integration:

![](/files/hmqXq3QVnl8hescynOB3)

{% hint style="warning" %}
Keep in mind that Pickzen will try to use the Google Analytics script installed on the page. If this script has not been installed, no events l be sent.&#x20;
{% endhint %}

### Events

#### slide-view

Event fired when a slide is displayed.

**Event Action**: slide-view\
**Event Category**: pz #assistantCode\
**Label**: #slideId

#### end

Event fired when the Assistant is completed.

**Event Action**: end\
**Event Category**: pz #assistantCode

#### result-click

Event fired when the user clicks on a recommended product.

**Event Action**: result-click\
**Event Category**: pz #assistantCode\
**Event Label**: #productId

#### result-generic-cta-click

Event fired when the Add all to cart button is clicked.

**Event Action**: result-generic-cta-click\
**Event Category**: pz #assistantCode

This is a sample view:

![](/files/-MAaWYhNBoVSVWSrvqFE)

{% hint style="info" %}
If you need any particular event, let us know.
{% endhint %}

#### <br>


# Facebook

You can retarget your users from Facebook/Instagram configuring your Facebook pixel Id in PickZen. View the guide [Facebook/Instagram retargeting](https://help.pickzen.com/guides/facebook-instagram-retargeting) for more information.


# Facebook/Instagram retargeting

In order to retarget your users from Facebook/Instagram your Facebook pixel Id has to be configured in PickZen. Select Integrations/Facebook and enter your pixel Id:

![](/files/-MG8axtBcTnbu9WIXKUk)

Once done all your Assistants will send information to your Facebook account.&#x20;

In case you don't want a specific quiz to send information to Facebook, you can uncheck the Facebook pixel setting.

![](/files/VZe001zrI6SxR7ubBTaf)

Let's suppose we have an Assistant with the following questions:

1. What shoes do you prefer?
   1. Flat
   2. Heel
2. What style do you prefer?
   1. Classic
   2. Fashion
3. Enter your name and age
   1. Name
   2. Age

Now, suppose we want to retarget the users that prefer fashion heel shoes with age greater than 30 years old. Go to Integrations / Facebook and select your Assistant. The Audiences Creation Helper will display all the available keys needed to create the audience on Facebook:

![](/files/-MG8kx6AxlyXlsiq7YiZ)

All answers are associated with the pzSlide event. In this example, the Heel answer has **pzSlide options** as **\[101]**,  Fashion **pzSlide options** as **\[107]**, and the age field **f101\_105** as **30**.

With this information, we can go to Facebook Ads Manager and create a new audience:

![](/files/-MG8krUAlVwc3stjxIvK)

Note as the keys are relative to the current Assistant so first of all, it is necessary to filter the pzSlide events by Assistant code:

![](/files/-MG8mg5-xa7gm4rOEEPS)

Similarly, in the case you need to retarget only the users that completed the Assistant, you can also use the event **pzFinish** with the Assistant code:

![](/files/-MG8muP7T8k3YZVgxINR)


# HubSpot guide

When a user completes a pickzen, all captured information can be sent to a Hubspot list. This includes the lead information, selected answers, and information filled in from form-slides.

Let’s suppose we have a pickzen with these three slides:

![](/files/7eN4OLgCaB626mjncofk)

![](/files/aOSESeJcjaiZUz8OEJLZ)

![](/files/tMl5fBD0snjTKVokTvhV)

To send your leads and user preferences to Hubspot, follow these steps:

Click on the field settings for *E-mail* and *Name* fields:

![](/files/2xKvjdPMQ7bvlYbRSptp)

Go to the Advanced tab and set the keys as *email* and *firstname* to map these answers to the corresponding Hubspot field properties:

![](/files/39ZxeAwKmbTUqZpnHwAQ)

Go to the second slide and click on the answer settings for the *Underage* *Yes answer*:

![](/files/ojHWfscHTesoq43t4vZK)

Go to the Advanced tab and set the *underage* key in the *Answer key* field:

![](/files/o4IZ4sEAk1xohoUpY3Gt)

Finally, do the same with each of the three *Likes* answers and set their keys as *action*, *comedy,* and *drama*.

Once configured all answers and fields, publish the Assistant, exit the editor and go the Hubspot integration:

![](/files/1n2q0t7BnqWIcbzNFnQX)

Click on Add integration to create a new one and select the Assistant you want to integrate, enter your HubSpot API Key, the List ID where you want to send your leads, and the keys you configured previously:

![](/files/qrghNmZdoV4rzzhtDVMH)

In this example, we are sending the email, firstname and underage values as separated fields to HubSpot, and the action, comedy, and drama values combined as a HubSpot custom field named *likes*.&#x20;

{% hint style="warning" %}
Custom HubSpot fields like "underage" and "likes" must be created in HubSpot, otherwise, the lead will not be registered in HubSpot.
{% endhint %}

Once a lead is received, the lead Contact Information panel in HubSpot will display the entered information:

![Entered user email](/files/-M22kTiU4DY9mYYq6_Tg)

![Entered user first name](/files/-M22kWlEBOmQFawKxDU1)

![Asterisk meaning the user selected the Underage answer](/files/-M22kah94dvjI6YwMKMd)

![Combination of all selected answers](/files/-M22ke_z7OcSoZyqtUii)


# MailChimp guide

When a user completes a pickzen, all captured information can be sent to a MailChimp list. This includes the lead information, selected answers, and information filled in from form-slides.

Let’s suppose we have a pickzen with these two slides:

![](/files/eO2oXm9p8n0wZRyn1wM4)

![](/files/hhQ5HcR5rmnbbg3SBidq)

To send your leads and user preferences to MailChimp, follow these steps:

Click on the answer settings for the *Android* answer:

![](/files/9Yl8CnNy3XUuWwgxAnNu)

Go to the Advanced tab and enter a key in the Answer key field:

![](/files/vk4bIsgMWWfRxmtLg22v)

Similarly, enter a key for the *iOS* answer:

![](/files/2Lri5fyqpW7kR9T6kR5r)

Now, select the form slide and enter the field keys for the fields *name*, *e-mail,* and *city*:

![](/files/QrncEymk2w1QzVjZ8LC7)

![](/files/A7ePsEdnrz2b3NHiolGy)

![](/files/nByN76FkpcpactyPvDgn)

{% hint style="info" %}
In MailChimp there are some predefined Merge Tags as FNAME or EMAIL that have to be set as Field key to be mapped correctly in MailChimp lists.
{% endhint %}

Once configured all answers and fields, publish the pickzen, exit the editor and go the MailChimp integration:

![](/files/NeNT1SVA7YLRhjNIcCAY)

Click on *Add integration* to create a new one and select the pickzen you want to integrate:

![](/files/uGicIQm2CeuWF03wwIDJ)

&#x20;Find your MailChimp API Key in the Extras tab in your account:

![](https://lh4.googleusercontent.com/5ptAFGAAnOxK6m-8ddhtosROmjrSVcuGNoWVHfB6V9b_OsKuJir_T7DDXAJ81lrSiPYuHaVSiDdd9Up1RxGeYzYYmMXiiz3N0iywlMWbOTVBKlmdU-qNVzRkFzz0ReGNBz1wGd9I)

The page that shows up has your API keys. If you don’t have any key, you can create the first one by clicking on the *Create A Key* button.

Create a List in MailChimp\ <br>

![](https://lh6.googleusercontent.com/-sohXcpIEbD-TaBet8sSs3rJQcBIxjmE1PaAPUD6VxTjq9KbXl112QAoD9hayUAlA_Jn9P5k2YIHe_SWg--EOdvFZGFoAIImyIjVB3HWc10CLdqbA6bsDft8E3d9recMxZ-M33qr)

![](https://lh3.googleusercontent.com/8gB88Hl020U23b7-GU7zYxJUQuPivwYihJzt_7DIomju-9cVZt2sjf3vTAyWc9E7AsvzmRm5wQ-zHk1LbweKGoqcRhPGh2skJbvrEbxZmxY5PlqLHLCp5gBtk7OuNEG8m_AgC1sQ)

Find your List ID in MailChimp:

![](https://lh5.googleusercontent.com/dxshPHUXNuMofarP4zN7QiyAcmbwGvPYRWJgPkx29TFJA5dzU0w0-JCXUxnLbsNH60Noii53IT_dBL8Hw0XPOqrzrEKwDv4ziIVIM0TCgOLQl8BCB9cDCmpv7vSjkGXuNoee5eXd)

The ID is the text in red.

Enter the API Key and List Id in the corresponding fields:

![](/files/nPvwrNSXnAj254qEn7b8)

Now, put your answer and field keys that you defined previously in the Keys field separated by semicolons:

![](/files/pQKXcYzMuAFztwB5HZ1V)

{% hint style="warning" %}
It is very important that they are separated by semicolons, otherwise, no information will be sent to MailChimp.
{% endhint %}

Now, define your list fields in MailChimp:

![](https://lh6.googleusercontent.com/e1eGIzuILpgKaC8sNf7-FJbB4mjn-rMYMpX-fZEwkZcxxMBjRxebgxjXhl74aDq-GffOv8csbV27zIqqtY5tDctBSdJKemeX5gGE5r65PxLpACrEIcuQOYFkCOYEXBn5FKLCS3Ey)

Finally, test your pickzen and verify that your leads show up in MailChimp:

![](https://lh3.googleusercontent.com/cVLKIxZGphCBVxERzMEn-Htz0pZb6rt8n3Go69swaIfAFtqG7jnIjjIlCFrKMnsJoyqDXb2ix2N0n8F1jAFxD3I1NL-12XP6nPN7XLh7HHBS8f04OTvzhrTnPOd_b0L0IZtNU7CS)

**Additional Note:** It is also possible to send your leads to a specific group in a MailChimp list. Just add your MailChimp groups (interests) separated by semicolons to your List ID:

![](/files/mRfrt2LtphXZ2uCPN5oh)

In this case, all generated leads from this pickzen will be sent to *group1* and *group2* in MailChimp.<br>


# Klaviyo guide

When a user completes a pickzen, all captured information can be sent to a Klaviyo list. This includes the lead information, selected answers, and information filled in from form-slides.

Let’s suppose we have a Survey which these two slides:

![](/files/eO2oXm9p8n0wZRyn1wM4)

![](/files/hhQ5HcR5rmnbbg3SBidq)

{% hint style="warning" %}
Klaviyo needs that leads sent to a list have an email. If your pickzen does not provide an email field, no information will be sent to Klaviyo.
{% endhint %}

To send your leads and user preferences to Klaviyo, follow these steps:

Click on the Android answer settings:

![](/files/9Yl8CnNy3XUuWwgxAnNu)

Go to the Advanced tab and enter a key in the Answer key field:

![](/files/wkCQeZtfjSpw99ePpwaZ)

Similarly, enter a key for the iOS answer:

![](/files/x8RYXmpqQuWPmSgT272K)

In this case, the information sent to Klaviyo will be *Android=\** or *iOS=\** depending on the answer selected by the user. However, in the case of single selection answers, it would be preferred to send something like *OS=Android* or *OS=iOS.* Use the following keys to achieve this:

![](/files/O1B5L8cIjLp4AOq8j3qT)

![](/files/fTZpGPBf22x92JgL8xQc)

Now, select the form slide and enter the field keys for the fields *name* and *city* (the email field will be sent automatically to Klaviyo):

![](/files/FWlI7GKuWbxNXxQ07Hcz)

![](/files/merh3veGNeLlW30qamOn)

{% hint style="info" %}
In Klaviyo, there are some predefined field names as $first\_name that have to be set as Field key to be mapped correctly in Klaviyo lists.
{% endhint %}

Once all answers and fields are configured, publish the pickzen, exit the editor, and go to the Klaviyo integration:

![](/files/BoJn6R1toJRPgp5xvNtR)

Click on *Add integration* to create a new one. Then, select the pickzen you want to integrate and configure the rest of the parameters:

![](/files/NBggnHa2g9UvupiheD6h)

{% hint style="warning" %}
If Require confirmation is checked, the lead will only appear in Klaviyo once the user has accepted to be included in the list through a confirmation email.
{% endhint %}

&#x20;Find or your Klaviyo private API Key in the Settings panel within your account:

![](/files/-LsCuMQOBiXBLwEKFvrg)

![](/files/-LsCuFJX05PbKunl5M49)

The page that shows up has your API keys. If you don’t have any keys, you can create the first one by clicking on the *Create API Key* button.

{% hint style="warning" %}
Select a **private API key**. Otherwise, the integration won't work.
{% endhint %}

Get the List ID where you want the information to be sent, select the list, and click on Settings:

![](/files/-LsCvonSu67SmXrewY_k)

![](/files/-LsCvcgiJtKvA5ybTVCV)

The ID is the text in bold.

Enter the private API Key and List ID in the corresponding fields:

![](/files/7dDAvxzJQxDETmE5vsSZ)

Now, put your answer and field keys that you defined previously in the Keys field separated by semicolons:

![](/files/UVpL7JZwrRLRlDQkxHHK)

{% hint style="warning" %}
It is very important that they are separated by semicolons, otherwise, no information will be sent to Klaviyo.
{% endhint %}

Finally, test your survey and check your leads shows up in Klaviyo:

![](/files/-LsCxy_3gHJYtOAf5fqK)

You can find the answers in the Custom Properties section at the bottom right.

{% hint style="warning" %}
Once a lead is subscribed to a list, no new user can be added with the same email. If a user retakes the Assistant and answers differently, the lead information and custom properties will be updated in Klaviyo.
{% endhint %}

### Testing

In order to test your integration to Klaviyo, the button *Test* can be used:

![](/files/x16zgAE116zxaTfaejro)

Once configured, click on the Test button and a new lead with a random email based on your current username will be sent to the Klaviyo list along with your keys filled up with sample data:

![](/files/mxMj1UnM3Oa7SH1ZyO8t)


# No-Code

With our No-Code engine, complex logic rules can be implemented easily using Excel-like tables to fine-tune recommendations. To use the No-Code engine, change the end slide type to *End No-Code*:

![](/files/5n3msdDgQfJy7hfS9AIK)

![](/files/5mC39WYNYhR6jtLsxi3o)

![And choose No-Code as recommendation engine:](/files/IBwO1lw2VGPfVWgTRyFl)

Once done, Step 3 will change to Logic:

![](/files/-MAjiN1SRs8ul6rgBMTY)

Click on it to enter into the No-Code Builder.

{% hint style="info" %}
The No-Code panel can also be used in the Calculator feature. See this [tutorial](https://help.pickzen.com/guides/nocode/tutorials/calculator) for more information.
{% endhint %}


# Builder

The No-Code builder is composed of several tabs:

![](/files/fm7PHUrrBsDxG98RPvNF)

We will describe each of them in the following sections.


# Aliases

The Aliases tab allows us to define aliases that will be used to compose rules based on answers.

We can create aliases one by one by clicking on the "Add alias" button or automatically create all aliases at once by clicking on the "Import aliases" button.

![](/files/Ps7lr7PGpCBv2sQlLzOR)

For example, if we had 2 questions with 2 answers each,  we would create those aliases by clicking on the more convenient "Import aliases" button:

![](/files/-MA_Fi_IDzoXq-ZGxYVe)

We see that 4 aliases have been created, one per existing answer. Also, alias names have been created automatically:  memory, bones, eggs, and milk. Those names will be used in the rules, so if you need to change them simply click and edit them:

![](/files/-MA_GHFj9OUNBvf_hY8P)


# Tables

In this panel, we will create our tables. Tables can contain data or logic. If a table contains logic, it is considered an executable table.

![](/files/-MAa54AlM4lSqzvZo5DA)

If we click on the 3 dots at the top right of the panel, a menu will pop up with some available actions:

![](/files/-MAa5XBwsgMJ1BgeS45V)

We can create a new table, import a table from Excel (overwriting the current one), or delete the current table.

###


# Executable tables

Executable tables implement logic in rows:  a succession of actions that will be executed sequentially.

&#x20;For example:

![](/files/-MA_HbQsduCqJr5ums-E)

Once executed, those variables will have the following values:

```
x = 100
y = 200
z = 300
```

A table is considered an executable table if it has at least one column defined as output. Output columns are marked in dark grey. In order to turn a column into an output column, simply right click on its header, and select *Change to output*.

![](/files/-MA_ITYWTps_iSoEGDVU)

Once done, the column color will change:

![](/files/-MA_IbgW-r9ySbqnywKq)

{% hint style="warning" %}
By default new tables are data tables. Remember to change the output columns to turn it into an executable table.
{% endhint %}

Executable tables can combine input columns with output columns, being the input ones, conditions that have to be met to execute the output cells. For example, the following executable table:&#x20;

![](/files/-MA_L3NJqgj08uT5k62G)

Will generate the following output:

```
x = 100
y = 200
msg = 'y is greater than x'
```

We can see that the A column is an input column, so its cells are first evaluated to decide whether to execute the B column or ignore it.

We can have multiple input and output columns:

![](/files/-MA_V-asXmfdN7zTaV8l)

In this case, the *msg* variable will be:

```
msg = 'You are of legal age and live in the US'
```

We can simplify the table this way:

![](/files/-MA_a_okb3sqZExf3zPt)

We can use header names as implicit variables and we can combine multiple commands both in input and output cells splitting them by semicolons as it is explained in the next section.

### Multiple input conditions

Multiple variables can be combined to form complex boolean expressions. For example:

![](/files/-MA_tGsGToa_2wnXKrLs)

Will generate the following output:

```
msg = "Visit a doctor"
```

### Multivalue cells

Sometimes, it is easier to combine multiple cell values in the same cell. In order to achieve this, simply edit the cell and separate the different values by semicolons:

![](/files/-MA_naUU4CgeuYAJLoeR)

![](/files/-MA_nhs-094j8SrqhYpl)

### Stop on match

All rows in an execution table will be executed unless the *Stop on match* checkbox is enabled:

![](/files/-MA_bOehClFEF5QLtDT_)

If enabled, the execution will be break when the first matching row is executed, so the rest of rows will be ignored. For example:

![](/files/-MA_fouTb9SiGMZCEiAG)

Will generate the following output if *Stop on match* is enabled:

```
msg1 = 'You are of legal age'
```

Note that, although row 3 also matches, it is not executed. Also note that Stop on match does not apply in rows where there are no input conditions defined, as row 1.

### Assigning values to the column

We can assign any result to the variable defined in the column header. For example:

![](/files/-MA_mXM9oumLOrI72CTS)

When this cell is executed, the value *SKU-123* will be assigned to the variable *skus*.&#x20;

{% hint style="warning" %}
See the Cell types section to know more about cell types and some gotchas to avoid.
{% endhint %}

Another example:

![](/files/-MA_o7egydmKWlcQ35Ft)

In this case, the output will be:

```
result = 12
```

If we want to add values to a list, we can use the short-hand + symbol, separating the values by semicolons:

![](/files/-MA_ogRlXVHPGkwd2LdV)

In this case, the output will be:

```
skus: ["SKU-123", "SKU-124", "SKU-222"]
```

{% hint style="info" %}
Note that here we are not enclosing the *skus* in simple quotes as the + short-hand interprets what we want to do.
{% endhint %}

### Functions

An executable table can also execute [functions](https://help.pickzen.com/guides/nocode/functions). For example, the simplest function is possibly the LOG function that will print a text in the console:

![](/files/-MA_pjqVaMwc-BN1fzO6)

We can also do operations with functions, for example:

![](/files/-MA_qdQA5k91ND7bJm-G)

In this case, the output will be:

```
name: "John"
```

### Pipes

In more complex logics, it is usual to pass the output of a function as input of another function. We can achieve this using pipes. For example, this logic doesn't use pipes:

![](/files/-MA_rZ1BMuct3PLyeHdV)

The output is:

```
name: "John Gray"
```

We can simplify this logic with pipes getting the same result:

![](/files/-MA_rtnoe4NC8DxcdVU7)

We can see that with pipes, the first parameter of a function is implicit and will be filled with the output of the previous element of the pipe.

### Executing other tables

Any executable table can be called from any other executable table through its table key. Once an executable table is defined, a new function is created from its defined key.

For example, let's create a new function named MYSUM that simply takes 2 numbers as parameters, adds them, and return the result:

![](/files/-MAa2RAEDm5kzLXPtHx0)

We see that the parameters are referred from within this table as @1 and @2. We can use up to 5 parameters.

The result to return has to be stored in an internal variable named *return*.

Now, we could use this new function this way:

![](/files/-MAa3BA6Z7tlEnCpl9DY)

If we execute this, the result will be:

```
sum = 30
```

{% hint style="danger" %}
The scope where variables are stored is shared, so if we modify a variable from within a function, the variable will remain modified for any other table that uses it.
{% endhint %}

### Comments

Any cell that starts with the # symbol will be considered a comment. For example:

![](/files/-MAa4s4W83OpfS4vTt10)


# Data tables

Data tables are only tables with data and they don't contain anything to execute.&#x20;

For example, this is a data table with information about breeds with the ideal products for each of them:

![](/files/-MA_hkrvBGNUJ31pKiuE)

Some functions need data tables with products, usually SKUs. To add products to your table, right-click on the cell, and select "Set products":

![](/files/-MB3J9XU9QHAcuBt7KP3)

A panel will be displayed where products can be selected. If products were previously selected the will appear pre-selected.

![](/files/-MB3Jf4f2Pyo3rlbZVUM)

Once selected, the product SKUs will be added to the cell:

![](/files/-MB3JjqLXn1LK42NX7IC)

###


# Cell types

A cell can be of any of the following types:

### Boolean

Values of *true* or *false*:

![](/files/-MA_j5bzCx0wcsYX7xIm)

![](/files/-MA_j1TmP31ObIwN8bNt)

### Number

Any integer or float

![](/files/-MA_imcolPWlPCoSGg7Y)

### String

Anything else that is not a Boolean or a String:

![](/files/-MA_jNIcXDDXYBP9lvtK)

The No-Code engine tries always to disambiguate the expression entered. However, sometimes, a string can contain certain characters that can generate interpretation conflicts. For example, if in an **executable table** we write:

![](/files/-MA_kQ_i2Xk-kmVV946S)

The output will be:

```
sku1: Undeclared {id: "SKU123"}
sku2: -123
```

We can see that both sku1, and sku2 have unexpected values. In the first case, sku1 is assigned to an undeclared variable SKU123 instead of the string SKU123. In the second case, sku2 is assigned the value -123, because the engine interprets that SKU is a variable with value 0.

In order to disambiguate in these situations, we only have to enclose the string in simple quotes:

![](/files/-MA_lJHXPNoFppr5OyJc)

In this case, the output will be:

```
sku1: 'SKU123'
sku2: 'SKU-123'
```

{% hint style="info" %}
Note that ambiguities can only occur in executable tables, where cells are interpreted. In data tables, we won't have this kind of problem.
{% endhint %}

### Group

A group is a key-value object.&#x20;

### List

A list is a collection of elements.


# Settings

In this panel we can define some settings like the entry point:

![](/files/YmBaptkiLS6TYt6C3YZY)

In this case, we are saying that the execution will start executing the table *logic*.


# Simulation

In this panel we can simulate combinations of answers to ensure the logic works as expected.

For example, once our logic is defined, we can see that selecting different inputs, we get different results:

![](/files/-MA_vNlgao99XEW1bN8G)

![](/files/-MA_vaHKC85NoD49XW9D)

The selectable inputs are the aliases we defined in the Aliases tab. They can also be form fields:

![](/files/-MA_w3Hz58L3TJzxUz7Y)

### Console

In the browser console, we can see more information that can help us to troubleshoot issues. If we display it, we can see traces with the "Nocode simulation scope" prefix:

![](/files/-MA_wcqgRIXlZcCzOjy9)

In this *scope*, are stored all variables used to execute the logic.


# Functions


# ADDTO

The ADDTO function takes a list of items and adds them all to another list.

### Syntax

**ADDTO(list, out)**

| Argument name                               | Description                                                  |
| ------------------------------------------- | ------------------------------------------------------------ |
| <p><strong>list</strong></p><p>Required</p> | Input list of items, or text with items separated by commas. |
| <p><strong>out</strong></p><p>Required</p>  | Existing or new list to add items to.                        |

### Examples

![](/files/-MA690LKZafncY9p31mI)

* Row 1 adds \[*p1, p2, p3*] to a new list named *list1*.
* Row 2 adds \[*p4, p5*] to the existing list *list1*.
* Row 3 adds *list1* items to *list2*.

Results will be:

* *list1* = \[*p1, p2, p3*]
* *list2* = \[*p4, p5, p1, p2, p3*]


# CONCAT

The CONCAT function concatenates two texts.

### Syntax

**CONCAT(object1, object2, \[separator])**

| Argument name                                    | Description                                  |
| ------------------------------------------------ | -------------------------------------------- |
| <p><strong>object1</strong></p><p>Required</p>   | A text or variable.                          |
| <p><strong>object2</strong></p><p>Required</p>   | A text or variable.                          |
| <p><strong>separator</strong></p><p>Optional</p> | A text separator to separate both arguments. |

### Examples

* **CONCAT('dog', dog)** returns *dog1* if the variable *dog* value is 1.
* **CONCAT(key, value, '-')** returns *dog-1* if the variable key is *dog* and value is 1.


# EMPTY

The EMPTY function returns true if a list is empty or is not defined.

### Syntax

EMPTY(list)

| Argument name                               | Description |
| ------------------------------------------- | ----------- |
| <p><strong>list</strong></p><p>Required</p> | A list.     |

### Examples

If the following table is executed, assuming *list* is not defined:

![Logic](/files/-MA6cabuzbXB1P0HKjCB)

The message '*The list is empt*y' will be printed in the browser console.


# EVALTABLE

The EVALTABLE function evaluates a table where the first column and row are the variables to evaluate, returning the first matching cell found.

### Syntax

**EVALTABLE(table)**

| Argument name                                | Description                                                                     |
| -------------------------------------------- | ------------------------------------------------------------------------------- |
| <p><strong>table</strong></p><p>Required</p> | Table to evaluate where the first column and row are the variables to evaluate. |

### Examples

![mytable](/files/-MA5LbNQMX6SFO1uFXh7)

**EVALTABLE(mytable)** Evaluates the table named mytable:

* If *y* is true and *b* is true then it will return 2
* If *z* is true and *a* is true then it will return 7&#x20;


# EXTRACT

The EXTRACT function returns a sub-table from a table.

### Syntax

**EXTRACT(table, \[rowSelector, colSelector, includeHeader])**

| Argument name                                        | Description                                                                      |
| ---------------------------------------------------- | -------------------------------------------------------------------------------- |
| <p><strong>table</strong></p><p>Required</p>         | Origin table.                                                                    |
| <p><strong>rowSelector</strong></p><p>Optional</p>   | Selector of rows. All rows by default.                                           |
| <p><strong>colSelector</strong></p><p>Optional</p>   | Selector of columns. All columns by default.                                     |
| <p><strong>includeHeader</strong></p><p>Optional</p> | Determines whether including the header in the resulting table. True by default. |

### Examples

![mytable](/files/-MA5dmJVq-tZGP6DMl08)

* EXTRACT(mytable, '1:2') returns:

![](/files/-MA5dxBDZi58Y7cAo0L_)

* EXTRACT(mytable, '2:3', 'B:C') returns:

![](/files/-MA5e_dkVjbXz4rJEMZo)

* EXTRACT(mytable, '2:', ':C') returns:

![](/files/-MA5ep2a_ehSfosnBCAl)


# FIRST

The FIRST function returns the first item of a list.

### Syntax

**FIRST(list)**

| Argument name                               | Description       |
| ------------------------------------------- | ----------------- |
| <p><strong>list</strong></p><p>Required</p> | Al list of items. |


# FLAT

The FLAT function takes a group of lists and returns a unique flat list of its entry items.

### Syntax

**FLAT(lists, \[keys])**

| Argument name                                | Description                                             |
| -------------------------------------------- | ------------------------------------------------------- |
| <p><strong>lists</strong></p><p>Required</p> | Dictionary of lists.                                    |
| <p><strong>keys</strong></p><p>Optional</p>  | Lists to flat. By default, all lists will be flattened. |


# LOG

The LOG function will print a log trace in the browser console for debugging purposes.

### Syntax

**LOG(object1, \[object2])**

| Argument name                                  | Description                           |
| ---------------------------------------------- | ------------------------------------- |
| <p><strong>object1</strong></p><p>Required</p> | A text or variable to print           |
| <p><strong>object2</strong></p><p>Optional</p> | An optional text or variable to print |

### Examples

* **LOG('Hello world')** prints the text *Hello world*
* **LOG('Total:', total)** prints the text *Total:* and the value of the variable *total*.


# NTH

The NTH function returns the item at a specific position of a list.

### Syntax

**NTH(list, position)**

| Argument name                                   | Description                                       |
| ----------------------------------------------- | ------------------------------------------------- |
| <p><strong>list</strong></p><p>Required</p>     | A list of items.                                  |
| <p><strong>position</strong></p><p>Required</p> | The position of the item to return starting at 1. |


# PERSONALITY

The PERSONALITY function allows implementing generic personality test algorithms based on a questionnaire where points are assigned to answers.

### Details

After all answers are evaluated, it will return a group with an entry for each group with its calculated numeric.

### Syntax

**PERSONALITY(table, reducer)**

| Argument name                                  | Description                                                                                                                                                                                                                                                                                                                                                                                                              |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <p><strong>table</strong></p><p>Required</p>   | Table to evaluate with answers groups and points.                                                                                                                                                                                                                                                                                                                                                                        |
| <p><strong>reducer</strong></p><p>Required</p> | <p>Mathematical operation to calculate a final numeric result for each group:<br></p><p><strong>avg</strong> Average of the points of each group.</p><p><strong>count</strong> Number of matching answers of each group.</p><p><strong>sum</strong> Sum of the points of each group.</p><p><strong>max</strong> Maximum answer points of each group.</p><p><strong>min</strong> Minimum answer points of each group.</p> |

### Examples

![mytable](/files/-MA5Xohnx5PmZciuALEx)

**Inputs**: *a* is true, *c* is true, and *d* is true.

* **PERSONALITY(mytable, 'avg')** will return {g1:1, g2:3}
* **PERSONALITY(mytable, 'count')** will return {g1:1, g2:2}
* **PERSONALITY(mytable, 'sum')** will return {g1:1, g2:6}
* **PERSONALITY(mytable, 'max')** will return {g1:1, g2:4}
* **PERSONALITY(mytable, 'min')** will return {g1:1, g2:2}


# PRESCRIBE

The PRESCRIBE function evaluates answer rules and returns items based on these rules.

### Syntax

**PRESCRIBE(table, \[rowsSelector, colsSelector, condition, out])**

| Argument name                                       | Description                                                                                                                                                                                       |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>table</strong></p><p>Required</p>        | Table to evaluate containing the prescription rules. See below.                                                                                                                                   |
| <p><strong>rowsSelector</strong></p><p>Optional</p> | Selector of rows. All rows by default.                                                                                                                                                            |
| <p><strong>colsSelector</strong></p><p>Optional</p> | Selector of columns. All columns by default.                                                                                                                                                      |
| <p><strong>condition</strong></p><p>Optional</p>    | <p><strong>matchall</strong> Only adds an item if it is contained in all matching rows.</p><p><strong>matchany</strong> (default) Adds an item if it is contained at least in a matching row.</p> |
| <p><strong>out</strong><br>Optional</p>             | Also includes the results in a list.                                                                                                                                                              |

**Table syntax:**

| Column name                                             | Description                                                                                                                        |
| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>answer</strong></p><p>Required, Multiple</p> | Answer rules to evaluate.                                                                                                          |
| <p><strong>mode</strong></p><p>Optional</p>             | <p><strong>include</strong> (default) Includes the items (if not excluded).</p><p><strong>exclude</strong> Excludes the items.</p> |
| <p><strong>weight</strong></p><p>Optional</p>           | Assigns points to items that will be used to order them.                                                                           |
| <p><strong>rule</strong></p><p>Optional</p>             | Selects items based on attribute rules.                                                                                            |
| <p><strong>\<other columns></strong></p><p>Required</p> | Any other column is treated as items holder.                                                                                       |

### Examples

#### Example 1

![mytable](/files/-MA5ls7s4O9diFnPiD9U)

**PRESCRIBE(mytable)**\
If *a1* is *true*, returns *sku1*\
If *a2* is *true*, returns *sku2* and *sku3*\
If *a1* is *true* and a2 is *true*, returns *sku1*, *sku2*, *sku3*

#### Example 2

![mytable](/files/-MA5mKz4dtyIvCTaUcsn)

\
**PRESCRIBE(mytable)** \
If *a1* is *true* and a2 is *true*, returns *sku3*, *sku1*, *sku2.* Note sku3 is returned in the first place because it has more weight as it appears in two matching rules.

#### Example 3

![mytable](/files/-MA5n2eEzSFzpUMVdOiw)

We can also use formulas that will be evaluated.

#### Example 4

![mytable](/files/-MA5nNWJlnrRT_ElniCb)

We can use multiple answer columns. In this case, answer columns in each row have to be evaluated as true for the rule to be met.

**PRESCRIBE(mytable)** \
If *a1* is *true* and *a2* is *true*, returns *sku2*\
If *a1* is *true* and *a3* is *true*, returns *sku1*

#### Example 5

![mytable](/files/-MA5pGzwdc0kUBS-rgyg)

**PRESCRIBE(mytable)** \
If *health\_bones* is *true* and *heath\_sleep* is *true*, returns *sku2* and *sku1*. Note *sku2* has more priority because of its assigned weight.\
If *health\_bones*, *heath\_sleep*, and *allergy\_fish* are true, returns only *sku2* because *sku1* will be excluded according to rule 3.

#### Example 6

![mytable](/files/-MA5qzCkyEb-aTBe3vLc)

**PRESCRIBE(mytable, ':', ':', 'matchall')** \
If *a1*, *a2*, and *a3* are *true*, it returns *sku2* because it is the unique item that appears in all matching rules according to the *matchall* condition.\
If a1, and a4 are true, it returns nothing because there are no items that appear in all matching rules.

#### Example 7

![](/files/-MLmitzhQOa9DInfLHTg)

**PRESCRIBE(mytable, ':', ':', 'matchall')** \
If *a1* and *a3* are *true*, it returns those products with tag *cleanser* that have size greater than 10.\
If *a2* and *a3* are *true*, it returns those products with tag *serum* or *essential oil*, that have size greater than 10.


# PRESCRIBESLOTS

The PRESCRIBESLOTS function evaluates answer rules and returns items based on these rules, grouped in slots.

*Documentation coming soon.*&#x20;


# PROPERTY

The PROPERTY function returns the entry of a group from its key.

### Syntax

**PROPERTY(group, id)**

| Argument name                                | Description                 |
| -------------------------------------------- | --------------------------- |
| <p><strong>group</strong></p><p>Required</p> | A group with entries.       |
| <p><strong>key</strong></p><p>Required</p>   | Key of the entry to return. |


# RANK

The RANK function returns a group with predefined keys from a table and values from a winner column. This is useful to compose personalized texts.

### Details

* It can also return a list of groups (columns)
* The columns are chosen using a point-based system.

### Syntax

**RANK(table, \[number])**

| Argument name                                 | Description                                                     |
| --------------------------------------------- | --------------------------------------------------------------- |
| <p><strong>table</strong></p><p>Required</p>  | Table to be evaluated.                                          |
| <p><strong>number</strong></p><p>Optional</p> | Number of groups (columns) to return. By default will return 1. |

**Table syntax**

| **Column name**                                          | Description                                                     |
| -------------------------------------------------------- | --------------------------------------------------------------- |
| <p><strong>key</strong></p><p>Required</p>               | Column with the group keys.                                     |
| <p><strong>\<other\_columns></strong></p><p>Required</p> | Column values. The header(s) with higher values will be chosen. |

### Examples

#### Example 1

If:

* type1=4, type2=6, type3=2

And the table is:

![table](/files/-MA7-P8iXm1BGmwxD-W0)

**RANK(table)** will return this group:

```
title: 'Title 2'
subtitle: 'Subtitle2'
```

**RANK(table, 2)** will return a list with these two groups:

```
title: 'Title 2'
subtitle: 'Subtitle2'

title: 'Title 1'
subtitle: 'Subtitle1'
```


# RECIDS

The RECIDS function adds the products with specified IDs to the recommended products list.

### Syntax

**RECIDS(ids, \[count])**

| Argument name                                | Description                                                                              |
| -------------------------------------------- | ---------------------------------------------------------------------------------------- |
| <p>ids</p><p>Required</p>                    | List of IDs to recommend.                                                                |
| <p><strong>count</strong></p><p>Optional</p> | Number of the IDs list to recommend. If not specified, it will recommend the whole list. |

### Examples

If:

* *ids* = \[*100, 101, 102*]

The execution of:

![](/files/-MA6FicZZBOYaG5vf9zf)

Will recommend the three products with IDs 100, 101, 102.

The execution of:

![](/files/-MA6Fmgf7_2nlJOrrfRx)

Will recommend only the product with ID 100. This rule can also be written as:

![](/files/-MA6Frv_hBf8Qu_9nCaj)


# RECGROUP

The RECGROUP function takes all lists of a group of lists and recommends all of their products. This function is usually used to recommend slots of products, where each list is a slot.

### Syntax

**RECGROUPS(group, \[count, type])**

| Argument name                                | Description                                                                                                                    |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| <p><strong>group</strong></p><p>Required</p> | Group of lists.                                                                                                                |
| <p><strong>count</strong></p><p>Optional</p> | Number of items at most that will be recommended in each list.                                                                 |
| <p><strong>type</strong></p><p>Optional</p>  | <p><strong>sku</strong> (default) The items of each list are SKUs</p><p><strong>id</strong> The items of each list are IDs</p> |


# RECSKUS

The RECSKUS function adds products with specified SKUs to the recommended products list.

### Syntax

**RECSKUS(skus, \[count])**

| Argument name                                | Description                                                                               |
| -------------------------------------------- | ----------------------------------------------------------------------------------------- |
| <p><strong>skus</strong></p><p>Required</p>  | List of SKUs to recommend.                                                                |
| <p><strong>count</strong></p><p>Optional</p> | Number of the SKUs list to recommend. If not specified, it will recommend the whole list. |

### Examples

If:

* *skus* = \[*sku1, sku2, sku3*]

The execution of:

![](/files/-MA6EEh__ba2LplK8AyT)

Will recommend the three products with SKUs *sku1*, *sku2*, and *sku3*.

The execution of:

![](/files/-MA6EXEAN6q6Psqohl7-)

Will recommend only *sku1*. This rule can also be written as:

![](/files/-MA6EgkdTzdP8SlvsiRB)




---

[Next Page](/llms-full.txt/1)

