# ✔️ What is ngSurvey ?

ngSurvey is a modern on-premise survey software and data collection application that will let you easily create web-based surveys and forms to gather feedback from your customers, employees, friends or web site visitors and export or analyze the results through integrated reporting tools or using our unique AI Agent called Artemis to get the most out of your data.

Using Artemis our AI powered agent ngSurvey will provide you with in-dept intelligent data analysis

ngSurvey can be used from a wide variety of devices ranging from desktop, phones or tablets.

To create your first survey you may follow our quick [first survey walkthrough](/walkthroughs/quick-create-survey-start) that will help you get started with some of ngSurvey's features.

## With ngSurvey you get&#x20;

* A powerful web based [form designer](/form-management/form-designer).
* Complete [panel management](/panels) to integrate with your existing data.
* [AI powered](/ai-suite) agent to handle surveys forms and advanced AI assisted data analysis.
* Advanced MCP server to be used by external agents.
* Mobile compatible surveys and forms
* [Website intercepts](/form-management/publish-deploy/website-intercepts) to integrate any forms into any site to gather direct feedback from visitors.
* [Panel connectors](/panels/panel-connectors) to external sources.\
  (SQL Server, Excel,  REST APIs ...)
* [Web](/form-management/publish-deploy/web), [Email](/form-management/campaigns/campaign/email-distribution), [SMS](/form-management/campaigns/campaign/phone-sms-distribution), [WhatsApp](/form-management/campaigns/campaign/phone-sms-distribution/whatsapp-distribution) distribution.
* Single sign-on with [Active Directory](/installation-setup/installation/active-directory), [Microsoft Entra](/installation-setup/installation/azure-active-directory), [SAML](/installation-setup/system-settings/saml-settings), [Cognito](/installation-setup/installation/amazon-web-services/cognito)&#x20;
* [OpenId](/installation-setup/system-settings/openid-connect-settings) based Identity providers support with single sign-on support
* Bi-directional [conversational surveys](/conversational-surveys).
* WYSIWYG editors.
* [Shared survey](/shared-sessions-surveys) / forms among respondents to collaborate on the same set of data in real-time.
* Multiple [answer types](/form-management/form-designer/answers/answer-types) from selection to complex field types.
* Multiple [questions](/form-management/form-designer/questions) types including [single choice radio button](/form-management/form-designer/answers/answer-types/selection-answers), [multiple choice checkbox](/form-management/form-designer/answers/answer-types/selection-answers/checkbox), [matrixes](/form-management/form-designer/questions/question-types/matrix-questions).
* Collect appointments and times using the [appointment calendar](/form-management/form-designer/answers/answer-types/appointment-calendar).
* Extensible Javascript [widget](/form-management/form-designer/answers/answer-types/creating-new-type/widget) system to build your own answers.
* Easy to use [reports](/form-management/reports) and results analysis.
* Unique results [filtering](/form-management/reports/filters) capabilities including AI smart natural language filters.
* [Analytic dashboards](/data-analytics) with [multi-survey](/data-analytics/multi-surveys-analytics) analysis capabilities.
* Fully customizable look\&feel for reporting dashboards
* [Multi-languages](/form-management/form-designer/multi-language-forms) surveys.
* [Rating / scaling](/form-management/form-designer/questions/rating).
* [NPS](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r), [CES ](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score)AND [CSAT](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score) support.
* [Choice Based Conjoint](/form-management/form-designer/questions/question-types/choice-based-conjoint-cbc) (CBC)&#x20;
* [Sentiment](/form-management/reports/text-reports/sentiment-analysis) Analysis.
* [Branching](/form-management/form-designer/pages/branching) features.
* [Page looping](/form-management/form-designer/pages/page-looping).
* Easy reports [filtering](/form-management/reports/filters)&#x20;
* Respondent's [Geolocation](/form-management/form-designer/geolocation) position.&#x20;
* Respondent [answers encryption](/data-encryption).
* Uploaded [files encryption](/data-encryption/file-upload-encryption).
* Answer [piping](/form-management/form-designer/piping/text-data-piping).
* Form versioning.
* [XLSForm ](/projects/import-export/xlsform)format support to create or import existing [XLSForms](/projects/import-export/xlsform).
* [Token](/form-management/security/security-items/tokens) based security.
* Export / import your forms as editable [PDF AcroForms](/form-management/data-export/pdf-acroforms)  &#x20;
* Native [SPSS ](/form-management/data-export/data-exports/spss-sav)support.
* [Offline survey data collection](/form-management/publish-deploy/offline-survey)
* Third party reporting integration with [PowerBI](/walkthroughs/power-bi-integration) or Tableau
* [Zapier](/personal-account/developer/zapier.com-connection) and Microsoft [Power Apps connectors](/personal-account/developer/powerapps-flow-integration).
* Cloud or [Self-hosted](/installation-setup/installation).
* Full [activity logging](/form-management/activity-log).
* [Multi-Tenant](/tenants) support for large organizations or OEM integration
* Easy to [white label](/installation-setup/white-label) or [rebrand](/form-management/style-branding) to match your corporate guidelines.
* [REST API](https://www.ngsurvey.com/api).
* Compatible with Microsoft SQL Server 2016 or above, PostgreSQL V16+, Oracle MySQL 8.x or MariaDB.
* And much, much more features!

For the latest complete up to date features list you may also check \
<https://www.ngsurvey.com/home/features>

Made with [❤️](https://emojipedia.org/red-heart/) [️](https://emojipedia.org/red-heart/)in Switzerland


# Help on Help

This online help system was designed to make it easy to find what you need. There are 2 ways to search:&#x20;

* Use the **Table of Contents** to view the Help system like a book.
* The **Search** feature lets you search for specific text. &#x20;

For example, if you are looking for information about generating reports features, you might look in the Table of Contents under Forms / Surveys / Reporting or by using top right search input field with the word 'Reports'.

{% hint style="success" %}
This is a "living help" which is regularly updated with new content. Should you have any suggestions or comments in regards of the help [contact us](https://www.ngsurvey.com) we are always glad to receive as much feedback as possible.&#x20;
{% endhint %}


# Projects

The projects center allows you to manage and organize all your different forms and surveys from one single place. It also gives a short glance on how your surveys are performing.

![](/files/-MBC_f32BVR3sBaRsqJP)

1. [Organize your folders and surveys](/projects/folders).
2. [Creating a new survey](/projects/create-survey).
3. [Import / Export data](/projects/import-export).
4. Sort your surveys.
5. [Global information of each survey](/projects/survey-overview).

{% hint style="info" %}
The open surveys is a built in folder that displays only the [opened](/projects/survey-overview) surveys.&#x20;
{% endhint %}

## 🔃 Sort surveys

Surveys can sorted using names or respondent answers status. You can also chose the number of surveys that you want to display.

{% hint style="info" %}
🧙 Sorting options are saved on a per folder basis. As such you can have different sorting choices for each folder.
{% endhint %}


# Creating a New Survey

New surveys can be created in 3 different ways either from scratch, using the clone option to make a copy of an existing survey or using the import the import features to [import ](/projects/import-export)a previously [exported](/projects/import-export) survey file.

## 📄 New blank survey

From the projects main screen click on the New survey and enter your survey name. This will create a blank new survey in the current folder, once the survey has been created you will be able to add [questions](/form-management/form-designer/questions) to it using the [form designer](/form-management/form-designer).&#x20;

![](/files/-MBCfG1WZScK1HTCPK_M)

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

A survey can be from following type  &#x20;

* **Data collection** Let you create questions, deploy you survey and collect respondent answers individually.&#x20;
* **`AI Generated`** Using a prompt or topic of your choice ngSurvey will automatically create using its [AI Suite](/ai-suite) the survey with all the needed questions and answers related to the topic of your choice. Once created you can edit the survey and deploy it as you would normally do with the standard Data collection mode.
* **`Shared session`** Let you create questions and deploy the survey. In the Shared session mode you can create sessions that will be shared among multiple respondents at the same time, each of the respondent being part of the same session will automatically see and share the data entered in the survey form.    &#x20;
* **`WhatsApp`** Let you create [conversational surveys](/conversational-surveys) using Whatsapp to collect respondent answers. Respondents will answer your survey questions as if they would chat with one of their contacts on Whatsapp.  &#x20;

## 📋 Copy from existing survey

Click on the survey actions dots of the survey you want to copy. This will create a 1-1 exact copy of the survey.&#x20;

![](/files/-MBCgO-yxkQoHgW-wKHm)

{% hint style="info" %}
Respondent answers are not cloned with the survey.
{% endhint %}


# Folders

## 🗂️ What are folders ?

Folders allow you to sort and organize your surveys by creating backup, archive folders for example or to create specific folders that will be shared among different users.\
\
Forms or folders can be easily moved from one folder through another using drag & drop.&#x20;

![](/files/-MBJFUKpsaJPlOuKu-Df)

## 🔑 Folder Rights

Folders are only visible to the user who creates the folder and to ngSurvey [administrators](/multi-user-management/users) or users who have the  [access all surveys right](/multi-user-management/users) enabled. However its possible to grant access to any  other users of the system.

{% hint style="info" %}
🧙 For large organizations we recommend giving [folder root creation rights](/multi-user-management/roles/rights) only to people with higher privileges and give only access rights to each department folders to the users responsible for the form creation in that department.
{% endhint %}

## ➕ Creating a folder

To create a folder click on the **New folder** button. New folders will be created as a child of the current selected folder.

![](/files/-MBEsqJrt32ac_b9zDV4)

## ❌ Deleting a folder

Deleting a folder will first move it with all its sub-folders and surveys to the [trashcan](/projects/folders/trashcan). The folder gets completely deleted from the system only when it has been removed from the trashcan or if the trashcan has been emptied.

![](/files/-MBEtPAUKUf-70Nv9BTA)

## 🔅 Folder properties

* **`Folder name`** display name of the folder.
* **`New Childs inherit users and group access`** new folders or surveys created within that folder will automatically inherit the same users / group access as the folder.

{% hint style="info" %}
If you have set this folder to give access to the group "marketing" all subsequent surveys or folder that will be created in this folder will be assigned to the "marking" group as well.&#x20;
{% endhint %}


# Project Trashcan

## 🗑️ What is the Trashcan folder for ?

The trashcan folder keeps track of deleted forms or folders and let you restore them in case these were deleted by error.&#x20;

You can either empty the trashcan manually or let it empty automatically after 500 deleted surveys. If you want&#x20;

![](/files/-MBA8CREKGkIx0OmFZ8p)

{% hint style="info" %}
🧙 To delete permanently a survey just delete it back from the trashcan folder. This operation cannot be reversed and all respondent and respondent's answers will be lost.
{% endhint %}

## 🔄 Restore deleted Items

If you deleted your survey by mistake you can restore any deleted survey at any time using the restore option.&#x20;

![](/files/-MBA71sDgk3WhRHgBcFj)


# Survey Information

## 📈 Information box

![](/files/-MBADFzTX5s6h0mf0mj4)

1. Current Customer Satisfaction Score, requires a C[ustomer Satisfaction score question](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score) in your survey.
2. Customer Effort Score, requires a [Customer Effort Score question](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score) in your survey.
3. Actual [NPS score](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r), requires an [NPS Question ](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r)in your survey.
4. Respondents who [completed ](/form-management/respondents-management/response-status)the survey.
5. Respondents who saved their [progress](/form-management/respondents-management/response-status) but did not complete yet the survey. Saving progress requires to have the [Progress Completion](/form-management/form-designer/form-settings/progress-completion) option enabled on your survey.
6. Average time it took globally for all respondents to take the survey.

## 🚀 Survey actions

Using the 3 dots button you can trigger some quick actions to manage your survey.

![](/files/-MBCUyYpJ59QOP8_nm24)

## ️❌ Delete

Deleting the survey will first move it to the [trashcan](/projects/folders/trashcan). The survey gets completely deleted from the system only when it has been removed from the trashcan or if the trashcan has been emptied.

## 📋 Clone

Using the survey clone you can make an exact 1-1 copy of the survey.

## 🚪 Close / Open

Closing the survey will prevent any respondent to take the survey.&#x20;

{% hint style="info" %}
🧙 Using the [open and close date](/form-management/form-designer/form-settings) options you can automatically open or close a survey at a given time.&#x20;
{% endhint %}

## 🔑 Access rights

A survey belongs to the user account who created it however it can also be [shared among multiple different user accounts](/projects/collaboration) if several users needs to work on it.


# Survey Search

The survey search feature allows you search through all your surveys and find the surveys that you are looking for.

<figure><img src="/files/73fNeGMrCwmNYtjCxbTC" alt=""><figcaption></figcaption></figure>


# Collaboration

Share your survey and forms with other colleagues.

## 🔑 Survey Access rights

Surveys are only visible to the user who creates them and to ngSurvey administrators. However its possible to grant access to any other users of the system and to define what the user can do with the survey or which section they have access too.

1. Navigate to your project folder where you saved your survey
2. Select its access rights
3. Add the users or group to the list of trusted people who can access that survey and define which permissions you would like to grant to that user or group.&#x20;

{% hint style="info" %}
ngSurvey supports a special user called "Everyone". Granting access to that user will grant access to any users of your ngSurvey setup.&#x20;
{% endhint %}

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

{% hint style="warning" %}
The owner of the survey will be able to define access rights along with any system administrator.
{% endhint %}


# Import / Export

Backup or re-use existing surveys on different installation

ngSurvey supports following formats to export or import forms

* [NGSurvey's JSON format](/projects/import-export/json-survey-export-import)
* [XLSForm](/projects/import-export/xlsform)

{% hint style="info" %}
As JSON is an open text based format you can edit the JSON file content using any text editor, however note that changing the JSON object variable names and ids will break the import.
{% endhint %}


# JSON Survey Export / Import

## ➡️ Export to JSON

The export features allows us to download a JSON file of our survey that we can re-import in any other ngSurvey installation to re-create the exact same exported survey.&#x20;

![](/files/-MBCTYMTFb3hIlaVb1sl)

## ⬅️ Import from JSON

The import features allows us to re-create a survey that was exported in JSON format. To import a survey you can use the **Import** button top open the import screen and drag / drop your survey JSON file.

![](/files/-MBCg0DSSwTV0KukOXrd)


# XLSForm

Using Excel, you can create any survey using the XLSForm format. XLSForm is a standardized way to design surveys by structuring questions, options, and logic directly within an Excel spreadsheet. Each question, response choice, validation rule, or survey logic is clearly defined in dedicated worksheets, making it simple to build and maintain even complex surveys.&#x20;

Once designed, an XLSForm can easily be imported in ngSurvey using the XLSForm importer.

Here's a small sample illustrating the basic structure of an XLSForm which is based on 2 worksheets "survey" and "choices":

**survey worksheet**

| type                | name     | label                       |
| ------------------- | -------- | --------------------------- |
| text                | name     | What is your name?          |
| integer             | age      | How old are you?            |
| select\_one yes\_no | employed | Are you currently employed? |

**choices worksheet**

| list\_name | name | label |
| ---------- | ---- | ----- |
| yes\_no    | yes  | Yes   |
| yes\_no    | no   | No    |

This simple example demonstrates how clearly structured questions and choices allow rapid survey design and straightforward conversion to interactive survey forms.

{% hint style="warning" %}
Repeat and entities of the XLSForm format are not yet supported.
{% endhint %}

## 🚀 How to create an XLSForm survey

To start your first XLSForm based survey you may start by downloading the Excel based template below. This template contains the main structure around which you can build your XLS form and also documentation of the different types that can be used to create your form.

{% file src="/files/gJqPSJDskHSeIGtF7n8Y" %}

A standard XLSForm is built using 3 Excel sheets within the same Excel file :

* [**Survey sheet**](/projects/import-export/xlsform/survey-sheet) the survey sheet contains the main structure of your survey with its questions, pages, constraints and visibility rules.
* [**Choices sheet**](/projects/import-export/xlsform/choices-sheet) the choices sheet let you define groups of lists of answers. These list of answers can then be used as set of answers for the selection based questions that you have defined in the survey sheet.  &#x20;
* [**Settings sheet**](/projects/import-export/xlsform/settings-sheet) the settings sheet let you define common properties for your form like the form title.&#x20;


# Survey Sheet

The Survey sheet is the heart of your XLSForm. It’s where you define the questions that will be asked in your form, their types, labels, names, and logic such as skips, relevance, and constraints.

Each row in the survey sheet represents a question, a note, or a group. Each column provides information about how that question behaves.

Here's a simple example of how it might look:

<table><thead><tr><th>type</th><th width="128">name</th><th>label</th><th>appearance</th><th>required</th><th>relevant</th><th>constraint</th><th>hint</th></tr></thead><tbody><tr><td>begin_group</td><td>page1</td><td>Personal information page</td><td>field-list</td><td></td><td></td><td></td><td></td></tr><tr><td>note</td><td>startnote</td><td>We are conducting a new survey please fill following questions.</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>text</td><td>name</td><td>What is your full name?</td><td></td><td>yes</td><td></td><td></td><td>Enter your first and last.</td></tr><tr><td>integer</td><td>age</td><td>How old are you?</td><td></td><td>yes</td><td></td><td>. >= 0 and . &#x3C;= 120</td><td>Must be between 0 and 120.</td></tr><tr><td>select_one sex</td><td>gender</td><td>What is your gender?</td><td></td><td></td><td>${age} >= 10</td><td></td><td>Select one option.</td></tr><tr><td>end_group</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

## 🔑 Key Columns Explained

1. **Type**\
   This defines what kind of question you are asking. Common types:

* `text` – for text input
* `integer` or `decimal` – for numbers
* `select_one list_name` – for single choice questions
* `select_multiple list_name` – for multiple choice questions
* `note` – to display static text
* `begin group` / `end group` – to organize questions into [groups](/projects/import-export/xlsform/survey-sheet/groups) of pages or groups of answers

{% hint style="info" %}
`select_one gender` means the choices come from a list named `gender` (which will be defined in the Name sheet).
{% endhint %}

#### 2. Name

This is the variable name used internally. It should be:

* short and descriptive
* lowercase, no spaces or special characters
* unique within the form

{% hint style="info" %}
The variable name is how the data will referenced when using relevant and constraint features
{% endhint %}

#### 3. Label

This is the question text that the user sees. It supports also [multiple languages](/projects/import-export/xlsform/survey-sheet/multi-languages) if you need to create a survey in multiple languages (e.g., `label::English`, `label::French`).

{% hint style="info" %}
Be clear and user-friendly. For example: “What is your current job title?”
{% endhint %}

#### 4. Appearance (optional)

The appearance let you control additional properties for each of your item. ngSurvey supports several [appearance options](/projects/import-export/xlsform/survey-sheet/appearances) for generating rating scales, pages, comment box, masked entries or custom alignments of fields. &#x20;

#### 4. Required (optional)

Set to `yes` if the question or answer must be answered before continuing. If left blank the question is optional&#x20;

#### 5. Relevant (optional)&#x20;

Used for skip logic. The question only shows if the condition is met.

> &#x20;Example: `relevant: ${age} >= 18`\
> The question will only appear if age is 18 or older.

#### 6. Constraint (optional)

Used to validate answers using logic if the answer is based on a text entry.

> &#x20;Example: `. >= 0 and . <= 100`\
> This ensures the input is between 0 and 100. The `.` represents the current question's answer.

#### 7. Hint (optional)

Help text shown as a ? tooltip to the user to explain what’s expected when it gets hovered on.


# Types

Each row in the survey sheet must have a type that will define how the row will be interpreted when imported in ngSurvey. Below are the ngSurvey supported types you can use:

**text** Free text entry. Use multiline [appearance](/projects/import-export/xlsform/survey-sheet/appearances) for comment box.

**integer** Whole number input.

**decimal** Decimal number input.

**select\_one** Select a single choice from a list. The choices must be defined in the [choices](/projects/import-export/xlsform/choices-sheet) sheet.

**select\_multiple** Select multiple choices from a list. The choices must be defined in the [choices](/projects/import-export/xlsform/choices-sheet) sheet.

**date** Date input (calendar selection).

**time** Time input.

**datetime** Combined date and time input.

**calculate** Performs a calculation based on other fields. The result is not shown to the user.

**note** Displays static text or a message without requiring any input from the user.

**geopoint** Collects GPS coordinates from a map.

**image** Allows users to capture or upload an image.

**audio** Allows users to record or upload audio.

**video** Allows users to capture or upload a video.

**acknowledge** Displays a toggle (checkbox) that users must check to acknowledge something.

**file** Allows the user to upload a file of any type (e.g., PDF, DOCX).

**range** Numeric slider input. You can configure minimum, maximum, and step values.

**begin\_group** Starts a group of either related questions on a same page or related answers to one question. To define a group that will be a page set the appeareance attribute to field-list.&#x20;

**end\_group** Ends a group that was started with begin\_group


# Groups

Groups are used to organize related questions in your form. A group is defined using the `begin_group` and `end_group` types. You can control how a group behaves using the `appearance` column.

## 📄 Group with appearance: field-list

When you use `field-list` as the appearance of a group, all questions inside the group will appear on the **same screen**. This creates a page-style layout where users can answer multiple related questions at once.

Each row inside the group is treated as an **individual question**, and the group label (if used) may be shown as a section header depending on the platform.

Example – field-list group with mixed question types

| type               | name         | label                     | appearance | required |
| ------------------ | ------------ | ------------------------- | ---------- | -------- |
| begin\_group       | contact      | Contact Details           | field-list |          |
| text               | fname        | First name                |            | yes      |
| text               | lname        | Last name                 |            | yes      |
| select\_one gender | gender       | Gender                    |            |          |
| select\_multiple   | contact\_way | Preferred contact methods |            |          |
| end\_group         |              |                           |            |          |

### Choices sheet

| list\_name   | name   | label  |
| ------------ | ------ | ------ |
| gender       | male   | Male   |
| gender       | female | Female |
| gender       | other  | Other  |
| contact\_way | email  | Email  |
| contact\_way | phone  | Phone  |
| contact\_way | sms    | SMS    |

What happens:\
This group will be displayed as a single page with the following fields:

* First name (text)
* Last name (text)
* Gender (select one option)
* Preferred contact methods (select multiple options)

All inputs are on one  page, allowing the user to enter multiple related pieces of information at once.

## 🔠 Group with appearance table-list

When you apply `appearance: table-list` to a group select questions that share the same choice list, they can appear as a matrix/grid — one row per question, one column per choice.

**survey sheet**

| type                        | name         | label                            | appearance |
| --------------------------- | ------------ | -------------------------------- | ---------- |
| begin\_group                | opinion\_grp | Please indicate your opinion:    | table-list |
| select\_one agree\_disagree | q1           | I trust online pharma services.  |            |
| select\_one agree\_disagree | q2           | The website is easy to use.      |            |
| select\_one agree\_disagree | q3           | I would recommend this platform. |            |
| end\_group                  |              |                                  |            |

**choices sheet**

| list\_name      | name     | label    |
| --------------- | -------- | -------- |
| agree\_disagree | agree    | Agree    |
| agree\_disagree | disagree | Disagree |

## ⁉️ Group without appearance

When no appearance is set, the group is treated more like a structured question with different answer types. The label of the group becomes the main question prompt, and each row inside the group is treated as a separate answer.&#x20;

Example – no appearance&#x20;

| type         | name    | label                        |
| ------------ | ------- | ---------------------------- |
| begin\_group | contact | Provide your contact details |
| text         | fname   | First name                   |
| text         | lname   | Last name                    |
| text         | address | Street address               |
| integer      | zip     | ZIP code                     |
| end\_group   |         |                              |

As a bonus you can add a constraint to the ZIP code question to make sure it's a valid US ZIP code (5 digits):

| type    | name | label    | constraint          | constraint\_message           |
| ------- | ---- | -------- | ------------------- | ----------------------------- |
| integer | zip  | ZIP code | regex(., '^\d{5}$') | Must be a 5-digit US ZIP code |

What happens: The form will show a series of related questions under the prompt "Provide your contact details", with each field considered part of that single prompt.

#### Summary

Group behavior changes based on whether or not you use the `field-list` appearance:

| Appearance | Behavior                                                               |
| ---------- | ---------------------------------------------------------------------- |
| field-list | Shows all questions in the group on the same screen                    |
| (none)     | Treats the group as a single question with multiple parts or subfields |

## 📰 Group with appearance: field-list containing a nested group

You can create a group with `appearance: field-list` and place other elements inside it, including:

* A nested group without any appearance (which behaves like a structured multi-part question)
* Other individual questions (like select\_one or text)

This allows you to show a full page of related inputs while still benefiting from structured sub-sections inside that page like a page layout with a contact info block and a preferred contact method

In this example:

* The main group uses `field-list`, so everything appears on one page.
* Inside it, there's a nested group (with no appearance), which acts as a block of related text questions.
* After the nested group, there's a select\_one question asking how the respondent prefers to be contacted.

### **survey sheet**

| type               | name         | label                        | appearance |
| ------------------ | ------------ | ---------------------------- | ---------- |
| begin\_group       | full\_block  | Contact Page                 | field-list |
| begin\_group       | contact      | Provide your contact details |            |
| text               | fname        | First name                   |            |
| text               | lname        | Last name                    |            |
| text               | address      | Street address               |            |
| integer            | zip          | ZIP code                     |            |
| end\_group         |              |                              |            |
| select\_one method | contact\_way | Preferred contact method     |            |
| end\_group         |              |                              |            |

### **choices sheet**

| list\_name | name  | label |
| ---------- | ----- | ----- |
| method     | email | Email |
| method     | phone | Phone |
| method     | sms   | SMS   |

What happens:

* The respondent sees one one page.
* At the top, they’re prompted to fill in their contact details (first name, last name, etc.) — these appear grouped together but are treated as parts of one structured section.
* Below that, on the same screen, they can choose their preferred contact method.

This approach keeps related information neatly organized and efficient to fill out.


# Appearances

The appearance column in the survey sheet lets you control how a question is displayed to the user. It does not change the question type, but modifies how it's rendered on screen.

Below are the supported appearance values:

**minimal** Displays a compact dropdown or minimal version of the input. Often used with select\_one questions to reduce space.

**compact** Renders select options as compact buttons instead of long lists. Great for quicker selection.

**field-list** Used with groups to display all the questions in that group on the same page.

**label** Used with select\_one or select\_multiple to display only the label of the choice, without a button, checkbox, or radio input. Useful for visual layout tweaks.

**likert** Formats select\_one choices in a Likert-style layout, useful for agreement scales or rating responses.

**horizontal** Displays choices in a horizontal row instead of the default vertical stack.

**month-year** Allows users to select only the month and year. Commonly used with date fields when day-level accuracy is not needed.

**signature** Displays a signature pad where the user can draw their signature. Works with image or draw-type questions.

**draw** Enables the user to draw on the screen, often used for sketches or maps.

**multiline** For text questions, shows a larger input box allowing multi-line responses, like a comment box.


# Relevant

The relevance column is used to control when a question or group should be shown, based on the user's previous answers. In ngSurvey these will be concerted to skip logic groups and rules.

A question will only be displayed if the relevance condition is true.

## 📏 How to write relevance conditions

To reference a previous question’s answer, you use the format:

`${variablename}`

This inserts the answer value from the question with the name `variablename`.

You can then build a condition using logical expressions like:

* `${age} >= 18`
* `selected(${gender}, 'female')`
* `${consent} = 'yes'`

Relevance expressions must return true for the question to appear.

## 🕵 Relevance in groups

You can apply relevance to a group as a whole:

* If the group uses appearance: field-list, the entire page of questions will be shown or hidden together.
* If the group has no appearance  then relevance can be set individually on each row inside the group for more detailed skip logic.

This allows for flexible layouts, where entire pages or individual sub-questions can be conditionally displayed.

## Examples

| Question Name | Relevance Expression          | Description                               |
| ------------- | ----------------------------- | ----------------------------------------- |
| age           |                               | A numeric input (used by others)          |
| gender        |                               | A select\_one input                       |
| school        | ${age} >= 18                  | Show only if respondent is 18 or older    |
| pregnant      | selected(${gender}, 'female') | Show only if respondent selected 'female' |
| job\_title    | ${consent} = 'yes'            | Show only if respondent gave consent      |

## 🔢 Operators and Functions

These are the operators you can use to build your logic.

#### Comparison Operators

These compare values:

| Operator | Meaning                  | Example               |
| -------- | ------------------------ | --------------------- |
| =        | equal to                 | `${age} = 18`         |
| !=       | not equal to             | `${gender} != 'male'` |
| >        | greater than             | `${age} > 25`         |
| <        | less than                | `${score} < 60`       |
| >=       | greater than or equal to | `${age} >= 18`        |
| <=       | less than or equal to    | `${score} <= 100`     |

***

#### Logical Operators

These help you combine conditions:

| Operator | Meaning            | Example                                       |
| -------- | ------------------ | --------------------------------------------- |
| and      | both must be true  | `${age} >= 18 and ${consent} = 'yes'`         |
| or       | either can be true | `${gender} = 'female' or ${gender} = 'other'` |
| not()    | opposite of true   | `not(selected(${gender}, 'female'))`          |

***

#### Selection Functions

Used mostly with `select_one` and `select_multiple` questions.

| Function   | Description                   | Example                         |
| ---------- | ----------------------------- | ------------------------------- |
| selected() | Checks if a value is selected | `selected(${gender}, 'female')` |

***

#### Date and Time Functions

| Function | Description                   | Example                    |
| -------- | ----------------------------- | -------------------------- |
| today()  | Returns current date          | `${birthdate} <= today()`  |
| now()    | Returns current date and time | `${checkin_time} <= now()` |
|          |                               |                            |


# Constraint

The constraint column is used to validate user input. It prevents the user from continuing until the answer meets a condition you define.

If the answer doesn't satisfy the constraint, a message defined in `constraint_message` is shown to the user.

## 📝 How constraints work

The value of the question is represented by a dot (`.`), which means “the current answer.” You build a logic expression using that value.

Constraints are commonly used to:

* Set numeric ranges (e.g., age must be between 0 and 120)
* Require matching formats (e.g., ZIP codes, emails)
* Enforce dependencies (e.g., end date after start date)

| type    | name  | label         | constraint                         | constraint\_message           |
| ------- | ----- | ------------- | ---------------------------------- | ----------------------------- |
| integer | age   | Your age      | . >= 18 and . <= 99                | Age must be between 18 and 99 |
| text    | zip   | ZIP code      | regex(., '^\d{5}$')                | Enter a 5-digit ZIP code      |
| text    | email | Email address | regex(., '^\[^@]+@\[^@]+.\[^@]+$') | Enter a valid email           |
| date    | end   | End date      | . >= ${start}                      | End date must be after start  |

## ☑️ Using the dot (.) in constraint

The dot `.` represents the value entered by the user for the current question. Use it inside functions and expressions:

* `. >= 0` — valid if value is 0 or higher
* `regex(., '^\d{5}$')` — valid if it matches the pattern

## 🔠 Variable references

You can use `${question_name}` to reference answers from other questions in the form. Make sure referenced questions appear earlier in the form.

Example:

* `. > ${min_age}` — ensures current input is greater than a previously entered value

## 🔢 Operators and functions for constraints

Same as relevance, you can use:

\=, !=, >, <, >=, <= and, or, not()

| Function        | Description                          | Example                                |
| --------------- | ------------------------------------ | -------------------------------------- |
| regex()         | Validates the format of a text input | `regex(., '^\d{5}$')` for US ZIP codes |
| string-length() | Checks the number of characters      | `string-length(.) <= 50`               |
| selected()      | Checks if a choice was selected      | `selected(${choices}, 'option1')`      |
| today()         | Gets the current date                | `. <= today()`                         |
| now()           | Gets current date and time           | `. <= now()`                           |


# Calculations

Calculations are used to create hidden fields that automatically compute values based on other answers in the form.

In XLSForm, calculations are defined using the `calculate` question type. These fields are not shown to the user, but they run in the background and store results for later use or analysis.

In ngSurvey, calculated values will be saved as hidden fields and included in the form data output, just like other answers.

## 🔢 How to define a calculation

To create a calculation:

1. Use the type `calculate` in the `survey` sheet.
2. Assign a name to the field.
3. Use the `calculation` column to define the logic.
4. Optionally, use the `label` column for internal reference (it won’t be shown to the user).

#### Example: Total score from multiple answers

| type      | name         | calculation           |
| --------- | ------------ | --------------------- |
| integer   | q1           |                       |
| integer   | q2           |                       |
| integer   | q3           |                       |
| calculate | total\_score | ${q1} + ${q2} + ${q3} |

In this example:

* The user answers three numeric questions (`q1`, `q2`, `q3`).
* The `total_score` field adds those three values together.
* The value of `total_score` is saved in the form data, even though it is never displayed.

#### Useful calculation functions

You can use most standard operators and functions, such as:

* Math: `+`, `-`, `*`, `div`, `mod`
* Text:  `string-length(), regex, round, substr, concat`
* Logic: `if(condition, true, false)`, `coalesce()`
* Dates: `today()`, `now()`, `date()`


# Multi-Languages

XLSForm supports multiple languages by allowing you to define translations for labels, hints, and messages. This enables users to select their preferred language when starting the form.

## 🌐 Column naming format

To set up multi-language support:

* Use `label` and `hint` without any suffix for the default text
* Add additional columns using the format:
  * `label::French (fr-FR)`
  * `label::Spanish (es)`
  * `hint::French (fr-FR)`
  * `hint::Spanish (es)`

#### Example: survey sheet with a default text column, French, and Spanish

| type    | name | label              | label::French (fr-FR) | label::Spanish (es)   | hint                  | hint::French (fr-FR)     | hint::Spanish (es)       |
| ------- | ---- | ------------------ | --------------------- | --------------------- | --------------------- | ------------------------ | ------------------------ |
| text    | name | What is your name? | Quel est votre nom ?  | ¿Cuál es su nombre?   | First and last name   | Prénom et nom complet    | Nombre y apellido        |
| integer | age  | How old are you?   | Quel âge avez-vous ?  | ¿Cuántos años tienes? | Must be between 0–120 | Doit être entre 0 et 120 | Debe estar entre 0 y 120 |

#### Example: choices sheet with default text, French, and Spanish

| list\_name | name   | label  | label::French (fr-FR) | label::Spanish (es) |
| ---------- | ------ | ------ | --------------------- | ------------------- |
| gender     | male   | Male   | Homme                 | Hombre              |
| gender     | female | Female | Femme                 | Mujer               |
| gender     | other  | Other  | Autre                 | Otro                |


# Choice filters (Casacade)

Choice filters allow you to dynamically filter the options shown in a `select_one` or `select_multiple` question based on the answer to a previous question.

They are useful when you have linked dropdowns, such as showing cities based on the country selected, or filtering job titles based on department.

#### How choice filters work

To use a choice filter, follow these steps:

1. In the `survey` sheet, add a column named `choice_filter`.
2. In the `choices` sheet, add an extra column with the filtering attribute.
3. The `choice_filter` expression in the survey sheet must match the filter value from the selected answer.

The syntax for the filter is:

`filter_column = ${question_name}`

This compares a column in the choices sheet to the value selected in a previous question.

{% hint style="danger" %}
Choice filters will only work on the select\_one if its defined within [group](/projects/import-export/xlsform/survey-sheet/groups) that defines a page with the field-list appearance. It will not work within a group that doesnt have a field-list apperance
{% endhint %}

#### Example: Country and city

**survey sheet**

| type                | name    | label            | choice\_filter       |
| ------------------- | ------- | ---------------- | -------------------- |
| select\_one country | country | Select a country |                      |
| select\_one city    | city    | Select a city    | country = ${country} |

**choices sheet**

| list\_name | name   | label         | country |
| ---------- | ------ | ------------- | ------- |
| country    | usa    | United States |         |
| country    | france | France        |         |
| city       | nyc    | New York City | usa     |
| city       | la     | Los Angeles   | usa     |
| city       | paris  | Paris         | france  |
| city       | lyon   | Lyon          | france  |

What happens:

1. The user selects a country in the first question (e.g. France).
2. The second question (Select a city) only shows cities where the `country` column in the choices sheet matches the selected country (`france` in this case).
3. So only "Paris" and "Lyon" will appear in the city dropdown.


# Choices Sheet

The choices sheet is where you define the options shown in `select_one` and `select_multiple` questions from the survey sheet. Each group of options is part of a list, identified by the `list_name` column.

## ☑️ Required columns

* list\_name – The name of the choice list (used in the survey sheet).
* name – The internal code for the choice (used in saved data and calculations).
* label – The text shown to users for each option.

## 🔘️ Optional columns

You can include the following optional columns to enhance how choices behave:

rating\
Use this column to assign a score or value to each choice. Helpful for scoring or calculations based on the selected option.

type\
Used to mark a choice as special. For example, if set to `other`, the form will allow the user to enter a custom answer when that option is selected. If left blank, the choice behaves like a normal option.

hint\
You can provide additional guidance for each choice. These hints appear as helper text next to the option. This is useful when options might need clarification.

You can also use multilingual versions like `hint::French (fr-FR)` or `hint::Spanish (es)`.

#### Example: choices with rating, choice\_type, and hint

| list\_name | name  | label | hint                       | rating | type  |
| ---------- | ----- | ----- | -------------------------- | ------ | ----- |
| feedback   | good  | Good  | Very satisfied             | 3      |       |
| feedback   | okay  | Okay  | Somewhat satisfied         | 2      |       |
| feedback   | bad   | Bad   | Not satisfied              | 1      |       |
| feedback   | other | Other | Please specify your answer |        | other |

***

## 🔗 How it connects to the survey sheet

In your survey sheet, you'd reference this list like this:

| type                 | name           | label                           |
| -------------------- | -------------- | ------------------------------- |
| select\_one feedback | user\_feedback | How would you rate our service? |

This setup will:

* Show four choices to the user.
* Use the hints to help users understand each option.
* Allow the user to enter a custom value if they select "Other".
* Allow you to use the `rating` values in calculations or analysis.


# Settings Sheet

The settings sheet contains metadata about your form. In your case, only two fields are supported:

#### form\_title

This is the name of your form as it will appear to users. It’s typically shown at the top of the screen or on the form loading screen.

Example:

| form\_title              |
| ------------------------ |
| Customer Feedback Survey |

#### default\_language (optional)

This sets the default language that the form will use if no language is selected or if the device does not support language selection.

The value must match one of the language codes used in your label columns (for example, `en`, `fr-FR`, `es`, etc.).

Example:

| default\_language |
| ----------------- |
| en                |

You can include both fields in the same row:

| form\_title              | default\_language |
| ------------------------ | ----------------- |
| Customer Feedback Survey | en                |


# XLSForm Samples

In the page you will find a couple of XLSForm examples that you can study to create your own.

**Pharmaceutical survey**

Example that shows multiple pages, selection questions, mixed field questions, rating based matrix question, piping , calculation of values and skip logic to show dynamically questions based on respondent answers.

{% file src="/files/RS1m89UwLrHbhs7myo5l" %}


# Forms / Surveys


# Overview Dashboard

The overview dashboard gives you a broad overview on how your survey is currently performing and gives you quick access to the latest answers and metrics.

The dashboard screen is split in following sections.

![](/files/-MBT77pAFQU6vamdAoyl)

1. [Title](/form-management/overview-reports/overview-title)
2. [Information box](/form-management/overview-reports/overview-information-box)
3. [Reports](/form-management/overview-reports/overview)
4. [Last respondents list](/form-management/overview-reports/last-respondents)&#x20;
5. [Last sentiment comments](/form-management/overview-reports/last-sentiments)


# Dashboard Title

![](/files/-MBT-x-h_2ll-dI3IP5M)

The title section allows you to edit the survey title and to **open** the survey for answers collection from respondents or to close it to block new respondents from taking your survey. &#x20;

It also provides a quick deployment link that you can send to your respondents to take the survey.

##


# Dashboard Information Box

## 📈 Information box

![](/files/-MBTHRCk0amtYVUxTWqS)

1. **Respondents** total count of people who completed your survey.
2. **In progress** is the number of people who started the survey, saved their [progress](/form-management/form-designer/form-settings/progress-completion) and did not finish the survey yet.
3. **NPS** is the total [Net Promoter Score](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r) for since the survey stated.
4. **CES** is the average [Customer Effort Score](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score) since the survey started.
5. **CSAT** is the average [Customer Satisfaction Score](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score) since the survey started.
6. **Avg. response time** is the average time it took for all the respondents to take the survey.
7. **Open invitation** is the total of invited recipients from [campaigns](/form-management/campaigns) who did not yet take the survey&#x20;
8. **Completed** is the total of successfull [invitations](/form-management/campaigns/campaign) that were sent for your survey.


# Dashboard Reports

The overview reports give you a quick reports on

* Respondents count
* Net Promoter Score®
* Customer Effort Score&#x20;
* Customer Satisfaction Score

{% hint style="info" %}
🧙 Advanced reporting tools can be found in the [reports](/form-management/reports) section.
{% endhint %}

## 👪 Respondents report

The respondents stats give you an aggregate count of the number of respondents  who took your survey on a given day.&#x20;

![](/files/-MBT8r1yGjcJx8e9rQxH)

## 😊 Net Promoter Score® report

The NPS report gives you the current [NPS score](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r) for the selected period of time.

![](/files/-MBT8ciEAFDkqwE9huyS)

{% hint style="warning" %}
This reports is only generated for surveys having an [NPS question](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r).&#x20;
{% endhint %}

## 😃 Customer Effort Score

The [Customer Effort Score](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score) gives you all the average CES results for the selected period of time.

![](/files/-MBT7jLZ7TjsudCfr3Rt)

{% hint style="warning" %}
This report is only generated for surveys having [CES questions](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score).
{% endhint %}

## 😀 Customer Satisfaction Score

The [CSAT ](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score)gives you the average satisfaction level for the selected period of time.

&#x20;

![](/files/-MBT8DpyNVcQK6VmJhY_)

{% hint style="warning" %}
This report is only generated for surveys having [CSAT questions](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score).
{% endhint %}

## 📅 Date range filter

All those reports can generated based on a day range of your choice. &#x20;

![](/files/-MBT1JxuqgLU_yN7dtYH)


# Last Respondents

The last [respondents ](/form-management/respondents-management)section displays the last 10 respondents including any recipient information related to their answers if these respondent were part of a [campaign](/form-management/campaigns).

![](/files/-MBTDpd-1ftx_spXQVWj)

You can view what the kind of device the respondent used to take the survey from desktop, mobile or using an [SMS](/form-management/campaigns/campaign/phone-sms-distribution).

![](/files/-MBTCe6K6nmcPgauS96w)

The last respondents section provides also a simple overview for rating based question like [CES](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score), [CSAT](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score) to quickly see how the respondent performed on your survey questions.

Each dot represents the average [rating](/form-management/form-designer/questions/rating) for each questions with a enabled [rating property](/form-management/form-designer/questions/question-properties). The dot colors are ranging from the  grey (no answers), red color (very bad / bad rating), yellow (medium rating), green (good / very good rating).&#x20;

![](/files/-MBTDUvKXdRkfiIyLurR)

{% hint style="info" %}
Clicking on each respondent row let you [view / edit](/form-management/respondents-management/respondent-details) the full respondent's answers.
{% endhint %}


# Last Sentiments

The last sentiments lists the last 25 respondents [sentiments ](/form-management/reports/text-reports/sentiment-analysis)on comments across all your survey text based answers that have been set to compute their [sentiment](broken://pages/-MBTGeocJIbdTn5Dluec).

![](/files/-MBTGK7cWYN2bH5QAf5T)

{% hint style="warning" %}
Last sentiments is only available if at least one of your text answers is set to [compute its sentiment score](/form-management/form-designer/answers/answer-properties). &#x20;
{% endhint %}


# Form Designer

The form designer is the most important tool of ngSurvey as it allows you&#x20;

* Design your forms by adding [questions](/form-management/form-designer/questions), [answers](/form-management/form-designer/answers) and [pages](/form-management/form-designer/pages).
* Configure your [survey properties](/form-management/form-designer/form-settings).
* Translate your survey into [multiple languages](/form-management/form-designer/multi-language-forms).&#x20;
* [Test your survey](/form-management/form-designer/preview-testing) to make sure that it works as expected.
* And finally [publish your survey](/form-management/publish-deploy) to gather responses.

The form designer user interface can be split in following sections

![](/files/-MBdJMwJvOwL7RjetAsk)

1. An editing space to organize your [questions ](/form-management/form-designer/questions)and [answers](/form-management/form-designer/answers).
2. An action toolbar to setup your [survey properties](/form-management/form-designer/form-settings).
3. A [pages](/form-management/form-designer/pages) navigator / selector.
4. A form designer where you can edit your [questions](/form-management/form-designer/questions) and [answers](/form-management/form-designer/answers).
5. A [footer manager](/form-management/form-designer/footer-manager) to edit the buttons that you would like to display.


# Questions

## ⁉️️ What are questions ?

Questions allows you to collect information from your respondent and can be built using one or more [answers](/form-management/form-designer/answers). Unlike other survey tools on the market you can add any kind of [answer type](/form-management/form-designer/answers/answer-types) widgets to your question and mix different [answer types](/form-management/form-designer/answers/answer-types) together within the same question. This unique system gives you the best flexibility to create the forms you need.

ngSurvey comes out of the box with over +25 pre-configured [question types](/form-management/form-designer/questions/question-types) that can be added to your page to collect information from your respondents and fully customized with custom [properties](/form-management/form-designer/questions/question-properties) and [answer types](/form-management/form-designer/answers/answer-types).

{% hint style="warning" %}
All changes to survey structure are live changes meaning that if you distributed the survey already to respondent these will see the new changes as well.&#x20;
{% endhint %}


# Creating a Question

## ➕ Creating a new question&#x20;

To add a new question to your page you may either use the **Add question** button or you may drag\&drop any of the available [question types](/form-management/form-designer/questions/question-types) from the editing space to your page as show below.&#x20;

![](/files/-MBdQ61aWzAm_yveEUHD)

If you have already questions in your surveys you may also use the **+** of the question edition toolbar to insert a new question right after the selected question.

![](/files/-MBdTTN6Kh5pWbLFYLjR)

{% hint style="info" %}
Once you have added a question you're ready to add also a couple of [answers](/form-management/form-designer/answers/create-answers) to it.
{% endhint %}

## 📋 Copy an existing question

You can make a 1-1 copy of any existing question using the **clone** feature of your question. This will create a an exact copy of the question and insert it right after the selected question.&#x20;

![](/files/-MBdRaK-y9IMjA27BDy9)

## 🔃 Copy a question from another survey

You may also copy an existing question from another of your surveys using the **copy question** wizard

To access the **question copy** wizard open the questions pane of the editing space and drag / drop the **copy question** type on the page where you want to copied to be saved to.

![](/files/-MBdSOYvtX84_5Y1hVcS)

The wizard will open a list of all your surveys from which you can copy any existing question.

![](/files/-MBdSd4XdRS0Gx_m3j6B)


# Editing a Question

## ✒️ Editing the question text

Editing a question text can be done very easily by clicking on the question text.

![](/files/-MBeX_s9A1aLw176gcDU)

## 🔨 Edition toolbar

The edition toolbar gives you a quick access to the main editing features of the question. It allows you also to move the question position using drag/drop. &#x20;

![](/files/-MBdRDQOUiYQfo2r6ImG)

1. [Add a new question](/form-management/form-designer/questions/create-question) after the selected question
2. Enable the [rich text editor](/form-management/form-designer/rich-text-editor).
3. Insert an image from the [media gallery](/form-management/style-branding/media-gallery).
4. [Pipe](/form-management/form-designer/piping/text-data-piping) a pipe tag into the question's text.
5. Sets a [preset style](/form-management/form-designer/questions/editing-a-question/question-preset-styles) on the question to change the question styling.
6. Open the [question properties](/form-management/form-designer/questions/question-properties).
7. Delete the question.

{% hint style="danger" %}
Deleting the question will also delete its answers and also all related respondent's answers to that question. This operation cannot be reversed. Note that for safety the question is first moved to the [form trashcan](/form-management/form-designer/form-trashcan) from where you can still recover it as long as it has not been wiped.
{% endhint %}

{% hint style="info" %}
🧙 You may press the enter or the del key to confirm the delete inside the confirmation screen.&#x20;
{% endhint %}

## 🚀 Edit actions

you may click on the 3 dots to open the question actions.

![](/files/-MBeRNjb1YvsPkOTmL4N)

* **`Insert page break`** inserts a new page before the selected question.
* **`Clone`** creates an exact copy of the question.&#x20;

You may also customize each question actions using it actions footer.

![](/files/-MBehMfmMYBfB6kca3Ry)

* **`Required`** will require the respondent to select one selectable answer (radio or checkbox) on the question.
* **`Enabled`** will display the question if enabled and will keep it hidden to respondents if its disabled.&#x20;

## 🏃 Moving a question

You can move a question position within the same page or to another page using either the editing space tree.

![](/files/-MBeW-JLvoXLCVKYumjQ)

or by dragging the edition toolbar.

![](/files/-MBeWtIIj4e40foqSprY)


# Question Preset Styles

## 🎨 What are question preset style ?

Some questions offers ready-made preset styles that you can apply to change the look and feel of the selected question. Questions offering presets have following additional preset icon in their [edition toolbar](/form-management/form-designer/questions/editing-a-question).

![](/files/-MBm5PEMzy9ePqdeq5dp)

The [NPS question](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r) provides for example following presets to change its style.

![](/files/-MBm5kdVxNskDEGNhnfm)

Here you can see below the [NPS question](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r) with its Standard net promoters style preset applied.

![](/files/-MBm6566mPaNZHueIB12)


# Question Properties

Each of your question can be customized using on of the following properties that can be access using the edit icon on the [question toolbar](/form-management/form-designer/questions/editing-a-question) shown on the selected question.

![](/files/-MBgklTcbqOMw8FGl7-5)

### 📰 Show question header

Allows you to display or hide the question text for cases where you only need to show the question's answers. This feature could be used for example to to make 2 separate questions look as if they were one by hiding the question text of the 2nd questions.

### ➖ Horizontal layout

Will layout your question's answers horizontally instead of vertically. You may also set the maximum of columns for your horizontal layout using the **Max. horizontal layout** **columns** property.

![](/files/-MBggQ56xx2ubuHn8ev1)

{% hint style="info" %}
If the **max. horizontal layout columns** property is set to auto your horizontal layout will automatically switched back to vertical if the respondent's device screen is too small to fit all the answers in a single row.
{% endhint %}

### ✅ Multiple selection

Will switch the [selection based answer](/form-management/form-designer/answers/answer-types/selection-answers) types of your questions from radio buttons to checkboxes to let the respondent select multiple answers.&#x20;

{% hint style="info" %}
If your questions allows multiple selection you may also define the **Min. selections** and **Max. selections** allowed answers to define how many answers the respondents must select.
{% endhint %}

### 🎰 Randomize answers order

will randomize the answers display order while taking the survey. Answers can be randomized "By Order" which will show the answers in a random order or can be randomized "By direction" which will revert the answers display order.

### 🔘 Selections as buttons

Renders a set of buttons for [selection based answers](/form-management/form-designer/answers/answer-types/selection-answers) instead of radio buttons and checkboxes.

![](/files/-MBgjrF3G8pbcUvYn5ZG)

### 🚥 Rating

Enables the question with [rating features](/form-management/form-designer/questions/rating) to let you set rating values of each of your selection based answers.

### ☑️ One selection per row

Will enforce the selection on matrix type questions of one selection only per column instead of the default one selection per row setting.

### 🔠 Flow next action text

Is the text that will be displayed to the respondent in the "next question" button once he can move from one question to another in [single question flow](/form-management/form-designer/form-settings/single-question-flow) enabled surveys .

![](/files/-MLvt_x81bDv6oJYDSdH)

### 🔠 Flow submit  action text

Is the text that will be displayed to the respondent in the "submit" button in [single question flow](/form-management/form-designer/form-settings/single-question-flow) enabled surveys .

### 📋 Pipe alias

Is the alias that you can use in the piping tool to dynamically [pipe ](/form-management/form-designer/piping/text-data-piping)the answers that were answered by the respondent.

### 📊 Reporting alias

Is the alias that will replace the question text in [reporting](/form-management/reports) and [exports](/form-management/data-export) if the **use report alias** in reports or exports has been se&#x74;**.**

### 🎨 CSS class

Let you specify a custom [CSS class](/form-management/style-branding/style-editor/css) to customize the design / layout of the question.&#x20;

### 🔁 Re**peatable sections**

Let the respondent [duplicate the question](/form-management/form-designer/repeatable-sections) while taking the survey. Repeatable sections cannot be used if the question is part of page with [looping](/form-management/form-designer/pages/page-looping) enabled.

### 🔢 Constant sum to each

The total sum of all the [constant sum](/form-management/form-designer/questions/question-types/advanced-types/untitled) answers that the respondent must reach. This property is only available on [constant sum questions](/form-management/form-designer/questions/question-types/advanced-types/untitled).

### 📜️ Answers sort order

The default answer sort order for list based questions like [Dropdown ](/form-management/form-designer/questions/question-types/standard/dropdown-list)or [Autocomplete](/form-management/form-designer/questions/question-types/standard/autocomplete) questions is the display order of your answers, this may be an issue in multi-language surveys where answer labels can be different from one language to another. In such a case you can set a custom answer sort order, this sort order will be applied independently for each language.

### ☄️Soft validation

Soft validation will generate a warning for respondent if a mandatory question has been left unselected. The respondent may choose to either select something on the question or submit the survey as is or proceed to the next page.

### 🔤&#xFE0F;**`Fields label position`**

Will override the global [survey property](/form-management/form-designer/form-settings) on how the [field labels](/form-management/form-designer/questions/question-types/standard/text-comment-field) should be positioned either inside the fields, on the side or above the fields.

### 🚩Tooltip

Allows you to define some helper text that will display has tooltip icon that will display your help text on mouse hover.

![](/files/EXqr16jHwderGYyf3ozQ)&#x20;


# Conversation reply type

Conversation reply types let you define how a respondent can reply to your question using a text value on a [conversational survey](/conversational-surveys). You can define one of the following reply types.

**Auto** will let nSurvey choose [automatically the type of reply](/form-management/form-designer/questions/question-properties/conversation-reply-type/auto-reply-type) that is accepted from the respondent based on the [type of answers](/form-management/form-designer/answers/answer-types) that you have setup in your question.

**Numbers** will display all selection based answers using prefixed numbers. Each answer can be selected either by entering its corresponding number or using its answer label.

![](/files/-MJ6HjiddSJGtREDiH8r)

**Letters** will display all [selection based answers](/form-management/form-designer/answers/answer-types/selection-answers) using prefixed alphabet letter. Each answer can be selected either by entering its corresponding alphabet letter or using its answer label.

![](/files/-MJ6IFfgA9eT3hpiRoMZ)

**Match text reply** will not display any answer and will try to match the respondent reply to one of the [selection based answers](/form-management/form-designer/answers/answer-types/selection-answers) label.&#x20;

![](/files/-MJ6KhBupGBUrhZI_qL6)


# Auto reply type

Questions with auto reply type enabled will automatically choose the right type of answer to accept as a text entry. ngSurvey will check the first [answer type](/form-management/form-designer/answers/answer-types) in your question and based on this type choose how to handle the reply of the respondent.

{% hint style="info" %}
The auto reply type option comes in handy when you have a single survey that needs to run at the same time on the web and as a [conversational survey](/conversational-surveys).&#x20;
{% endhint %}

## 🔘 Selection based answer

For questions with single choice [selection based answers](/form-management/form-designer/answers/answer-types/selection-answers) ngSurvey will provide a number based reply choice to the respondent.

![](/files/-MJ6_4gpxQUBjIkiN5Z8)

For optional questions ngSurvey will add a "None of the above" answer to let the respondent  skip the question without answers.

![](/files/-MJ6aEDl67G2WwjjSCHR)

## 🔠 Text answer

If your question has a [text based answer](/form-management/form-designer/questions/question-types/standard/text-comment-field) ngSurvey will ask the respondent to enter free text in his conversation.

![](/files/-MJ6QUjYrtm_a286XTCC)

## 📁 File upload answer

If you're question collects files from the respondent using the [file upload answer type ](/form-management/form-designer/questions/question-types/advanced-types/file-upload)ngSurvey will ask the respondent to upload a file in his conversation.

![](/files/-MJ6Va7CrsE8LKZRSRtp)


# Question Branching

## 🌲What is question branching ?

The question branching features let you define [conditions](/form-management/form-designer/condition-rules) that will redirect the user to a given question based on his answers. This allows you to change and control the flow of your survey dynamically based on the respondent answers.

{% hint style="warning" %}
Question branching is only available on surveys having the [single question flow ](/form-management/form-designer/form-settings/single-question-flow)mode enabled.
{% endhint %}

## ➕ Adding a question branching

Branching must be added on the [question properties](/form-management/form-designer/questions/question-properties) that will trigger the branching or in a more visual way using the [flow logic graphs](/form-management/flow-logic-graph).

## 🔅 Branching properties

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

Here we have set the current question to branch to "Q.3" if the condition is met. If the condition is not met ngSurvey will show the next question being after the current question based on their display order in your survey.&#x20;


# Skip / Hide Logic

## 🕵 What is skip / hide logic ?

Skip logic conditions allow us to setup logical [condition rules](/form-management/form-designer/condition-rules) based on respondent's answers, querystring or language to hide or show a question to the respondent based on his answers to the survey.

![](/files/-MBmFUPsXGWpa5J3BRjE)

## 🔅 Skip / hide logic properties

![](/files/-MBgpph3Rtavl61e7JL8)

1. We can switch the condition to either hide or show the question if the [condition rule](/form-management/form-designer/condition-rules) is met.
2. Add an additional [condition rules](/form-management/form-designer/condition-rules) group.&#x20;

{% hint style="info" %}
In the example above the selected question would be hidden if the respondent answered Very good to the How do you like our website design? question.
{% endhint %}


# Question Types

You may use one or more of following question types in any of your pages to build up your forms.

* [Single choice](/form-management/form-designer/questions/question-types/standard/single-choice)
* [Multiple choice](/form-management/form-designer/questions/question-types/standard/multiple-choice)
* [Images choice](/form-management/form-designer/questions/question-types/standard/image-choices)
* [Drop Down list](/form-management/form-designer/questions/question-types/standard/dropdown-list)
* [Autocomplete](/form-management/form-designer/questions/question-types/standard/autocomplete)
* [Text / Comment field](/form-management/form-designer/questions/question-types/standard/text-comment-field)
* [Single matrix](/form-management/form-designer/questions/question-types/matrix-questions/single-matrix)
* [Multi matrix](/form-management/form-designer/questions/question-types/matrix-questions/multi-matrix)
* [Star rating](/form-management/form-designer/questions/question-types/satisfaction-questions/star-rating)
* [Thumbs up / down](/form-management/form-designer/questions/question-types/satisfaction-questions/thumbs-up-down)
* [CSAT score](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score)
* [Conjoint Choice](/form-management/form-designer/questions/question-types/choice-based-conjoint-cbc)
* [Smileys](/form-management/form-designer/questions/question-types/satisfaction-questions/smileys)
* [Net Promoter Score®](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r)
* [Contact details](/form-management/form-designer/questions/question-types/advanced-types/untitled-1)
* [Constant sum](/form-management/form-designer/questions/question-types/advanced-types/untitled)
* [Slider scale](/form-management/form-designer/questions/question-types/advanced-types/slider-scale)
* [Answer ranking](/form-management/form-designer/questions/question-types/advanced-types/answer-ranking)
* [File upload](/form-management/form-designer/questions/question-types/advanced-types/file-upload)

{% hint style="info" %}
To enhance further your questions and add additional functionalities you may also use any of the [answer types](/form-management/form-designer/answers/answer-types) widgets.
{% endhint %}

&#x20;&#x20;


# Standard

The standard question are the most commonly used questions to create survey forms.

* [Single choice](/form-management/form-designer/questions/question-types/standard/single-choice)
* [Multiple choice](/form-management/form-designer/questions/question-types/standard/multiple-choice)
* [Drop Down list](/form-management/form-designer/questions/question-types/standard/dropdown-list)
* [Autocomplete](/form-management/form-designer/questions/question-types/standard/autocomplete)
* [Text / Comment field](/form-management/form-designer/questions/question-types/standard/text-comment-field)


# Single Choice

A single choice question is question that allows only one answer to be selected among the [selectable answers](/form-management/form-designer/answers/answer-types/selection-answers) in your question.

&#x20;The default render mode for the answer selection is a radio button.

![](/files/-MBgzAhNYWWMa0U5OFNb)

{% hint style="info" %}
Radio buttons can also be un-selected if the respondent clicks on a selected radio button.
{% endhint %}

## ⚠️ Mandatory question

You can make answers to your question mandatory by turning on the required property of the question.

![](/files/-MBhqSYXO2K9sjWZT838)

Respondents will be required to select one answer

![](/files/-MByE_FrPQNIRmCSmjUh)

{% hint style="info" %}
You may switch to to a [multi selection question](/form-management/form-designer/questions/question-types/standard/multiple-choice) by checking the **multiple selection** property of the [question properties](/form-management/form-designer/questions/question-properties).
{% endhint %}

## 🖊️ Other selection

You may also create an open selection using the [other selection](/form-management/form-designer/answers/answer-types/other-selection) answer type to the let the respondent enter his own answer.

![](/files/-MBhE9Q8Q9jepX3Vrg5a)

## 🔘 Custom selections

You may also use the [widgets ](/form-management/form-designer/answers/answer-types/creating-new-type/widget)system to develop a custom selection widget using plain Javascript, CSS and HTML that will render differently than the standard radio buttons. &#x20;

![](/files/-MBh-Kvu7I_LTAACr9ft)

## 😃 Rating scale headers

You may add scale anchors to your question layout if your question is horizontal and if it has its rating option enabled in its [question properties](/form-management/form-designer/questions/question-properties).

![](/files/-MBhV2oOAoUQssh6SisE)

The scale anchors texts can be set from the [question properties](/form-management/form-designer/questions/question-properties).

![](/files/-MBhUpH_sIRVce0M3hZd)


# Multiple Choice

A multiple choice question allows the respondent to select multiple answers among the [selectable answers](/form-management/form-designer/answers/answer-types/selection-answers) of your questions.&#x20;

The default render mode is a checkbox

![](/files/-MBh0_qolTaKOu6w_5o5)

{% hint style="info" %}
You may switch to a [single question](/form-management/form-designer/questions/question-types/standard/single-choice) by unchecking the **multiple selection** property of the [question properties](/form-management/form-designer/questions/question-properties).
{% endhint %}

You may also set a limit on the number of responses that can be selected from the [question properties](/form-management/form-designer/questions/question-properties) page.

&#x20;

![](/files/-MBh0sLuIQVMD-YrkqsT)

## ☑️ Exclude answer

An exclude answer is an answer that will block the selection of all other answers and un-check any checked answer, in the example above if the respondent checks the "None of the above" answer it will block the selection on all the other answers and un-check them.

There can be only one exclude answer per question and you can set it from the [answer properties](/form-management/form-designer/answers/answer-properties) page.

![](/files/-MBh1fDpgL_CICZnALYz)


# Image Choices

The image choices question is question that will let you upload images and let the respondent select one or more images among the one you have uploaded.

![](/files/-MUgmKLYEwIUOV7mJQ2y)

{% hint style="info" %}
Images size is optimized for 200x200 pixel images. Newly uploaded images will automatically saved in the media gallery root folder.
{% endhint %}

## 🖼️️ Images layout

NGSurvey will automatically adapt the horizontal layout of all your images based on the respondent's display width. You may also force the layout to show the images as columns.

To change the number of columns you may open the question settings page and update the maximum columns that will be used to render the images &#x20;

![](/files/-MUe8_5SlHavZqH-CnOR)

{% hint style="warning" %}
The column count is the maximum number of columns that should be displayed. If the screen with of the respondent is lower that the possible number of columns ngSurvey will adapt the layout to show the images in the best possible way to the respondent even if the column count will be less that the one you have chosen. &#x20;
{% endhint %}

## 🎞️ Images ratio

The default ratio used by ngSurvey will keep the image ratio to avoid any distortion of the images. You can however also select different types of ratios depending on the type of images that you wish to use.&#x20;

To change the ratio of your images you may click on the preset styles button to open the available ratios.

![](/files/-MUe9yP-W-1kco3yliyn)

You may find below samples of the different ratios that you can use to adapt the display of your images.

&#x20;

![Ratio 1-1](/files/-MUeAZPaIH02SOyUOvjM)

![Ratio 16-9](/files/-MUeAhXJVKtNF3morMev)

![Ratio 3-4](/files/-MUfrLX_lI-A5qsG44in)

![Ratio 4-3](/files/-MUeAzu7abdGVBNw0NBq)

![Ratio 4-6](/files/-MUfraWjJ2jaLiVO-OSh)

![Ratio 3-2](/files/-MUeCj3ilp11wxpcczZD)

![Ratio 8-5](/files/-MUeCqH6oiOBPfxxpqsa)

![Ratio 8-16](/files/-MUfro22e0PkwVMV7k2A)


# Dropdown List

A drop down list allows the respondent to select one answer among the [selectable answers](/form-management/form-designer/answers/answer-types/selection-answers) of your question. All [Selectable answers](/form-management/form-designer/answers/answer-types/selection-answers) will be displayed as a list.

![](/files/-MBh2usQEJXKvu2SOhsX)

{% hint style="info" %}
Any non selectable [answers](/form-management/form-designer/answers/answer-types) of your question like for example a field will be displayed outside right after the list.
{% endhint %}

## 📜 Sort order

The default sort order of the list is the display order of your answers, this may be an issue in multi-language surveys where label text can be different from one language to another. In such a case you can set a custom sort order for the list in your [question properties](/form-management/form-designer/questions/question-properties) page, this sort order will be applied independently for each language.


# Autocomplete

An autocomplete field is a field that will generate dynamically a list based on the entry of the respondent. Only [selectable answers](/form-management/form-designer/answers/answer-types/selection-answers) will filtered using the respondent text entry.

![](/files/-MBhCm3AJsLyO8U7eny9)

## 📜️ Sort order

The default sort order of the list is the display order of your answers, this may be an issue in multi-language surveys where label text can be different from one language to another. In such a case you can set a custom sort order for the list in your [question properties](/form-management/form-designer/questions/question-properties) page, this sort order will be applied independently for each language.


# Text / Comment Field

The text / comment field question is based on the [entry field](/form-management/form-designer/answers/answer-types/entry-field) answer type.

![](/files/-MBhF7Hjbg4PpfqKEiUE)

You may also have larger fields using the **Comment field** question.

![](/files/-MBhFAyrt9Zs84tYWV1Z)

{% hint style="info" %}
You may check the [fields properties](/form-management/form-designer/answers/answer-properties/field-properties) page for a detailed overview of the different fields capabilities (validation, layouts ..)&#x20;
{% endhint %}

## 🏷️ Label Positioning

Labels of the fields can be positioned in 2 different ways

Either inside the field

![](/files/-MBhL2Zvo3z0RzHsX84z)

Or outside the field&#x20;

![](/files/-MBhLcWEnyeae-8F1gFL)

You may switch from one or the other positioning using the **fields label position** property of your [survey properties](/form-management/form-designer/form-settings).

![](/files/-MBhLKwfuvCKfTgO-T2Y)

{% hint style="info" %}
Label positioning is set globally for all the fields of your survey.
{% endhint %}


# Matrix Questions

A matrix question is a group of several sub-question sharing the same set of answers as columns. You can have [single selection based matrixes](/form-management/form-designer/questions/question-types/matrix-questions/single-matrix) or [multi-selection](/form-management/form-designer/questions/question-types/standard/multiple-choice) based matrixes.

![](/files/-MBhZpTCZ1TuO0A75jVP)

## ➕ Adding a new matrix row or column

To add a new row or column click on the matrix question you would like to edit.

![](/files/-MBh_YOzO9QtqDHbKl28)

* **`Add row`** will add a new row to your matrix.
* **`Add column`** will add a new column to your matrix.

## Columns type

Matrix question's columns can be build using any of the available [answer types](/form-management/form-designer/answers/answer-types) as such you could build a matrix that is based only fields.

![](/files/-MBhc4gpDyoG1h5ofG_R)

{% hint style="info" %}
You may set the answer type of your column on the matrix column properties page.
{% endhint %}

## 🏃 Organizing your rows and columns

You may move your rows and columns display order positions using drag and drop.&#x20;

![](/files/-MBhai5QY684dElKwNeq)

## 🔅 Matrix properties

* **`Randomize rows`** display the rows in a random order.
* **`Randomie columns`** display the columns in a random order.
* **`One selection per column`** will allow the respondent to select only one answer for each of the matrix column.
* **`Left scale anchor`** if rating is enabled you can set a label for the left header&#x20;
* **`Center scale anchor`** if rating is enabled you can set a label for the center of header
* **`Right scale anchor`** if rating is enabled you can set a label for the right header
* **`Link answers from`** will generate the rows [dynamically ](/form-management/form-designer/piping/carry-forward-answers)based on on respondent answers to a previous question.  &#x20;


# Columns / Rows Sums

Matrix questions can be configured to automatically calculate the total of the rows and columns values entered by the respondent.

![](/files/-M_uvjqX889DktTgcQAZ)

In order to enable the sum you will need to have a matrix with entry field columns and set in the matrix properties page the Display sum option to Columns or/and Rows.


# Single Matrix

A single choice matrix question is question that allows the respondent to select only one answer per row.

![](/files/-MBhZpTCZ1TuO0A75jVP)

You can make answers to your matrix mandatory by turning on its required property

![](/files/-MBhq5ZZTes5GzMv9QtI)


# Multi Matrix

A multiple choice matrix question is question that allows the respondent to select one or more answers per row.

![](/files/-MBhrhpQagAf1F5rZnZb)

You can set the minimum and maximum allowed answers from the [question properties](/form-management/form-designer/questions/question-properties) page.

![](/files/-MBhrusH4WWA41TfaFI0)


# Mobile Rendering

Matrix questions do an adaptive rendering based on the respondent device size. If the respondent device's size is too small to accommodate the full matrix it will automatically fall back to a vertically grouped layout.

![](/files/-MBiXDRQF5aM4F031zhJ)

{% hint style="info" %}
For matrix questions have their rating option enabled ngSurvey will try at first to render the answers horizontally if this formats matches the screen size of the respondent.
{% endhint %}


# Satisfaction Questions

The satisfactions question allows you to measure your customers satisfaction and also measure customer retention. Using these questions its easy to get quick feedback to see if customers are happy or not and take actions with your product or services and take actions.

Satisfaction questions are using ngSurvey's [rating](/form-management/form-designer/questions/rating) features  to set rating values of each [answers](/form-management/form-designer/answers) that will be used to calculate the satisfaction level.

## 📊 Reporting

To analyze the satisfaction you may the [bar chart](/form-management/reports/report-builder/report-items/bar-chart) or [historical trends](/form-management/reports/report-builder/report-items/historical-trends) reports to get the average rating of your questions and mesure satisfaction. Satisfaction questions like [NPS](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r), [CES](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score) or [CSAT](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score) can also be used on the [dashboard](/form-management/overview-reports/overview) to give you an immediate overview on how your questions are performing when you log into ngSurvey.


# Net Promoter Score® Question

The [Net Promoter Score](/form-management/form-designer/questions/question-types/satisfaction-questions/net-promoter-score-r/understanding-the-net-promoter-score-r-nps)® question allows you to collect information about your customer loyalty and happiness with dedicated [reporting graph](/form-management/reports/report-builder/report-items/net-promoter-score-r).&#x20;

![](/files/-MBim3DKopbPYm5rDEav)

The [rating](/form-management/form-designer/questions/rating) of answers is set from 0 to 10 and you may use the [NPS report](/form-management/reports/report-builder/report-items/net-promoter-score-r) and [history trends](/form-management/reports/report-builder/report-items/historical-trends) reports to get at any point of time the current NPS score.

{% hint style="warning" %}
This is a fixed question and its answers can't be modified
{% endhint %}

{% hint style="info" %}
You may also [embed](/form-management/campaigns/campaign/invitation-message/embedding-a-question) the question into your [email invitation messages](/form-management/campaigns/campaign/invitation-message) to get an higher response rate if you're using [campaigns](/form-management/campaigns).&#x20;
{% endhint %}


# Understanding the Net Promoter Score® (NPS)

## **Introduction to NPS**

The Net Promoter Score (NPS) is a widely recognized metric used across various industries to gauge customer loyalty and satisfaction. Developed with the intent to simplify understanding of customer sentiments, NPS distills complex customer interactions into a single, straightforward metric. By evaluating how likely customers are to recommend a service or product to others, businesses gain insights into their overall customer relationship and service success. This metric is pivotal for strategic decision-making and improving customer experiences.

## **Origins and Development of NPS**

NPS was introduced in 2003 by Fred Reichheld, Bain & Company, and Satmetrix. It was developed as a tool to measure customer loyalty—a critical predictor of future business growth and sustainability. Unlike earlier, more cumbersome metrics, NPS offered a method that was both simple and powerful for predicting customer purchase and referral behavior. Over the years, it has become a staple metric for customer experience management.

## **Calculating the NPS**

Calculating the Net Promoter Score begins with one simple question: "How likely are you to recommend our company/product/service to a friend or colleague?" Customers respond on a 0-10 scale, and based on their ratings, they are classified into three categories:

* **Promoters (9-10):** These customers are loyal enthusiasts who will keep buying and refer others, fueling growth.
* **Passives (7-8):** Satisfied but unenthusiastic customers who are vulnerable to competitive offerings.
* **Detractors (0-6):** Unhappy customers who can damage your brand and impede growth through negative word-of-mouth.

To determine the final NPS, subtract the percentage of Detractors from the percentage of Promoters. This score can range from -100 (everyone is a detractor) to 100 (everyone is a promoter).

## **Significance of NPS Scores**

The value of an NPS score can vary significantly across different industries. A "good" NPS score might be positive in some sectors, while in others, scores above 50 are considered excellent. The significance lies not just in the score itself but in its comparison to industry benchmarks and competitors. High scores generally indicate healthier customer relationships and greater potential for organic growth through referrals.

## **Advantages and Limitations of NPS**

**Advantages:**

* **Simplicity and clarity:** NPS provides a clear measure of core customer satisfaction and loyalty.
* **Benchmarking:** Enables companies to benchmark performance internally and against competitors.

**Limitations:**

* **Lack of diagnostic power:** NPS does not explain why customers are promoters or detractors.
* **Response biases:** Can be influenced by cultural factors or the mood of the respondent at the time of survey.

## **NPS as a Tool for Improvement**

Forward-thinking companies use NPS not just as a metric but as a driver for continuous improvement. Feedback from detractors can provide critical insights into potential areas for product enhancements or customer service training. Likewise, understanding what makes promoters so enthusiastic can help replicate these successful elements across the business. For example, Apple and Amazon, known for their high NPS scores, consistently leverage customer feedback to outperform competitors.

## **Conclusion**

The Net Promoter Score is a valuable tool for measuring and understanding customer loyalty and satisfaction. While it has its limitations, its strengths make it indispensable for businesses aiming to improve customer relations and drive growth. By integrating NPS into their strategic planning, companies can better align their actions with customer expectations and foster a more loyal customer base.


# CSAT Score

Customer Satisfaction Score ([CSAT](/form-management/form-designer/questions/question-types/satisfaction-questions/csat-score/understating-csat-score)) is the most straightforward of the satisfaction questions to measure customer satisfaction for example for a feedback on a support interaction nor a purchase process.&#x20;

![](/files/-MBikr_9uprZKzGjHHeZ)

The answers rating of the answers are set from 1 (very unsatisfied) to 5 (very satisfied) and [average of all answers](/form-management/reports/report-builder/report-items/historical-trends) will be calculated to give you an overview of the current satisfaction level of your customers.

{% hint style="info" %}
This is a fixed question and its answers can't be modified but you can modify their text through the survey [local resources](/form-management/form-designer/multi-language-forms/local-resources) page.
{% endhint %}

The question will also adapt to smaller screens like mobile devices and fall back to an vertical format if the respondent screen's width is too small.

![](/files/-MBilf-txcJI9gkJT9-v)


# Understating CSAT Score

The Customer Satisfaction Score (CSAT) is a key performance indicator that measures customer satisfaction with a product, service, or experience. It is one of the simplest and most straightforward feedback metrics used by businesses to evaluate how satisfied customers are with specific aspects of their experience.

## How CSAT is Measured

CSAT is typically measured by asking customers a single question: "How would you rate your overall satisfaction with the \[product/service] you received?" Respondents are asked to rate their satisfaction on a predefined scale. This scale can vary but commonly ranges from 1 (very unsatisfied) to 5 (very satisfied). Sometimes, the scale may have more points, such as from 1 to 10, or use different terminologies like stars or happy-to-sad face icons.

## Calculating CSAT Score

The CSAT score is calculated by taking the sum of responses showing satisfaction and dividing it by the total number of responses, then multiplying the result by 100 to get a percentage.&#x20;

## Uses of CSAT

CSAT scores provide instant feedback about how customers feel about a recent interaction or purchase. They are widely used across various touchpoints and interactions to measure:

* Satisfaction with a purchase
* Customer service interactions
* User experience on a website or app
* Effectiveness of a product or service

## Advantages and Limitations

**Advantages:**

* **Simplicity and clarity:** CSAT is easy to implement and understand, making it popular for measuring specific transactional customer interactions.
* **Immediate feedback:** It provides immediate insights into customer satisfaction, allowing businesses to quickly identify and resolve issues.

## **Limitations:**

* **Lack of depth:** CSAT does not provide deep insights into the reasons behind customers' feelings, requiring follow-up questions for more detailed understanding.
* **Not predictive:** It does not predict future behaviors such as the likelihood of customer retention or repeat purchases.

CSAT is particularly effective when combined with other metrics like NPS and Customer Effort Score (CES) to provide a comprehensive view of customer experience and loyalty.


# CES Score

[Customer Effort Score](/form-management/form-designer/questions/question-types/satisfaction-questions/ces-score/understanding-ces) is a standardized customer experience survey metric that enables you to measure a customer interaction and resolution during a request.

Knowing the CES will help you to better understand the current customer experience and improve it if needed.

CES question assigns a [rating ](/form-management/form-designer/questions/rating)to each of its answers from 1 to 7, 1 being highest level of disagreement with the statement and 7 being the highest agreement.

![](/files/-MBifwqKyEiXZ1999Cug)

{% hint style="info" %}
This is a fixed question and its answers can't be modified but you can modify their text through the survey [local resources](/form-management/form-designer/multi-language-forms/local-resources) page.
{% endhint %}

The question will also adapt to smaller screens like mobile devices and fall back to an vertical format if the respondent screen's width is too small.

![](/files/-MBigu0JqDkUlWf1Qzkl)

{% hint style="info" %}
You may also [embed](/form-management/campaigns/campaign/invitation-message/embedding-a-question) the question into your [email invitation messages](/form-management/campaigns/campaign/invitation-message) to get an higher response rate if you're using [campaigns](/form-management/campaigns).&#x20;
{% endhint %}


# Understanding CES

The Customer Effort Score (CES) is a customer experience metric that measures the ease of interaction with a company from the customer's perspective. It specifically gauges the effort a customer has to exert to get an issue resolved, a request fulfilled, an issue fixed, or a question answered.

## How CES is Measured

CES is typically measured by asking customers a single question after an interaction, such as: "On a scale from 'very easy' to 'very difficult,' how easy was it to interact with \[Company/Service]?" This question can be adjusted to fit the specific context or type of interaction being evaluated. Responses are usually given on a scale from 1 (very difficult) to 7 (very easy), although some businesses may use different scales, such as 1 to 5.

## Calculating CES Score

The CES score is calculated by taking the average of all customer responses. For instance, if customers are asked to rate their experience on a scale of 1 to 7, the CES would be the average rating across all respondents. A higher average indicates that customers found it easier to interact with the company, suggesting better customer experience and potentially higher loyalty.

## Uses of CES

The Customer Effort Score is used to:

* Identify pain points in customer interactions that may affect their loyalty.
* Measure the effectiveness of support teams and customer service processes.
* Evaluate the user experience across various touchpoints, such as websites, apps, or physical stores.
* Optimize processes and touchpoints to reduce customer effort, thereby improving satisfaction and potentially increasing loyalty.

## Advantages and Limitations

**Advantages:**

* **Specific focus:** By focusing specifically on the effort exerted by the customer, CES provides clear insights into operational efficiency and customer satisfaction related to service interactions.
* **Predictive of loyalty:** Research suggests that reducing customer effort can significantly boost customer loyalty, as easier experiences are more likely to lead to repeat interactions.

## **Limitations:**

* **Narrow scope:** CES mainly focuses on service and support interactions and might not capture overall satisfaction or emotional connection with the brand.
* **Cultural biases:** Perceptions of effort can vary widely across different cultures, which may affect the accuracy of CES in international contexts.

By focusing on how much effort customers expend in their interactions with a company, CES serves as a critical metric for businesses looking to streamline operations, improve customer interactions, and enhance overall customer satisfaction.


# Star Rating

The star rating question generates a single answer based question that uses a rating from 1 to 5.

![](/files/-MBi_4QM-mWccHi5vT2Z)

![](/files/-MBi_WGk7kVlQKWxXgnW)

## ➕ Adding a star

You can add a star using the **Add new answer** button of your star question.

![](/files/-MBial29kqQRGd0oKn2z)

This will add a new star answer with a higher rating value than the last star answer of your question.

##


# Smileys

The smileys will help you a very quick and easy to understand feedback from your respondents. The answers [rating](/form-management/form-designer/questions/rating) values are set to 1 for the unhappy smiley, 5 for the neutral smiley and 10 for the happy smiley.

![](/files/-MBidf7XMOn0N7RIqz5w)


# Thumbs Up / Down

Using thumbs you can get a feedback using easy to understand pictograms. The thumbs up answer gets assigned a 10 as a [rating](/form-management/form-designer/questions/rating) value while the thumbs down gets a value of 1.

![](/files/-MBicgZdklStimE5SXlN)


# Choice-Based Conjoint (CBC)

## What is a choice based conjoint question ?&#x20;

Choice-Based Conjoint (CBC) analysis is a market research technique used to understand how consumers make decisions about products or services. It involves breaking down a product or service into its individual attributes (such as price, features, brand, etc.) and then asking potential consumers to make a series of choices or trade-offs among a set of products or services that have been constructed by varying these attributes. Through these choices, researchers can infer the relative importance of different attributes to the consumers.

Here's how CBC typically works:

1. **Designing the Study**: The first step is to identify the key attributes of the product or service that might influence consumer decisions and the levels or variations of each attribute. For example, for a smartphone, attributes might include brand, price, battery life, camera quality, and screen size.
2. **Creating Choice Sets**: Based on the attributes and their levels, a series of hypothetical products (or services) are created. These are combined in different ways to form "choice sets". Each choice set contains a few options that participants can choose from, and each option is a combination of attribute levels.
3. **Surveying Participants**: Consumers participating in the study are presented with a series of these choice sets and are asked to choose their preferred option from each set. The choices made by the participants reveal their preferences and the trade-offs they are willing to make between different attributes.
4. **Analyzing Data**: The data from these choices are then analyzed using statistical models to understand the relative importance of each attribute to the consumer's decision-making process. This can also reveal how changes in the levels of an attribute might affect the consumer's choice.
5. **Insights and Applications**: The insights gained from CBC analysis can be incredibly valuable for companies. They can use this information to design or improve products, set prices, and develop marketing strategies that more closely align with consumer preferences.

CBC is favored for its realistic simulation of market decisions, as it forces consumers to make trade-offs similar to real purchasing situations. This helps companies better understand consumer preferences and predict how changes in their products or services could impact consumer behavior.


# Create a Conjoint Question

## ➕ Creating a new conjoint question&#x20;

A conjoint question will be composed of attributes and levels. The first thing to do to create your question would be to define the attributes and the levels that will be used to generate the conjoint design.

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

## 🖼️ Using images&#x20;

While adding your levels you can also use an image instead of the text for your level.

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

## 🔅 Question properties

You may manage all your conjoint question properties the question properties screen.

* **`Task progress` l**et the respondent view how many tasks are left.
* **`Levels layout`** let you choose how the levels are displayed either inside or by sides.
* **`Task text`**&#x72;eplaces the text used to display the current task count.
* **`Next task button text`**&#x6C;et you change the next task button text.
* **`Conjoint success text`**&#x6C;et you set a success text once all tasks have been answered by the respondent.

## 📝 Design experiments&#x20;

When you are finished defining your attributes and levels you can generate the [design experiments ](/form-management/form-designer/questions/question-types/choice-based-conjoint-cbc/design-experiments)that will be used by your respondents. &#x20;

## 🔗 Collect answers

Once you have created your conjoint question and experiments. You will be able to deploy your question as you would normally do with your survey using any of the [deployment](/form-management/publish-deploy) methods available to send the survey to your respondents&#x20;

Based on the choice sets that you have defined each respondent will be presented with a set of tasks to accomplish. The tasks are generated based on the [design experiments ](/form-management/form-designer/questions/question-types/choice-based-conjoint-cbc/design-experiments)that you have created your conjoint question.&#x20;

<figure><img src="/files/jl73iWizguUjAHeXPn0L" alt=""><figcaption><p>Inside layout</p></figcaption></figure>

<figure><img src="/files/Cx6dYujZ56EJznHr33Er" alt=""><figcaption><p>Side based layout</p></figcaption></figure>


# Design Experiments

Design experiments refers to the process of systematically planning how to combine different product or service attributes to create choice sets for respondents to evaluate as tasks. This step is crucial because it influences the quality of the insights you can derive from the analysis. Here's a breakdown of what designing experiments in conjoint analysis entails:

1. **Attribute and Level Selection**: First, identify the attributes (features, services, etc.) of the product or service to be analyzed and the different levels (variations) for each attribute. For example, for a smartphone, attributes might include screen size, battery life, and price, with each attribute having its own set of levels (e.g., screen size: 5 inches, 6 inches, 6.5 inches).
2. **Construction of Choice Sets**: Based on the attributes and levels, create a series of choice sets. Each choice set is a combination of products or services with different attributes, and respondents are asked to choose their preferred option from each set refered as task. The design of these sets can follow different methodologies, such as balanced (full factorial), fractional factorial, or more sophisticated designs like orthogonal or efficient designs.

## 📝 Creating the design experiments&#x20;

ngSurvey allows you to create your choice set either using&#x20;

* [Balanced design](/form-management/form-designer/questions/question-types/choice-based-conjoint-cbc/design-experiments/balanced-design)
* [Manual design](/form-management/form-designer/questions/question-types/choice-based-conjoint-cbc/design-experiments/manual-design)
* [Import design](/form-management/form-designer/questions/question-types/choice-based-conjoint-cbc/design-experiments/import-design)&#x20;

Once you have generated your designs you can review them when you edit your conjoint question. At that point its not possible anymore to edit any of your attributes or levels.

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

## &#x20;

## &#x20;


# Balanced Design

## ⚖️ Balanced design (full factorial)

The balanced design is an experimental setup where each level of every attribute appears an equal number of times across all choice sets presented to the respondents. Each choice set is referred as a task for the respondent. This balance ensures that the design is not biased towards any particular attribute level, allowing for a fair and accurate estimation of the relative importance and utility values of all attribute levels being studied.

In the example below the respondents will be presented with 4 choice sets resulting in 4 tasks to accomplish by choosing for each task 1 choice out of 3 choices. In order to cover all the possible versions to have an accurate analysis you would need 330 respondents to answer this question.  &#x20;

<figure><img src="/files/37ODL8ugaJadM1ZEtfAW" alt=""><figcaption></figcaption></figure>


# Manual Design

## 📑Manual design

Using the manual design feature you can create your own set of versions, each version being composed of the choice set and task that the respondent should achieve.

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


# Import Design

## ➡️ Import from file

Using the file import feature you can import design experiments from third party tools like SPSS. This allows you to import any additional type of designs supported by these tools like for example orthogonal or efficient based designs.


# Reporting / Export

While ngSurvey doesn't offer yet a built in reporting part for conjoint question it does provide a comprehensive set of options to export your conjoint data readily formatted for your favorite statistical application like SPSS or R. If you are interested in such a feature built in contact us.

If you survey has an conjoint question you will have access in the [data export](/form-management/data-export/data-exports) section to a specific export module that will export only the data related to your conjoint questions.

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

## ChoiceModelR

[ChoiceModelR ](https://rdrr.io/cran/ChoiceModelR/)simplifies the estimation of discrete choice models from conjoint analysis data. This R package enables users to efficiently calculate the part-worth utilities for each attribute level, streamlining the analysis process.

Here a sample code to calculate the parth worth utilities of your attributes.

```
 # read the conjoint csv export file that you have exported from ngSurvey. Make sure to use the right separator based on your CSV file output 
 data <- read.csv("c:\\conjointdata.csv", sep = ",") 

 # Must be the number of attributes that you have defined in your conjoint question, here we have 3 attributes
 xcoding = c(0, 0, 0)
 mcmc = list(R = 4000, use = 2000)
 options = list(none = FALSE, keep = 5)

 choicemodelr(data = data, xcoding = xcoding, mcmc = mcmc, options = options, directory = tempdir())
```

## Excel / CSV export

If you're using the standard [Excel ](/form-management/data-export/data-exports/csv-excel)or [CSV ](/form-management/data-export/data-exports/csv-excel)export ngSurvey will include for each of your respondents all the answers of each respondent for each of the tasks that has been generated for them. It also include the design experiment version that has been used for that respondent.&#x20;

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


# Advanced Types

The advanced types questions are a set of specialized questions that provides specific functionalities like

* [Constant sum](/form-management/form-designer/questions/question-types/advanced-types/untitled)
* [Ranking](/form-management/form-designer/questions/question-types/advanced-types/answer-ranking)
* [Sliders](/form-management/form-designer/questions/question-types/advanced-types/slider-scale)
* [File upload](/form-management/form-designer/questions/question-types/advanced-types/file-upload)
* [Hidden question](/form-management/form-designer/questions/question-types/advanced-types/hidden-question)
* [Contact details](/form-management/form-designer/questions/question-types/advanced-types/untitled-1)


# Appointment Calendar

Let you [create a calendar](/form-management/form-designer/answers/answer-types/appointment-calendar) with time slots to gather appointments from respondents.


# Constant Sum

Constant sum is a method that will allow us to setup and group multiple constant sum fields together to ask the respondent to enter a values that will match the total value you have specified.

![](/files/-MBizc8gDuUQ80IUvAyg)

The respondent will need to answer each field with a number and the total of all fields must reach 100.

You may change the total sum to reach from the [question properties](/form-management/form-designer/questions/question-properties) page.

![](/files/-MBj-2BLxexNFz6LJogM)


# Answer Ranking

Ranking is a method that will allow you to setup and group multiple ranking fields together to ask the respondent to rank the answers by order.&#x20;

![](/files/-MBj0U4EvN6uG3Sot5Sd)

If you prefer to ask the respondent for a number instead of drag / drop you may use the [ranking field](/form-management/form-designer/answers/answer-types/ranking-field) or ranking dropdown which are better suited for mobile devices.

![](/files/-MBj1SgyWCcM2aCgthdT)


# Slider Scale

A slider scale allows you to ask the respondent a number on a given scale and let him select its value using a slider.

![](/files/-MBj2ASeXjt7cQrheiPR)

You may set the min rating and max rating of the slider on the [answer properties](/form-management/form-designer/answers/answer-properties) page.

![](/files/-MBj25br_s3KVmnqTQlB)


# File Upload

The file upload question generates a question with a [file upload](/form-management/form-designer/answers/answer-types/file-upload) answer type to let you respondents upload a file. You can add as many file upload answers as you wish in your questions or survey.

![](/files/-MBj4OmS086DyKAgKCAb)

Once uploaded you may use the [file manager](/form-management/reports/files) to download the files or you may also download the respondent files on each [individual respondent report](/form-management/respondents-management/respondent-details) page.&#x20;

## 🔅 File upload properties

You may manage all file upload properties from the [answer properties](/form-management/form-designer/answers/answer-types/file-upload) of your file upload answer.

* **`Max. file upload number`** maximum number of files that the respondent can upload.
* **`Max. file size`** maximum size allowed file for the file.
* **`File type filter`**&#x72;estricts the type of files that the respondent can upload.
* **`Save a copy to Google Drive`**&#x73;aves the uploaded file to one of your Google Driver folder provided that you have linked a [Google Service account](/installation-setup/system-settings/google/service-account) to your [ngSurvey account](/personal-account).

{% hint style="info" %}
The file type filter uses mime type specifications to filter out the content. You may check following [list of mime types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) that you can use to filter out content. If you would like to filter out multiple types of content you can do so by separating each mime type by a **;** char
{% endhint %}


# Hidden Question

Much like the [hidden field](/form-management/form-designer/answers/answer-types/hidden-field) answer type the hidden question  is a question that is part of the survey while the respondent takes it but which is not visible.&#x20;

The hidden question can be used to collect data through [piping](/form-management/form-designer/piping/text-data-piping) or make calculations that are no shown to the respondent.


# Contact Details

The contact details question is a pre-made question template that provides a question with the most common answers related to a contact details question.

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


# Questions Generator

The questions generator is a handy wizard that will let you quickly create questions based on text. You could also use the questions generator to copy / paste existing questions and answers that you might have in another application like Excel for example.

![](/files/-M_unxT9s2V_irbvkVBK)

While entering your answers you can use following text markers to generate specific answers for your questions.

1. \[] followed by the answer label will generate a text field based answer.
2. \[ ] followed by the answer label will generate a text area based field.
3. Using (x) at the end of your answer you can assign a rating value to your answer eg: Great (3) will create an answer that has a rating value of 3.


# Smart Generator

The smart generator wizard uses the power of [AI](/ai-suite)[ Suite](/ai-suite) to generate a set of questions based on any topic of your choice or based on a description of the kind of survey of form that you would like to create. Based on your description the [AI Suite](/ai-suite) will automatically generate a matching set of questions and answers for you.

<figure><img src="/files/NgKTIrYpB0iu9TW8ZCVq" alt=""><figcaption><p>Dynamic questions generation using AI</p></figcaption></figure>

{% hint style="info" %}
Generating questions based on a plain text topic is a very complex process that may take time depending on the requirements that you have set and also depending on the AI service provider service availabilities.
{% endhint %}


# Question Blocks

Question blocks allows you to group a set of questions into one single logical block. The main advantage of a question block is that you can use one single [skip logic](/form-management/form-designer/questions/question-properties/skip-hide-logic) setup to hide the whole block instead of having to set skip logic rules individually on each question sharing the same question [hide logic](/form-management/form-designer/questions/question-properties/skip-hide-logic).&#x20;

## ➕ Adding question to group

To add a question to a group you may click on the **Add a new question to the block** button or you may drag / drop a question of your choice from the question pane.

![](/files/-MBjN1je8gwi-a3K0U8F)

## 🏃 Organizing questions in a group

You may move questions from or to a group using the editing pane tree.

![](/files/-MBjOnHZecbOyHnZ8J0w)

## 🔅 Block question properties

You may set the **question block name** using the selection question [edition toolbar](/form-management/form-designer/questions/editing-a-question) block name.

![](/files/-MBjNfnehQXggVd3MvJW)

{% hint style="danger" %}
Deleting a question block will delete all its questions and answers. This operation cannot be reversed.
{% endhint %}


# Static / Images Content

## 🖼️ What is a static  / images content ?

A static content is a question that has no answers to let you include static text or an image into your pages, basically it allows you to have some descriptive text or a logo without having to add a full question with answers to your page.

To add a static text you may use the **HTML static text** question type when adding a question.

![](/files/-MBeZIYQtGhTx3__lM1T)

This will allow you to add and format static text on your page using the [rich text editor](/form-management/form-designer/rich-text-editor).

![](/files/-MBe_62d_dO_C_rlZ0AZ)

If you prefer to add an image you may use the **images / logo** question type. The logo question wizard will open the [media gallery](/form-management/style-branding/media-gallery) to let you upload a new image or select one from the existing one.

![](/files/-MBe_RbEmgpdX3geiENV)


# Rating

## 🚥 What is rating ?

The rating features let you get satisfaction feedback from your respondents by setting specific rating scale values for each of your answers, these values will be used during reporting to calculate an average value across all respondents and give you a better understanding about the the level of respondents satisfaction .

## &#x20;🚀 Enabling rating

To enable rating you first need to turn on the Rating property in your [question properties](/form-management/form-designer/questions/question-properties).

![](/files/-MBY8t9qwAA6wJBGaS74)

Once the rating is activated you may set the rating values on your [answer properties](/form-management/form-designer/answers/answer-properties).

![](/files/-MBYASdwFyatpFy1Q6Gu)

{% hint style="info" %}
You can use any value for your rating number.
{% endhint %}

## 😃 Scale anchors &#x20;

You may add scale anchors to questions having their horizontal display and rating properties enabled in their [question properties](/form-management/form-designer/questions/question-properties).

![](/files/-MCNe8HsPW7f8PUNUK3O)

The scale anchors texts can be set from the [questions properties.](/form-management/form-designer/questions/question-properties)

![](/files/-MBhUpH_sIRVce0M3hZd)

Questions with horizontal scale anchors or rating enabled will automatically adapt their layout based on the respondent device and switch to a vertical layout if needed.

![](/files/-MCNeSCljoYMQId2jLsq)

## 📈 Rating reporting

Upon completion of your survey you will be able to  view the average rating for all your respondents in your [reports](/form-management/reports). Thanks to the rating average you can have a very good understanding on the current satisfaction level of your respondents.&#x20;

![](/files/-MBYBEiyWSp3uKt_veuJ)


# Panel Linking

Using panel linking you can link any of your [panels](/panels) to either update its data or add new data to it from within any survey form.&#x20;

Once linked to a survey the [panel attributes](/panels/untitled) will be made available as a question that you can move anywhere inside the form as you would with any normal [question](/form-management/form-designer/questions).

Linked panels can be useful in following use cases.

* [**Panel auto filling**](/form-management/form-designer/questions/panel-linking/panel-auto-filling) to add a new panelists on the go based on new respondent answers.
* [**Panel updating**](/form-management/form-designer/questions/panel-linking/panel-updating) to let respondents update pre-existing panel data from within a survey.

## 👪 Linking a panel to your form&#x20;

To link a panel you need to **insert a new question** and chose the **Panel question** type. This will open a wizard to chose the panel you would like to use in your survey form.

![](/files/-MBjTNlHdOcWZWvGWJ7v)

The respondent will now either be able to [add new panelist](/form-management/form-designer/questions/panel-linking/panel-auto-filling) using that linked question or [update ](/form-management/form-designer/questions/panel-linking/panel-updating)pre-existing panelist data.

## 🔅 Panel attribute link properties&#x20;

You may also configure each [panel attribute](/panels/untitled) behavior from the [panel attributes properties](/panels/untitled) to make a  it read only, visible, updatable depending if the linked panel question is used for [panel filling](/form-management/form-designer/questions/panel-linking/panel-auto-filling) or [panel updating](/form-management/form-designer/questions/panel-linking/panel-updating).

![](/files/-MBjXK2h2Z8QKd-4WrMP)

* **`Always shown`** will always display the attributes to the respondent.
* **`Always hidden`** will be hidden to the respondent.
* **`Read only on update`** will be available for [auto-filling](/form-management/form-designer/questions/panel-linking/panel-auto-filling) but read only on [update](/form-management/form-designer/questions/panel-linking/panel-updating).
* **`Hide on update`** will be available for [auto-filling](/form-management/form-designer/questions/panel-linking/panel-auto-filling) but hidden on [update](/form-management/form-designer/questions/panel-linking/panel-updating).
* **`Hide on add`** will be hidden for [auto-filling](/form-management/form-designer/questions/panel-linking/panel-auto-filling) but available on [update](/form-management/form-designer/questions/panel-linking/panel-updating).


# Panel Auto Filling

## ➕ **Panel Auto Filling**

Can be used if you need to fill automatically your [panel ](/panels)with new [panelist ](/panels/panelists) Once the respondent filled during the survey the empty linked panel question all his data will be saved as a new [panelist](/panels/panelists) and added to your panel.

![](/files/-MBjWCyzKI0t78jaKUEI)

To enable panel filling you have to enable the **allow panelist creation** property of your linked panel [question properties](/form-management/form-designer/questions/question-properties).

![](/files/-MBjVG6O6QBENdP60GIQ)

{% hint style="info" %}
Only panel connector which support the insertion of new panelists are able to support this feature.
{% endhint %}

You may choose how and which panelist attributes will be displayed to the respondent when the panel is linked to a survey by setting the **Respondent display behavior** of the [panel attribute properties](/panels/untitled).

![](/files/-MBjXK2h2Z8QKd-4WrMP)


# Panel Updating

## ✒️ **Panel Updating**

Using panel updating along with the panelist mapping features you can display to the currently [logged in](/form-management/security/security-items/panel-security) panelist all the data that you have stored about him in our panel. The respondent can then update that information which will be pushed back to your panel once he submits his survey.

In the case of the [SQL Server connector](/panels/panel-connectors/sql-server-connector) you setup ngSurvey to update the linked table with the newly entered information from the survey.

{% hint style="info" %}
Panel updating requires that the [panel security item](/form-management/security/security-items/panel-security) is activated on the survey to authenticate the [panelist](/panels/panelists) to lookup the data that should be shown to the respondent for update..
{% endhint %}


# Reusable Components

To reuse a question across multiple surveys with edits that update all instances, consider implementing a question component. This ensures consistency and ease of management if you have a question that will be reused across multiple surveys and allows you to create preset questions that can be easily reused by your users.

## ➕ Creating a new component

In order to create a component create a new standard question within any of your surveys. Once you have finish designing your questions and its answers you can save it as a component within your questions library using the Save as component to library option on the question toolbar.

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

\
Once you have added your question as a component it will be available as component in your question library where you can edit further the component. Note that editing the component will also reflect all changes on all instances that are connected to that component within your surveys.&#x20;

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

You can view at any time on the component properties which surveys in the system is currently using your component and unlink it from it.

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

{% hint style="info" %}
Deleting a component will not delete the instance that are linked to it but will detach them before deleting the component.
{% endhint %}

## 🔗 Link component as an instance in a survey

Once you have your component you can now reuse it in any of your surveys or forms by selecting it from the library tab. Selecting the component will create a new instance that will be linked to that component. As long as the instance is linked any changes to the component will also be reflected on that instance. \
\
![](/files/kSP2xDQnuqH66w1F9XM9)

{% hint style="warning" %}
Linked component cannot be edited directly in the survey.&#x20;
{% endhint %}

If you dont want anymore to have it linked to the component you can detach the instance which will create an independent question. \
![](/files/R43IvdEcipoyM7wodpWL)


# Answers

## 📝️️ What are answers ?

Answers are the key parts of your [questions](/form-management/form-designer/questions) to collect the information you need from your [respondents](/form-management/respondents-management).

An answer can be defined as a small module called [answer type](/form-management/form-designer/answers/answer-types) which provides a unique functionality that can be used to build your [questions](/form-management/form-designer/questions). ngSurvey provides out of the box a number of [answers types](/form-management/form-designer/answers/answer-types) that you can use in your questions like for example calendars, radio buttons, signature pads, entry fields, list of items.&#x20;

![](/files/-MBwgklC3el4rClOCon9)

{% hint style="info" %}
You may also develop your own answer types [widgets](/form-management/form-designer/answers/answer-types/creating-new-type/widget) using plain javascript and html.
{% endhint %}

## 🔠️️ Mixing answer types

As you can see in the example below you can build a question using any kind of answer types.

![](/files/-MBwbd4W4Nf4nH9uOXSh)

{% hint style="info" %}
In the sample contact form above we used a [field](/form-management/form-designer/answers/answer-types/entry-field), an [email validator ](/form-management/form-designer/answers/answer-types/email-validator)and a  [captcha](/form-management/form-designer/answers/answer-types/captcha) validation answer type to build our question.
{% endhint %}


# Adding an Answer

You may add new answers to your questions while typing using the return key to create a new answer.

![](/files/-MBx7BzKS0czpo4TkH5U)

You may also add a new question using from [answer types](/form-management/form-designer/answers/answer-types) list and drag and drop the [answer type](/form-management/form-designer/answers/answer-types) of your choice anywhere in your question.

![](/files/-MBx80XlAleZGbBNMr9M)

{% hint style="info" %}
Clicking on the answer type of your choice without drag/drop will either add it to the selected question or if no question is selected it will create a new blank question with this new answer type in it.
{% endhint %}

## ➕ Add tools

The add tools let you quickly add single or multiple answers at one time.

![](/files/-MBxBDMDfejuKXNCNGJA)

1. The **add new answer** adds a new answer to your question, the answer type of the added answer will be the same as last answer of your question.
2. The quick add answer button will let you select the [answer type](/form-management/form-designer/answers/answer-types) of the answer that is being added.

![](/files/-MBxBtGkEjgDEMiAOoc1)

3\. The multiple add answer button will let you add multiple answers in one time. You may enter one answer text label per line and click on the save icon 💾 to add all these answers to your question.&#x20;

![](/files/-MBxCBpWnYsgcH49loHL)


# Editing an Answer

## ✒️ Editing the answer text

To edit an answer label text you may click on the answer text label and edit the text. Modifications will be saved as you type.

## 🚀 Answer actions

![](/files/-MBxI7Xio99O0xA9upEU)

1. You may check the box to make it mandatory if the answer is a text based [answer type](/form-management/form-designer/answers/answer-types) like a [field](/form-management/form-designer/answers/answer-types/entry-field).
2. [Pipe](/form-management/campaigns/campaign/invitation-message/invitation-piping-tags) a value into the answer label text.
3. Use an image from the [media gallery](/form-management/style-branding/media-gallery) instead of the label.
4. Open the [answer properties](/form-management/form-designer/answers/answer-properties).
5. Deletes permanently the answer.
6. Move the answer using drag / drop to another position.&#x20;

{% hint style="danger" %}
Deleting an answer with also delete all the respondent answers that were given for that answer. This operation cannot be reversed. Note that for safety the question is first moved to the [form trashcan](/form-management/form-designer/form-trashcan) from where you can still recover it as long as it has not been wiped.
{% endhint %}

## 🏃 Moving an answer

You can move an answer position within the same question using either the editing space tree.

![](/files/-MBx9TXcJ9lgAQz_maKg)

or using the drag icon of the answer actions.

![](/files/-MBx9lPVekIDAY7xXgo7)


# Answer Properties

The answer properties let you define how your answer behave and how it should validate respondents entries.

{% hint style="info" %}
This properties page lists all the possible answer properties for all the [answer types](/form-management/form-designer/answers/answer-types). Depending on the answer type some of them may or may not be available while you edit them.
{% endhint %}

## 🔅 Answer properties

* **`Required`** makes the text/value based answers mandatory.
* **`Read only`** respondent will not be able to  set/change this answer.
* **`Prevent duplicates`** will only allow one respondent answers of a given value for this answer.
* **`Sentiment`** will compute the [sentiment](/form-management/reports/text-reports/sentiment-analysis) on the text entered by the respondent..
* **`Exclude from linked questions`** answer that will not be carry forward  if the question is linked for [carry forward answers](/form-management/form-designer/piping/carry-forward-answers).
* **`Selected`** Selects the answer if its a [selection based answer](/form-management/form-designer/answers/answer-types/selection-answers) eg: radio, checkbox.
* **`Entry validation`** [validates](/form-management/form-designer/answers/answer-properties/entry-validation) a text entry using a regular expression.
* **`Field type`** define the [type](https://www.w3schools.com/tags/att_input_type.asp) of entry that this field expects.
* **`Input mode`** hints on the type of value that needs to be entered in the [field](/form-management/form-designer/answers/answer-properties/field-properties) based on which the touch device will display a given virtual keyboard.  &#x20;
* **`Max. length`** maximum characters a respondent can enter in the [field ](/form-management/form-designer/answers/answer-properties/field-properties).Note that some browsers ignore the max length if the input mode is set to number.
* **`Min. length`** sets the minimum length of data that can be entered in the field.
* **`Max. words`** defines how many words the field accepts from the respondent. &#x20;
* **`Width`** width of the [field](/form-management/form-designer/answers/answer-properties/field-properties).&#x20;
* **`Height`** height of the [field](/form-management/form-designer/answers/answer-properties/field-properties)
* **`Default text value`** default text value that will be set on the answer on the first respondent's visit.&#x20;
* **`Watermark text`** defines some placeholder text that will be displayed in empty [fields](/form-management/form-designer/answers/answer-properties/field-properties).
* **`Helper text`** adds a small helper text under the [field](/form-management/form-designer/answers/answer-properties/field-properties).
* **`Tooltip`**&#x61;dds a helper ? icon next to the answer.&#x20;
* **`Pipe alias`** alias that can be used for [piping](/form-management/form-designer/piping/text-data-piping).
* **`CSS class`** .define a custom [CSS class](/form-management/style-branding/style-editor/css) that will be applied to that answer.
* **`Type`** [answer type](/form-management/form-designer/answers/answer-types) used for the answer. Type can be changed at any time to to any of the available [answer types](/form-management/form-designer/answers/answer-types).
* **`Data classification`**&#x53;et the [data classification](/data-encryption/data-classification) to define the [encryption](/data-encryption) level for text based answers.&#x20;

  &#x20;


# Field Properties

Field based answers types may be customized using following field related properties.

## 📏 Sizing

As the size of the fields is not fixed you may fully customized it using a custom width and height.

![](/files/-MBhFu6lfT2Ic4ivQi3-)

{% hint style="info" %}
Forcing the width might break the responsive layout on mobile devices, you may consider rather changing the width of fields using [CSS](/form-management/style-branding/style-editor/css) and setup appropriate sizes based on the respondent's screen width and device (desktop, mobile).  &#x20;
{% endhint %}

## &#x20;🔤 Setting a default text

Each of your fields can be prefilled using a default text. This default text will be set on the field value the first time the survey is displayed to the respondent.&#x20;

![](/files/-MBhIr3umJWtJPR116Lx)

{% hint style="info" %}
You may also [pipe](/form-management/form-designer/piping/text-data-piping) in real-time respondent answers from other questions int your field using the [pipe ](/form-management/form-designer/piping/text-data-piping)icon.
{% endhint %}

## 📄 Watermark Text

The watermark text will be displayed on the field while the field value is empty, it disappears as soon as the respondents enter an answer in the field.

![](/files/-MBhJlatkh87bf1Aay37)

## 🆘 Helper Text

A helper text can be used as hint displayed under the field. You an set the helper text from the [answer properties](/form-management/form-designer/answers/answer-properties) page.

![](/files/-MBhGWSkJHCjfN-iTk0m)

![](/files/-MBhGdt7DP_tE3GaHcRM)

## ⌨️ Input modes

The input mode hints the device on what kind of text might be entered by respondent. This features is handy on devices with virtual keyboards like mobile devices as they adapt their virtual keyboard based on the selected input mode. &#x20;

For example selecting numeric as an input mode would open the mobile device's virtual keyboard with only number keys.&#x20;

![](/files/-MBxUoqMeQKMFYehwnTV)

{% hint style="info" %}
You may check out the official [input mode reference](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode) to learn more about the different modes.
{% endhint %}

### ☑️ Javascript validation <a href="#input-modes" id="input-modes"></a>

Its possible to set the Javascript validation and Validation message property on the [answer properties](/form-management/form-designer/answers/answer-properties/field-properties) to use custom javascript code to validate your answer. \
\
In the code below respondentAnswerValue will be replaced by the actual value of the field. If the code returns false ngSurvey will block the submit or navigation and show the validation message.

```
return (respondentAnswerValue >= 18 && respondentAnswerValue <= 99);
```

In the code below we are using the getAnswer in the validation context to get a value from another answer in the survey. Here we are looking up an answer with a reporting alias set to "hh\_people".&#x20;

<pre><code><a data-footnote-ref href="#user-content-fn-1">re</a>turn (respondentAnswerValue &#x3C;= validationContext.getAnswer('hh_people'));
</code></pre>

The validation context support following method and properties

```typescript
export class ValidationContext {
   answer:Answer, // Current answer being validated
   question:Question, // Current question of the answer being validated
   questions:Question[], // All survey questions
   answers: Answer[];  // All survey answers

  public getAnswer(id: string): string // Get the value of an answer by looking up its reporting alias or id
  public isSelectedAnswer(id: string, value: string): boolean // Look up a question based on its id or reporting alias and check if the given value is being selected 
}

```

[^1]:


# Reporting / Exports

The reporting / export properties let you define how your answer will be handled while being [exported](/form-management/data-export/data-exports). This will help you optimize as much as possible your export based on the data that you have collected&#x20;

## 🔅 Reporting / Export properties

* **`Reporting alias`** alias that can be used for [reporting](/form-management/reports) instead of the text label.
* **`Reporting value`**&#x6C;et you define a value for each of your selection based answer that you can use in your favorite statistical application. Reporting values will automatically be set by ngSurvey in sequential order. These reporting values will be exported and assign to each answer SPSS label on your [SPSS export](/form-management/data-export/data-exports/spss-sav).&#x20;
* **`Reporting type`** let you define a type for your text based entry answer that will be used in export modules like [SPSS](/form-management/data-export/data-exports/spss-sav).

{% hint style="info" %}
Its possible to reset or view all the reporting values and aliases from your question variable editor.![](/files/EI4GWGVJJ7SKnpK0YP3Z)&#x20;
{% endhint %}


# Skip / Hide Logic

## 🕵 What is skip / hide logic ?

Skip logic conditions allow us to setup logical [condition rules](/form-management/form-designer/condition-rules) based on respondent's answers, querystring or language to hide or show an answer to the respondent based on his other answers on the survey.

## 🔅 Skip / hide logic properties

![](/files/-MBwZBU7RfQCQ4qLXhOy)

1. We can switch the condition to either hide or show the answer  if the [condition rule](/form-management/form-designer/condition-rules) is met.
2. Add an additional [condition rules](/form-management/form-designer/condition-rules) group.&#x20;

{% hint style="info" %}
In the example above the selected answer would be hidden if the respondent answered 1 to the Would you recommend our company ? question.
{% endhint %}


# Entry Validation

## ☑️ What entry validation ?

Beside checking if a value has been entered in a field you may also setup more advanced rules using regular expression to make sure that the text entered by the respondent matches certain conditions.

You may also set the **maximum length of characters** allowed to be entered in your field.

![](/files/-MBxSXjb6_rt4xDgQCuU)

{% hint style="info" %}
Advanced users may also create a custom field based [answer type](/form-management/form-designer/answers/answer-types/creating-new-type) using  [custom javascript validation](/form-management/form-designer/answers/answer-types/creating-new-type/custom-validation-code) to validate the respondent entries.
{% endhint %}

## 🔢 Regular expressions

A [regular expression](https://en.wikipedia.org/wiki/Regular_expression) (regex) is a string based search pattern that will check that the text entered by the respondent matches the expression pattern or not.&#x20;

![](/files/-MBhF_WSjl4w9Zy_E3R9)

Using these patterns you check a value using patterns like emails, numbers, zip codes etc ... Almost any [field](/form-management/form-designer/answers/answer-types/entry-field) based type can be validated against a regular expression created using the regular expression editor.

## ➕ Adding a regular expressions

To add a regular expression go to the [answer properties](/form-management/form-designer/answers/answer-properties) page and click on the **+** icon

![](/files/-MBxmVt6uM9ItWMtBWkC)

{% hint style="info" %}
Regular expressions are only available to the user who created them. If you would like to share your regular expression with all the other ngSurvey users you may turn on its **built-in** property.
{% endhint %}

## 🔅 Regular expression properties

* **`Name`** is the display name of the regular expression.
* **`Regular expression`** is the actual regular expression pattern that will be used to match the respondent answer .
* **`Error message`** error message that will be shown to the respondent if its entry doesn't match the pattern.
* **`Built in`** let us share the regular expression with all the other users.

{% hint style="info" %}
You may find pre-made regular expression and test yours at  <https://regex101.com/>
{% endhint %}

## 🔢 Javascript

For field based answers you can set the Javascript validation and Validation message property on the [answer properties](/form-management/form-designer/answers/answer-properties/field-properties) to use custom javascript code to validate your answer. \
\
In the code below respondentAnswerValue will be replaced by the actual value of the field. If the code returns false ngSurvey will block the submit or navigation and show the validation message.

```
return (respondentAnswerValue >= 18 && respondentAnswerValue <= 99);
```

In the code below we are using the getAnswer in the validation context to get a value from another answer in the survey. Here we are looking up an answer with a reporting alias set to "hh\_people".&#x20;

<pre><code><a data-footnote-ref href="#user-content-fn-1">re</a>turn (respondentAnswerValue &#x3C;= validationContext.getAnswer('hh_people'));
</code></pre>

The validation context support following method and properties

```typescript
export class ValidationContext {
   answer:Answer, // Current answer being validated
   question:Question, // Current question of the answer being validated
   questions:Question[], // All survey questions
   answers: Answer[];  // All survey answers

  public getAnswer(id: string): string // Get the value of an answer by looking up its reporting alias or id
  public isSelectedAnswer(id: string, value: string): boolean // Look up a question based on its id or reporting alias and check if the given value is being selected 
}

```

[^1]:


# Answer Types

## 📰 What are answer types ?

Each answer of your question can be defined using an answer type which adds a unique functionality to your survey questions.

{% hint style="info" %}
ngSurvey comes out of the box with following answer types, you may also [develop your own answer types](/form-management/form-designer/answers/answer-types/creating-new-type) and provide your own functionalities to extend ngSurvey using [widgets](/form-management/form-designer/answers/answer-types/creating-new-type/widget) and plain javascript and HTML.
{% endhint %}

* [Selection answers](/form-management/form-designer/answers/answer-types/selection-answers)
* [Other selection](/form-management/form-designer/answers/answer-types/other-selection)
* [Entry field](/form-management/form-designer/answers/answer-types/entry-field)
* [Numeric field](/form-management/form-designer/answers/answer-types/numeric-answer-field)
* [Custom lists](/form-management/form-designer/answers/answer-types/creating-new-type/lists)
* [Password](/form-management/form-designer/answers/answer-types/password)
* [Captcha](/form-management/form-designer/answers/answer-types/captcha)
* [Calendar date](/form-management/form-designer/answers/answer-types/calendar-date)
* [Calendar time](/form-management/form-designer/answers/answer-types/calendar-time)
* [Compare field](/form-management/form-designer/answers/answer-types/compare-field)
* [Countries](/form-management/form-designer/answers/answer-types/countries)
* [Email](/form-management/form-designer/answers/answer-types/email)
* [Email validator](/form-management/form-designer/answers/answer-types/email-validator)
* [Hidden field](/form-management/form-designer/answers/answer-types/hidden-field)
* [File upload](/form-management/form-designer/questions/question-types/advanced-types/file-upload)
* [Language selector](/form-management/form-designer/answers/answer-types/language-selector)
* [Phone confirmation](/form-management/form-designer/answers/answer-types/phone-confirmation)
* [Signature pad](/form-management/form-designer/answers/answer-types/signature-pad)
* [Slider](/form-management/form-designer/answers/answer-types/slider)
* [Ranking field](/form-management/form-designer/answers/answer-types/ranking-field)
* [Time picker](/form-management/form-designer/answers/answer-types/time-picker)


# Creating New Type

While offering a wide range of answer types there are times when you might need to build your own answer type to meet a specific business case. ngSurvey allows your to create new answer types with or without programming knowledge.

You may create following types of answer types.

* [Custom fields](/form-management/form-designer/answers/answer-types/creating-new-type/custom-validation-code) with your own custom javascript validation code.
* [Data source lists of items](/form-management/form-designer/answers/answer-types/creating-new-type/lists) to create lists that are build using a collection of text / value based items. Those lists can be build either from scratch or you may re-use existing data from a JSON REST API endpoint or from a Microsoft SQL Server database table.
* [Widgets](/form-management/form-designer/answers/answer-types/creating-new-type/widget) to create a powerful javascript, html and css based answer types. Using widgets you may develop almost any kind of functionality that you would miss in ngSurvey to collect data.

## ➕ Adding a new answer type

To create a new answer type you may click on the **+** icon to open the answer editing interface to add your type.

![](/files/-MBzXqs2qPjFomvfnWLl)

{% hint style="info" %}
New answer types can only be used and seen by the account that creates them.
{% endhint %}


# Custom Validation Code

You may add custom javascript that gets executed on the go to validate the current respondent input.&#x20;

![](/files/-MBzaUDnPZFCjtoy1Zq4)

You may also cross check the values of other respondent answers in the survey using the **surveyAnswers** array containing all the answers to the questions that were answered by the respondent so far.

Your custom method must either return null if your check have passed or return an object with with a message property that will be shown to the user as an error message.

Here are basic sample of a method that checks that the respondent has entered something in the answer field.

```javascript
/* 
 respondentAnswerValue: value that was entered by the respondent 
 answer : answer object that is being validated
 question: question object to which the answer belongs
 surveyAnswers: all respondent answers posted so far  */

function isFilled(
respondentAnswerValue, //  :string 
answer,  //  : Answer
question, // : Question 
surveyAnswers // : SurveyFormGroupAnswer[]
) {
  if (!respondentAnswerValue || respondentAnswerValue.length == 0) {
      return { message : 'please enter something'};
   } 
   return null;
}
```

```javascript
export interface SurveyFormGroupAnswer {
  answer: Answer; // Answer to which this respondent answer belongs to
  question: Question; // Question of the answer
  answerControl: FormControl; // Form control that keeps the respondent answer value
  sectionIndex: number; // section index if the question is repetable.
  sectionId: string; // unique section id if the question is repeatable.
}
```

{% hint style="info" %}
The answer control is an [Angular form control](https://angular.io/api/forms/FormControl) object as such we can get its value using following notation answerControl.value.
{% endhint %}


# Lists

## 📜️ What are lists ?

The lists answer types is a group of items that will be displayed as a list to the respondent. You may either create these lists manually using [list items](/form-management/form-designer/answers/answer-types/creating-new-type/lists/list-collections) or you may fetch pr-existing data from following sources.

* [JSON Rest API](/form-management/form-designer/answers/answer-types/creating-new-type/lists/json-rest-api-lists)
* [SQL Server database table](/form-management/form-designer/answers/answer-types/creating-new-type/lists/sql-server-lists)

## &#x20;🗒️ List layouts

You can setup your lists to display their items in following display formats.&#x20;

![](/files/-MC0qgOxdBe46NJLgrFu)




---

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

